-
Notifications
You must be signed in to change notification settings - Fork 0
docs(memory): the sweep's standard was recorded and its mechanics were not #659
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -92,6 +92,37 @@ evidence. | |
| A row whose acceptance does not fully resolve **stays In Review with the shortfall | ||
| recorded on it.** Promoting it anyway is the exact defect above, reproduced by hand. | ||
|
|
||
| ### Performing one promotion: the loop, and the two gates that refuse a shortcut | ||
|
|
||
| ``` | ||
| get_issue <id> → mise run board-payloads <id> → mise run issue-read-check → save_issue state=Done | ||
| ``` | ||
|
|
||
| **The read must be fresh, and that is enforced.** `save_issue` takes no if-match | ||
| precondition, so a write always wins over whatever landed since the read — hence | ||
| `issue-read-guard`, which **refuses** an update made from a read older than 300s. | ||
| `issue-read-check` is what mints the receipt: pipe it a `get_issue` payload and the | ||
| write is authorised for the next 300 seconds. This is not advice; the write is | ||
| rejected without it, and the rejection names the age in seconds. | ||
|
Comment on lines
+101
to
+106
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift Add a version check before every write. The 300-second receipt checks read age only. Because Obtain a fresh Also applies to: 122-124 🧰 Tools🪛 LanguageTool[grammar] ~105-~105: Ensure spelling is correct (QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1) 🤖 Prompt for AI AgentsSource: MCP tools |
||
|
|
||
| **`board-payloads` recovers the payload byte-perfect, but NOT freshly.** Its own | ||
| header says so — _"recover structure here; re-read the row before deciding its | ||
| state."_ Measured 2026-08-22: six cached payloads read `Todo` for rows that were | ||
| already In Review. Piping those to `released` would have reported them | ||
| `(left alone)` and **silently under-reported the movable set** — no error, no | ||
| refusal, just a shorter list. So a cached payload is usable only after confirming | ||
| its `updatedAt` is unchanged against a fresh `list_issues`; when it is, minting | ||
| from the cache is honest and costs nothing, and when it is not, re-read. | ||
|
Comment on lines
+108
to
+115
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win Require
Select the newest response whose tool identity is specifically 🤖 Prompt for AI AgentsSource: MCP tools |
||
|
|
||
| **The candidate set is derived, never stored.** `mise run released "$TAG" </dev/null` | ||
| per tag for the refs it shipped, intersected with `list_issues state="In Review"`. | ||
| Recomputing takes about two minutes and cannot go stale, which is why no list of | ||
| candidates is written down anywhere — including here. | ||
|
|
||
| **Do not batch the fetch.** Reading N rows and then promoting them all expires the | ||
| 300s window on the earliest. One row at a time, or verify acceptance for the batch | ||
| first and re-confirm `updatedAt` immediately before each write. | ||
|
|
||
| ## Two things that trip agents up | ||
|
|
||
| 1. **"Ready" is not a status.** It is the **Ready block** — text inside the issue | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Keep all promotion gates in the documented workflow.
The loop goes from a read receipt directly to
save_issue state=Done. It does not showreleased,graph-check, acceptance-read, or MUTANT-directive checks.The candidate command uses
released "$TAG" </dev/null. That form cannot evaluate attachment or hold/refusal checks. An operator can promote an issue that only cites the tag or declares a hold.Derive candidates from the fully gated In Review payload, then complete the remaining evidence checks before the final write. Do not use the no-payload form.
Also applies to: 117-120
🤖 Prompt for AI Agents
Source: MCP tools