dorfl 0.11.3 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/advance.d.ts +8 -1
- package/dist/advance.d.ts.map +1 -1
- package/dist/advance.js +39 -6
- package/dist/advance.js.map +1 -1
- package/dist/apply-decide.d.ts +7 -1
- package/dist/apply-decide.d.ts.map +1 -1
- package/dist/apply-decide.js +23 -10
- package/dist/apply-decide.js.map +1 -1
- package/dist/apply-persist.d.ts +52 -8
- package/dist/apply-persist.d.ts.map +1 -1
- package/dist/apply-persist.js +78 -9
- package/dist/apply-persist.js.map +1 -1
- package/dist/frontmatter.d.ts +17 -10
- package/dist/frontmatter.d.ts.map +1 -1
- package/dist/frontmatter.js +3 -3
- package/dist/frontmatter.js.map +1 -1
- package/dist/integration-core.d.ts.map +1 -1
- package/dist/integration-core.js +69 -0
- package/dist/integration-core.js.map +1 -1
- package/dist/protocol/CLAIM-PROTOCOL.md +22 -13
- package/dist/protocol/TASKING-PROTOCOL.md +1 -0
- package/dist/protocol/WORK-CONTRACT.md +8 -1
- package/dist/protocol/task-template.md +1 -1
- package/dist/review-gate.d.ts.map +1 -1
- package/dist/review-gate.js +9 -3
- package/dist/review-gate.js.map +1 -1
- package/dist/skills/setup/protocol/CLAIM-PROTOCOL.md +22 -13
- package/dist/skills/setup/protocol/TASKING-PROTOCOL.md +1 -0
- package/dist/skills/setup/protocol/WORK-CONTRACT.md +8 -1
- package/dist/skills/setup/protocol/task-template.md +1 -1
- package/dist/skills/triage-observations/SKILL.md +1 -1
- package/dist/triage-gate.d.ts +4 -2
- package/dist/triage-gate.d.ts.map +1 -1
- package/dist/triage-gate.js.map +1 -1
- package/dist/triage-persist.d.ts +55 -5
- package/dist/triage-persist.d.ts.map +1 -1
- package/dist/triage-persist.js +68 -7
- package/dist/triage-persist.js.map +1 -1
- package/package.json +1 -1
- package/src/advance.ts +52 -4
- package/src/apply-decide.ts +23 -10
- package/src/apply-persist.ts +86 -9
- package/src/frontmatter.ts +17 -10
- package/src/integration-core.ts +77 -0
- package/src/review-gate.ts +9 -3
- package/src/triage-gate.ts +4 -2
- package/src/triage-persist.ts +110 -9
|
@@ -72,8 +72,9 @@ work/
|
|
|
72
72
|
- **Transient status + locks are NOT on `main`** — they are per-item lock refs. `in-progress`/`needs-attention`/`tasking`/`advancing` are lock-ref state, not folders. A work branch cut from `main` therefore inherits NO transient status, so a continue/rebase is a plain rebase with nothing to drop. Eligibility/dependency resolution stay OFFLINE on `main` (`blockedBy → tasks/done/`, `taskedAfter → specs/tasked/`); only the operational "what's in flight" view (`status`/`scan`) reads the lock refs.
|
|
73
73
|
- **Capture buckets** (`notes/ideas`/`notes/observations`/`notes/findings`) are **NOT work items** and are **exempt from status = folder** — they are _notes_, not units of work. They do not move through statuses; they sit in their bucket, and the folder is the inbox (`ls work/notes/observations/` = the live signal list). They leave only by **deletion** (git history is the archive). A note may _spawn_ work (a task, an idea, an ADR) created independently — the note does not "become" or `git mv` into that work; it is simply deleted once it is no longer a useful signal. **Operational discharge test for a promoted note:** a note is dischargeable (deletable) the moment a **self-contained** artifact carries its signal — verify the spawned task/ADR actually contains the mechanism + fix shape (not just a back-pointer), then delete the note. Do NOT keep it until the spawned work lands in `tasks/done/`: a note stops being a live _signal_ the moment it is captured into actionable work, not when that work completes. If the spawned artifact is NOT self-contained, the bug is the artifact (fix it to carry the signal), not a reason to keep the note.
|
|
74
74
|
- **Deletion-on-apply is the SANCTIONED discharge — it is human-AUTHORED, so the capture-bucket rule below — a note "leaves the inbox **by deletion** the moment it stops being a live signal", a judgement only a human is authorised to make — does NOT bar it.** When the `advance` apply rung acts on a note whose question the human has ANSWERED, a decision agent reads that answer + the source note and emits a VERDICT, and the discharge DELETES the note in the SAME commit: a mint verdict (a new task / spec / ADR) rides the note's `git rm` in the same atomic commit as the new artifact's create; a delete-source verdict (the answer means "throw it away") is a standalone, revertible delete commit with the reason in the commit message. The cheap throw-away has a DIRECT path too — the human, the `answer-questions` skill, or the `dorfl` delete verb removes the source + its sidecar straight, no engine round-trip. Either way this is the human's ANSWER being EXECUTED, not the agent unilaterally destroying a live signal — that capture-bucket rule (the agent never deletes a live signal on its own judgement) only ever barred deleting an **un-answered** note; the human's answer IS the authorisation to delete. There is therefore **no `triaged:` / `needsAnswers:false` resting state** for a discharged note and **no `## Recommended: delete` recommend-and-retain hand-off** — a discharged note leaves the inbox, it does not rest there stamped "resolved". (Work ITEMS still leave via a terminal FOLDER, never by deletion; only notes discharge by deletion.)
|
|
75
|
+
- **The one note that DOES rest: a note the answer settles but KEEPS, because its signal is still live.** Not every answered question discharges its note. Some notes are answered with "nothing to mint, and this note stays" — a standing map of a known gap, or accepted residue that is recorded nowhere else — and the answer is precisely an instruction to keep them. That is NOT the discharged case above and it does not contradict the liveness rule: the note is still a live signal, so it stays in the inbox; what ended is its QUESTION-LOOP. Because it stays in a bucket that gets re-scanned, it MUST carry a durable record that it has been through triage, or the engine cannot tell it from a note that was never triaged and re-asks the same question forever. **A kept, triaged note therefore rests as: `triaged: <disposition>` + `needsAnswers: false` + no question sidecar + the harvested answers in its body.** The `triaged:` marker means "this note's question-loop is settled", NEVER "this note's signal is finished" — a finished signal has no resting state at all, it is deleted. So the test is always liveness, applied FRESHLY at answer time: if the answer means the thing was fixed, was already covered elsewhere, is obsolete, or is now wholly carried by a task/spec/ADR/commit, that note is discharged and DELETED; only a note that still carries a signal nothing else records may be kept and stamped. Keeping a note merely to show it was handled is the backward artifact the next paragraph forbids.
|
|
75
76
|
|
|
76
|
-
> **Every capture-bucket note and every work item has a DIRECTION and a LIVENESS — never manufacture a backward artifact to look compliant.** Forward artifacts — a `tasks/ready/` task, an _open_ `notes/observations/` signal — describe work that is **pending or currently-signalled**, never the past. So: work that is **already done** does NOT get a task or observation back-filled to narrate it (a `tasks/ready/` task with pre-ticked acceptance criteria is a changelog wearing a spec's shape); completed work is recorded as a `tasks/done/` record landed _with_ the code plus the commit message, owned by whoever does the git transition. And a captured note is LIVE: it leaves the inbox **by deletion** the moment it stops being a live signal — a note
|
|
77
|
+
> **Every capture-bucket note and every work item has a DIRECTION and a LIVENESS — never manufacture a backward artifact to look compliant.** Forward artifacts — a `tasks/ready/` task, an _open_ `notes/observations/` signal — describe work that is **pending or currently-signalled**, never the past. So: work that is **already done** does NOT get a task or observation back-filled to narrate it (a `tasks/ready/` task with pre-ticked acceptance criteria is a changelog wearing a spec's shape); completed work is recorded as a `tasks/done/` record landed _with_ the code plus the commit message, owned by whoever does the git transition. And a captured note is LIVE: it leaves the inbox **by deletion** the moment it stops being a live signal — a note kept only to narrate that it was dealt with is a contradiction (there is no `resolved` status for a spent signal; discharge it by deleting it, its lasting product being the task/ADR/commit it spawned). The narrow exception is the settled-but-still-live note above (`triaged:` + `needsAnswers: false`): it is kept for the signal it STILL carries, not as a record of having been handled — the moment that is no longer true it is deleted like any other spent note. This binds an agent invoked **outside** the runner too: building directly is fine when asked, but do not retroactively mint forward artifacts for it afterward.
|
|
77
78
|
|
|
78
79
|
### The three capture buckets (different by polarity + mutability)
|
|
79
80
|
|
|
@@ -93,6 +94,12 @@ work/
|
|
|
93
94
|
> - `"told by maintainer @<name>, 2026-06"` / `"inferred from the test asserting it at <path>"` — whatever it actually was; write it plainly.
|
|
94
95
|
>
|
|
95
96
|
> Put `source:` in the finding's frontmatter (see below) and, when the provenance is non-obvious, expand on it in the body. A finding without a source is a `notes/observations/` signal, not a finding.
|
|
97
|
+
>
|
|
98
|
+
> **A MEASUREMENT we made is a legitimate finding, and a COMMITTED SCRIPT is legitimate provenance.** Probing a runtime / an API / a tool to establish how it REALLY behaves produces exactly what a finding is for (external ground truth), so it does not matter that the `source:` names one of OUR files instead of someone else's URL; what matters is that the source is nameable and RE-RUNNABLE. Keep the two halves in their own homes: the EVIDENCE (the probe script, its raw output) is a durable task asset and lives at **`docs/spikes/<slug>/`** (the stable home of conflict-safety rule 8, never a `work/` sidecar), while the KNOWLEDGE lives in `work/notes/findings/<slug>.md` with a `source:` naming the script, its commit, WHAT it ran against (runtime + version) and WHEN, e.g. `source: 'measured by docs/spikes/<slug>/probe.mjs @ <commit>, against node 22.4 on 2026-08-11'`. **When a measurement is LOAD-BEARING, meaning some capability is withheld or enabled BECAUSE of it, the finding is REQUIRED, not optional.** A spike folder alone leaves the reason undiscoverable (nobody greps `docs/spikes/` when asking "why is this capability withheld?"), so the next agent re-litigates the measurement or silently reverses the behaviour it justifies. `docs/spikes/` is an EVIDENCE store, never the knowledge home. (Still bounded by the external/domain rule above: measuring OUR OWN code's internals is not a finding.)
|
|
99
|
+
|
|
100
|
+
> **Where a BUILDER's RATIONALE lives: the `## Decisions` block, transcribed into the done record. There is NO pending-ratification note kind.** A builder who makes a non-obvious in-scope choice the task did not specify (a new error/refusal, a user-visible default, a cross-task interaction) MUST surface it for ratification, and has exactly ONE channel: it emits a **`## Decisions`** block in its FINAL REPORT, and the runner transcribes that block VERBATIM into the done record (`work/tasks/done/<slug>.md`) in the SAME commit as the `tasks/ready → tasks/done` move. It is the only sanctioned route BECAUSE of the claim boundary: the builder does no git and MUST NOT edit the task body (`CLAIM-PROTOCOL.md`), and the done-move belongs to the runner. "Write your rationale into the done record" is therefore an instruction the builder CANNOT obey, and any contract phrasing that asks it to is a defect in the contract, not in the agent. The report is the one surface the builder owns, so that is where the channel is. Escalation: a decision meeting the ADR gate (hard to reverse + surprising without context + a real trade-off, see `ADR-FORMAT.md`) is written by the builder as an ADR in `docs/adr/` (creating a file is ordinary WORK, not git) and NAMED in the block. A short JSDoc at the choice site is welcome as the code-adjacent copy, but NEVER a substitute for the block: rationale reachable only by reading the diff is not reviewable.
|
|
101
|
+
>
|
|
102
|
+
> **A decision is NOT an observation, so never open a `decisions-<task-slug>.md` / `decision-<...>.md` note.** `notes/observations/` holds a _spotted, unverified_ signal that something may be WRONG; a choice you made deliberately and verified is neither spotted nor unverified, so it fails the bucket's definition on both axes. Worse, such a note is a BACKWARD artifact (it narrates work already COMPLETED) parked in a LIVE, FORWARD bucket, so it can never be discharged: no future event makes it stop being true, and they silently accumulate forever. That is the DIRECTION-and-LIVENESS rule above applied to rationale: completed work is recorded by the done record plus its commit, never by a note back-filled to narrate it. If you are holding rationale and reaching for a note, you are looking for the `## Decisions` block.
|
|
96
103
|
|
|
97
104
|
**For work items, DURABLE status is the folder a file lives in — never a frontmatter field.** Finishing / dropping / tasking-complete = moving the file between durable folders with `git mv` on `main`. This is what makes concurrent durable updates safe: two agents moving _different_ files never conflict. (Transient status — claimed/stuck/being-tasked — is NOT a folder move; it is a per-item lock ref, see above. Capture buckets are exempt too.)
|
|
98
105
|
|
|
@@ -49,7 +49,7 @@ Exception: if a prototype produced a snippet that encodes a decision more precis
|
|
|
49
49
|
>
|
|
50
50
|
> FIRST, check this task against current reality (it is a launch snapshot and may have DRIFTED): does it still match the code in `tasks/done/`, the relevant ADRs, and the tasks it depends on? If a dependency landed differently than this task assumes, or an ADR superseded an assumption here, do NOT build on the stale premise — route the task to needs-attention with the discrepancy as the reason (WORK-CONTRACT.md "Drift is a needs-attention signal"). Building on a stale task produces wrong-but-compiling work.
|
|
51
51
|
>
|
|
52
|
-
> RECORD non-obvious in-scope decisions you make while building,
|
|
52
|
+
> RECORD non-obvious in-scope decisions you make while building, in a `## Decisions` block at the end of your FINAL REPORT. When the task did not specify some behaviour and you have to CHOOSE (a new refusal/exit code, a clamp that reaches a second code path, a fail-loud-vs-fail-safe asymmetry, keeping vs collapsing a now-redundant distinction), do not leave the choice silent for a reviewer to reverse-engineer. That block is the ONE sanctioned channel for build-time rationale, and the runner transcribes it verbatim into the done record in the same commit as the done-move. So do NOT try to write the done record, the commit message, or the PR body yourself (you do no git and must not edit the task body), and do NOT open a `work/notes/observations/decisions-<slug>.md` note (an observation is a SPOTTED, UNVERIFIED signal, not a decision you made). If the choice meets the ADR gate (hard to reverse + surprising without context + a real trade-off, see `ADR-FORMAT.md`), ALSO write the durable WHY as an ADR in `docs/adr/` and name it in the block. An un-recorded in-scope decision is a review FINDING, not a silent default.
|
|
53
53
|
|
|
54
54
|
---
|
|
55
55
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-gate.d.ts","sourceRoot":"","sources":["../src/review-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,OAAO,EAAC,MAAM,cAAc,CAAC;AAIxE,OAAO,EAMN,KAAK,aAAa,EAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,aAAa,GAClB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC/B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sEAAsE;IACtE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,+EAA+E;IAC/E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"review-gate.d.ts","sourceRoot":"","sources":["../src/review-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,OAAO,EAAC,MAAM,cAAc,CAAC;AAIxE,OAAO,EAMN,KAAK,aAAa,EAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,aAAa,GAClB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC/B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sEAAsE;IACtE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,+EAA+E;IAC/E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4DtD;AAED,0EAA0E;AAC1E,MAAM,WAAW,wBAAwB;IACxC,sEAAsE;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;CACpD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,GAAE,wBAA6B,GACpC,UAAU,CAgDZ;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoC9D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACxC,OAAO,GAAE,wBAA6B,GACpC,UAAU,CAoCZ;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAQhE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMrE"}
|
package/dist/review-gate.js
CHANGED
|
@@ -41,12 +41,18 @@ export function buildReviewPrompt(slug) {
|
|
|
41
41
|
`design choice the agent made on its own while building: a CROSS-TASK`,
|
|
42
42
|
`INTERACTION (a choice affecting another command/flag/task's behaviour), a new`,
|
|
43
43
|
`ERROR/REFUSAL, or a user-visible DEFAULT. The agent SHOULD have recorded these`,
|
|
44
|
-
`in a "## Decisions" block in its
|
|
44
|
+
`in a "## Decisions" block in its report, which the runner transcribes into the`,
|
|
45
|
+
`done record (work/tasks/done/<slug>.md) and which also rides the PR description.`,
|
|
46
|
+
`START from that block (ratify`,
|
|
45
47
|
`each entry) AND hunt for any it MISSED. Flag EACH such decision as a finding`,
|
|
46
|
-
`for the human to RATIFY
|
|
48
|
+
`for the human to RATIFY: "non-blocking" by DEFAULT (the build proceeds; the`,
|
|
47
49
|
`human ratifies or reverses), escalating to "blocking" ONLY if the decision looks`,
|
|
48
50
|
`WRONG or is genuinely load-bearing-and-hard-to-reverse. An un-recorded in-scope`,
|
|
49
|
-
`decision is NOT itself a block
|
|
51
|
+
`decision is NOT itself a block, it is a ratification finding. Do NOT raise a`,
|
|
52
|
+
`finding about WHERE the rationale was written (the done record, the commit body`,
|
|
53
|
+
`and the PR body are the RUNNER's to author, never the builder's): review the`,
|
|
54
|
+
`DECISION, not the filing. If rationale is missing entirely, that is the`,
|
|
55
|
+
`ratification finding above.`,
|
|
50
56
|
``,
|
|
51
57
|
`ALSO CHECK CONCEPTUAL COHERENCE — does this diff fit the system's existing`,
|
|
52
58
|
`LANGUAGE? For each concept / flag / config key / status / verb it introduces or`,
|
package/dist/review-gate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-gate.js","sourceRoot":"","sources":["../src/review-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAgC,MAAM,cAAc,CAAC;AACxE,OAAO,EAAC,uBAAuB,EAAC,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACN,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,GAGrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,kBAAkB,EAClB,gBAAgB,GAGhB,MAAM,qBAAqB,CAAC;AAyE7B;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC7C,OAAO;QACN,wEAAwE;QACxE,uEAAuE;QACvE,qBAAqB,IAAI,oBAAoB,IAAI,2BAA2B;QAC5E,EAAE;QACF,sBAAsB,EAAE;QACxB,EAAE;QACF,0EAA0E;QAC1E,2EAA2E;QAC3E,6EAA6E;QAC7E,2EAA2E;QAC3E,uDAAuD;QACvD,8DAA8D;QAC9D,EAAE;QACF,2EAA2E;QAC3E,sEAAsE;QACtE,+EAA+E;QAC/E,gFAAgF;QAChF,
|
|
1
|
+
{"version":3,"file":"review-gate.js","sourceRoot":"","sources":["../src/review-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -147,14 +147,23 @@ code itself (it affects nothing outside this task), resolve and proceed silently
|
|
|
147
147
|
But a choice that touches ANOTHER command/flag/task, introduces a new
|
|
148
148
|
ERROR/REFUSAL, or sets a USER-VISIBLE DEFAULT is a DESIGN decision, NOT a small
|
|
149
149
|
factual gap — do NOT bury it in code. If it is load-bearing AND hard to reverse,
|
|
150
|
-
STOP (above). Otherwise PROCEED but RECORD it
|
|
151
|
-
|
|
152
|
-
considered + what it touches (which other flag/command/task).
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
150
|
+
STOP (above). Otherwise PROCEED but RECORD it in a "## Decisions"
|
|
151
|
+
block in your FINAL REPORT, one entry per decision: what you chose + why + the
|
|
152
|
+
alternative(s) you considered + what it touches (which other flag/command/task).
|
|
153
|
+
|
|
154
|
+
That block is the ONE sanctioned channel for build-time rationale, and the runner
|
|
155
|
+
TRANSCRIBES it verbatim into the done record (work/tasks/done/<slug>.md) in the
|
|
156
|
+
SAME commit as the done-move. Emit it as a plain "## Decisions" heading in the
|
|
157
|
+
report you end with; everything under it up to the next "## " heading is captured.
|
|
158
|
+
Do NOT try to write the rationale into the done record yourself: you must not
|
|
159
|
+
edit the task body and you do no git, so the report is the only surface you own.
|
|
160
|
+
Do NOT open a work/notes/observations/decisions-<slug>.md note for it either: an
|
|
161
|
+
observation is a SPOTTED, UNVERIFIED signal, not a decision you made (WORK-CONTRACT,
|
|
162
|
+
"Where a BUILDER's RATIONALE lives"). If a decision meets the ADR gate (hard to
|
|
163
|
+
reverse + surprising without context + a real trade-off), ALSO write it as an ADR
|
|
164
|
+
in docs/adr/ (creating that file is ordinary work, not git) and name it in the
|
|
165
|
+
block. A short JSDoc at the choice site is welcome as the code-adjacent copy, but
|
|
166
|
+
it does not replace the block. This does NOT stop the build; it
|
|
158
167
|
makes the choice visible so the reviewer + the human can ratify or reverse it.
|
|
159
168
|
The bar is "would another task / a user / a reviewer be surprised this was
|
|
160
169
|
decided here?" — if yes, record it. A real ambiguity or stale premise, STOP.
|
|
@@ -169,8 +178,7 @@ step vs the explicit verb a human typed)? (3) does it DUPLICATE/overlap an exist
|
|
|
169
178
|
concept you should reuse or rename instead of forking? If a new concept conflicts
|
|
170
179
|
with, re-means, or duplicates an existing one — or sits at the wrong layer — that is
|
|
171
180
|
NOT a "small factual gap": STOP if it is load-bearing/hard-to-reverse, else RECORD
|
|
172
|
-
it
|
|
173
|
-
in the done record, or an observation note — linked from the done record), noting
|
|
181
|
+
it in your `## Decisions` block per the rule above, noting
|
|
174
182
|
what concept, what it overlaps, why your placement. This is
|
|
175
183
|
the prevention half of the review's conceptual-coherence lens — a muddled concept
|
|
176
184
|
that compiles is far more expensive than the question, because every later artifact
|
|
@@ -212,9 +220,10 @@ The classic case: a change that touched a package but added no changeset entry
|
|
|
212
220
|
conventions doc; it is the repo's source of truth for these standing rules.
|
|
213
221
|
|
|
214
222
|
When the acceptance criteria are met and the repo's build/test/format checks are
|
|
215
|
-
green, STOP and report what you did
|
|
216
|
-
|
|
217
|
-
|
|
223
|
+
green, STOP and report what you did, ending with your "## Decisions" block if you
|
|
224
|
+
made any in-scope decisions (above). The runner handles the durable `git mv` of the
|
|
225
|
+
body tasks/ready/ -> work/tasks/done/, transcribing your "## Decisions" block into
|
|
226
|
+
that done record, the completion commit, the lock release, and integration.
|
|
218
227
|
```
|
|
219
228
|
|
|
220
229
|
The "no git" line is **in-band** in the prompt (not delegated to a host config like a global `AGENTS.md`): a portable runner cannot assume the target machine has any such rule, so the boundary travels with the prompt. This keeps the acceptance-test gate authoritative (the agent can't commit/merge around it) and the runner the single owner of git state.
|
|
@@ -132,6 +132,7 @@ Each emitted task file is a markdown document with YAML frontmatter, BORN STAGED
|
|
|
132
132
|
|
|
133
133
|
- **`## What to build`** — a concise description of the vertical task — the end-to-end behaviour (a thin path through every layer: schema → logic → API/UI → tests), NOT a layer-by-layer implementation plan. Avoid specific file paths / code snippets (they go stale).
|
|
134
134
|
- **`## Acceptance criteria`** — a bullet list of verifiable / demoable criteria, ending with the test-coverage line and (where applicable) the shared-write isolation rule from `WORK-CONTRACT.md`.
|
|
135
|
+
- **NEVER write a criterion that asks the BUILDER to write the done record, the commit message, or the PR body** ("rationale recorded in the done record", "document the trade-off in the commit body"). The builder does no git and must not edit the task body, and the done-move plus the commit are the RUNNER's, so such a criterion is UNSATISFIABLE as written: the builder scatters the rationale somewhere reachable instead (a JSDoc, a changeset, an invented `decisions-*` note) and every review re-raises the same "no Decisions block" finding. Rationale already has ONE channel, guaranteed by the protocol for EVERY task: the builder's `## Decisions` block, which the runner transcribes into the done record (`WORK-CONTRACT.md`, "Where a BUILDER's RATIONALE lives"). So do not restate it as an acceptance criterion at all; write criteria about the BEHAVIOUR the task must exhibit. If a specific decision genuinely must be durable in its own right, make the criterion name the artifact the builder CAN create ("an ADR in `docs/adr/` records why X was chosen over Y"), not the record it cannot reach.
|
|
135
136
|
- **`## Blocked by`** — prose mirror of the frontmatter `blockedBy:`; `None — can start immediately.` when `blockedBy: []`.
|
|
136
137
|
- **`## Prompt`** — self-contained instructions to paste into a fresh agent context: an agent must be able to start from THIS FILE ALONE. State the goal, the relevant domain vocabulary, where to look (by module/concept, not brittle paths), the seams to test at, and what "done" means. Reference any constraining ADRs / findings.
|
|
137
138
|
- **`## Open questions`** — present iff `needsAnswers: true`; lists the unresolved questions blocking autonomous build. Stripped by the apply rung on full resolution.
|
|
@@ -72,8 +72,9 @@ work/
|
|
|
72
72
|
- **Transient status + locks are NOT on `main`** — they are per-item lock refs. `in-progress`/`needs-attention`/`tasking`/`advancing` are lock-ref state, not folders. A work branch cut from `main` therefore inherits NO transient status, so a continue/rebase is a plain rebase with nothing to drop. Eligibility/dependency resolution stay OFFLINE on `main` (`blockedBy → tasks/done/`, `taskedAfter → specs/tasked/`); only the operational "what's in flight" view (`status`/`scan`) reads the lock refs.
|
|
73
73
|
- **Capture buckets** (`notes/ideas`/`notes/observations`/`notes/findings`) are **NOT work items** and are **exempt from status = folder** — they are _notes_, not units of work. They do not move through statuses; they sit in their bucket, and the folder is the inbox (`ls work/notes/observations/` = the live signal list). They leave only by **deletion** (git history is the archive). A note may _spawn_ work (a task, an idea, an ADR) created independently — the note does not "become" or `git mv` into that work; it is simply deleted once it is no longer a useful signal. **Operational discharge test for a promoted note:** a note is dischargeable (deletable) the moment a **self-contained** artifact carries its signal — verify the spawned task/ADR actually contains the mechanism + fix shape (not just a back-pointer), then delete the note. Do NOT keep it until the spawned work lands in `tasks/done/`: a note stops being a live _signal_ the moment it is captured into actionable work, not when that work completes. If the spawned artifact is NOT self-contained, the bug is the artifact (fix it to carry the signal), not a reason to keep the note.
|
|
74
74
|
- **Deletion-on-apply is the SANCTIONED discharge — it is human-AUTHORED, so the capture-bucket rule below — a note "leaves the inbox **by deletion** the moment it stops being a live signal", a judgement only a human is authorised to make — does NOT bar it.** When the `advance` apply rung acts on a note whose question the human has ANSWERED, a decision agent reads that answer + the source note and emits a VERDICT, and the discharge DELETES the note in the SAME commit: a mint verdict (a new task / spec / ADR) rides the note's `git rm` in the same atomic commit as the new artifact's create; a delete-source verdict (the answer means "throw it away") is a standalone, revertible delete commit with the reason in the commit message. The cheap throw-away has a DIRECT path too — the human, the `answer-questions` skill, or the `dorfl` delete verb removes the source + its sidecar straight, no engine round-trip. Either way this is the human's ANSWER being EXECUTED, not the agent unilaterally destroying a live signal — that capture-bucket rule (the agent never deletes a live signal on its own judgement) only ever barred deleting an **un-answered** note; the human's answer IS the authorisation to delete. There is therefore **no `triaged:` / `needsAnswers:false` resting state** for a discharged note and **no `## Recommended: delete` recommend-and-retain hand-off** — a discharged note leaves the inbox, it does not rest there stamped "resolved". (Work ITEMS still leave via a terminal FOLDER, never by deletion; only notes discharge by deletion.)
|
|
75
|
+
- **The one note that DOES rest: a note the answer settles but KEEPS, because its signal is still live.** Not every answered question discharges its note. Some notes are answered with "nothing to mint, and this note stays" — a standing map of a known gap, or accepted residue that is recorded nowhere else — and the answer is precisely an instruction to keep them. That is NOT the discharged case above and it does not contradict the liveness rule: the note is still a live signal, so it stays in the inbox; what ended is its QUESTION-LOOP. Because it stays in a bucket that gets re-scanned, it MUST carry a durable record that it has been through triage, or the engine cannot tell it from a note that was never triaged and re-asks the same question forever. **A kept, triaged note therefore rests as: `triaged: <disposition>` + `needsAnswers: false` + no question sidecar + the harvested answers in its body.** The `triaged:` marker means "this note's question-loop is settled", NEVER "this note's signal is finished" — a finished signal has no resting state at all, it is deleted. So the test is always liveness, applied FRESHLY at answer time: if the answer means the thing was fixed, was already covered elsewhere, is obsolete, or is now wholly carried by a task/spec/ADR/commit, that note is discharged and DELETED; only a note that still carries a signal nothing else records may be kept and stamped. Keeping a note merely to show it was handled is the backward artifact the next paragraph forbids.
|
|
75
76
|
|
|
76
|
-
> **Every capture-bucket note and every work item has a DIRECTION and a LIVENESS — never manufacture a backward artifact to look compliant.** Forward artifacts — a `tasks/ready/` task, an _open_ `notes/observations/` signal — describe work that is **pending or currently-signalled**, never the past. So: work that is **already done** does NOT get a task or observation back-filled to narrate it (a `tasks/ready/` task with pre-ticked acceptance criteria is a changelog wearing a spec's shape); completed work is recorded as a `tasks/done/` record landed _with_ the code plus the commit message, owned by whoever does the git transition. And a captured note is LIVE: it leaves the inbox **by deletion** the moment it stops being a live signal — a note
|
|
77
|
+
> **Every capture-bucket note and every work item has a DIRECTION and a LIVENESS — never manufacture a backward artifact to look compliant.** Forward artifacts — a `tasks/ready/` task, an _open_ `notes/observations/` signal — describe work that is **pending or currently-signalled**, never the past. So: work that is **already done** does NOT get a task or observation back-filled to narrate it (a `tasks/ready/` task with pre-ticked acceptance criteria is a changelog wearing a spec's shape); completed work is recorded as a `tasks/done/` record landed _with_ the code plus the commit message, owned by whoever does the git transition. And a captured note is LIVE: it leaves the inbox **by deletion** the moment it stops being a live signal — a note kept only to narrate that it was dealt with is a contradiction (there is no `resolved` status for a spent signal; discharge it by deleting it, its lasting product being the task/ADR/commit it spawned). The narrow exception is the settled-but-still-live note above (`triaged:` + `needsAnswers: false`): it is kept for the signal it STILL carries, not as a record of having been handled — the moment that is no longer true it is deleted like any other spent note. This binds an agent invoked **outside** the runner too: building directly is fine when asked, but do not retroactively mint forward artifacts for it afterward.
|
|
77
78
|
|
|
78
79
|
### The three capture buckets (different by polarity + mutability)
|
|
79
80
|
|
|
@@ -93,6 +94,12 @@ work/
|
|
|
93
94
|
> - `"told by maintainer @<name>, 2026-06"` / `"inferred from the test asserting it at <path>"` — whatever it actually was; write it plainly.
|
|
94
95
|
>
|
|
95
96
|
> Put `source:` in the finding's frontmatter (see below) and, when the provenance is non-obvious, expand on it in the body. A finding without a source is a `notes/observations/` signal, not a finding.
|
|
97
|
+
>
|
|
98
|
+
> **A MEASUREMENT we made is a legitimate finding, and a COMMITTED SCRIPT is legitimate provenance.** Probing a runtime / an API / a tool to establish how it REALLY behaves produces exactly what a finding is for (external ground truth), so it does not matter that the `source:` names one of OUR files instead of someone else's URL; what matters is that the source is nameable and RE-RUNNABLE. Keep the two halves in their own homes: the EVIDENCE (the probe script, its raw output) is a durable task asset and lives at **`docs/spikes/<slug>/`** (the stable home of conflict-safety rule 8, never a `work/` sidecar), while the KNOWLEDGE lives in `work/notes/findings/<slug>.md` with a `source:` naming the script, its commit, WHAT it ran against (runtime + version) and WHEN, e.g. `source: 'measured by docs/spikes/<slug>/probe.mjs @ <commit>, against node 22.4 on 2026-08-11'`. **When a measurement is LOAD-BEARING, meaning some capability is withheld or enabled BECAUSE of it, the finding is REQUIRED, not optional.** A spike folder alone leaves the reason undiscoverable (nobody greps `docs/spikes/` when asking "why is this capability withheld?"), so the next agent re-litigates the measurement or silently reverses the behaviour it justifies. `docs/spikes/` is an EVIDENCE store, never the knowledge home. (Still bounded by the external/domain rule above: measuring OUR OWN code's internals is not a finding.)
|
|
99
|
+
|
|
100
|
+
> **Where a BUILDER's RATIONALE lives: the `## Decisions` block, transcribed into the done record. There is NO pending-ratification note kind.** A builder who makes a non-obvious in-scope choice the task did not specify (a new error/refusal, a user-visible default, a cross-task interaction) MUST surface it for ratification, and has exactly ONE channel: it emits a **`## Decisions`** block in its FINAL REPORT, and the runner transcribes that block VERBATIM into the done record (`work/tasks/done/<slug>.md`) in the SAME commit as the `tasks/ready → tasks/done` move. It is the only sanctioned route BECAUSE of the claim boundary: the builder does no git and MUST NOT edit the task body (`CLAIM-PROTOCOL.md`), and the done-move belongs to the runner. "Write your rationale into the done record" is therefore an instruction the builder CANNOT obey, and any contract phrasing that asks it to is a defect in the contract, not in the agent. The report is the one surface the builder owns, so that is where the channel is. Escalation: a decision meeting the ADR gate (hard to reverse + surprising without context + a real trade-off, see `ADR-FORMAT.md`) is written by the builder as an ADR in `docs/adr/` (creating a file is ordinary WORK, not git) and NAMED in the block. A short JSDoc at the choice site is welcome as the code-adjacent copy, but NEVER a substitute for the block: rationale reachable only by reading the diff is not reviewable.
|
|
101
|
+
>
|
|
102
|
+
> **A decision is NOT an observation, so never open a `decisions-<task-slug>.md` / `decision-<...>.md` note.** `notes/observations/` holds a _spotted, unverified_ signal that something may be WRONG; a choice you made deliberately and verified is neither spotted nor unverified, so it fails the bucket's definition on both axes. Worse, such a note is a BACKWARD artifact (it narrates work already COMPLETED) parked in a LIVE, FORWARD bucket, so it can never be discharged: no future event makes it stop being true, and they silently accumulate forever. That is the DIRECTION-and-LIVENESS rule above applied to rationale: completed work is recorded by the done record plus its commit, never by a note back-filled to narrate it. If you are holding rationale and reaching for a note, you are looking for the `## Decisions` block.
|
|
96
103
|
|
|
97
104
|
**For work items, DURABLE status is the folder a file lives in — never a frontmatter field.** Finishing / dropping / tasking-complete = moving the file between durable folders with `git mv` on `main`. This is what makes concurrent durable updates safe: two agents moving _different_ files never conflict. (Transient status — claimed/stuck/being-tasked — is NOT a folder move; it is a per-item lock ref, see above. Capture buckets are exempt too.)
|
|
98
105
|
|
|
@@ -49,7 +49,7 @@ Exception: if a prototype produced a snippet that encodes a decision more precis
|
|
|
49
49
|
>
|
|
50
50
|
> FIRST, check this task against current reality (it is a launch snapshot and may have DRIFTED): does it still match the code in `tasks/done/`, the relevant ADRs, and the tasks it depends on? If a dependency landed differently than this task assumes, or an ADR superseded an assumption here, do NOT build on the stale premise — route the task to needs-attention with the discrepancy as the reason (WORK-CONTRACT.md "Drift is a needs-attention signal"). Building on a stale task produces wrong-but-compiling work.
|
|
51
51
|
>
|
|
52
|
-
> RECORD non-obvious in-scope decisions you make while building,
|
|
52
|
+
> RECORD non-obvious in-scope decisions you make while building, in a `## Decisions` block at the end of your FINAL REPORT. When the task did not specify some behaviour and you have to CHOOSE (a new refusal/exit code, a clamp that reaches a second code path, a fail-loud-vs-fail-safe asymmetry, keeping vs collapsing a now-redundant distinction), do not leave the choice silent for a reviewer to reverse-engineer. That block is the ONE sanctioned channel for build-time rationale, and the runner transcribes it verbatim into the done record in the same commit as the done-move. So do NOT try to write the done record, the commit message, or the PR body yourself (you do no git and must not edit the task body), and do NOT open a `work/notes/observations/decisions-<slug>.md` note (an observation is a SPOTTED, UNVERIFIED signal, not a decision you made). If the choice meets the ADR gate (hard to reverse + surprising without context + a real trade-off, see `ADR-FORMAT.md`), ALSO write the durable WHY as an ADR in `docs/adr/` and name it in the block. An un-recorded in-scope decision is a review FINDING, not a silent default.
|
|
53
53
|
|
|
54
54
|
---
|
|
55
55
|
|
|
@@ -56,7 +56,7 @@ Compose with the `to-task` discipline if available — it produces exactly this
|
|
|
56
56
|
|
|
57
57
|
Apply the `work/` contract (`work/protocol/WORK-CONTRACT.md`), especially:
|
|
58
58
|
|
|
59
|
-
- **Discharge by deletion.** A capture-bucket note leaves the inbox by **deletion** the moment it stops being a live signal (git history is the archive). There is no `resolved` status; a note
|
|
59
|
+
- **Discharge by deletion.** A capture-bucket note leaves the inbox by **deletion** the moment it stops being a live signal (git history is the archive). There is no `resolved` status for a spent signal; a note kept only to narrate that it was dealt with is a contradiction. The one note that legitimately stays is one whose signal is STILL live after the answer (a standing map of a known gap, accepted residue recorded nowhere else): it rests `triaged: <disposition>` + `needsAnswers: false` with the answers harvested into its body, and the marker means its question-loop is settled, never that its signal is finished.
|
|
60
60
|
- **Promoted notes discharge on SPAWN, not on landing.** A note promoted into a task/ADR is deletable AS SOON AS that artifact carries its signal — _verify self-containment first_ — NOT when the spawned work lands in `tasks/done/`. "Delete once the task lands" is the resolved-but-kept contradiction. If the spawned artifact is NOT self-contained, the bug is the artifact (fix it to carry the signal), not a reason to keep the note.
|
|
61
61
|
- **Forward & live only.** Don't back-fill a task/observation to narrate already-done work. A surviving observation describes a _pending or currently-signalled_ concern.
|
|
62
62
|
|
package/dist/triage-gate.d.ts
CHANGED
|
@@ -23,8 +23,10 @@ import { type Harness } from './harness.js';
|
|
|
23
23
|
* - `map` — an UNAMBIGUOUS map onto an existing item → DISCHARGE the redundant
|
|
24
24
|
* note BY DELETION too (it is already covered by the item it maps onto, so it
|
|
25
25
|
* carries no unique signal; the mapping is recorded in the commit message).
|
|
26
|
-
*
|
|
27
|
-
* `agentic-apply-retire-disposition-vocabulary`)
|
|
26
|
+
* An AUTO disposition never RESTS a note (task
|
|
27
|
+
* `agentic-apply-retire-disposition-vocabulary`); the one path that KEEPS a
|
|
28
|
+
* note is the human-answered `resolve` verdict on the apply rung (ADR
|
|
29
|
+
* `resolve-settles-the-question-loop-not-the-note`).
|
|
28
30
|
*
|
|
29
31
|
* It is the DIRECT mirror of `surface-gate.ts`'s spawn→emit→parse seam, with a
|
|
30
32
|
* narrower emitted payload (`{auto, …}` rather than `{questions}`). Production
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triage-gate.d.ts","sourceRoot":"","sources":["../src/triage-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,OAAO,EAAC,MAAM,cAAc,CAAC;AAIvD
|
|
1
|
+
{"version":3,"file":"triage-gate.d.ts","sourceRoot":"","sources":["../src/triage-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,OAAO,EAAC,MAAM,cAAc,CAAC;AAIvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,4EAA4E;AAC5E,MAAM,MAAM,cAAc;AACzB,mFAAmF;AACjF,WAAW;AACb,2FAA2F;GACzF,KAAK,CAAC;AAET;;;;GAIG;AACH,MAAM,MAAM,UAAU,GACnB;IACA,IAAI,EAAE,IAAI,CAAC;IACX,iEAAiE;IACjE,IAAI,EAAE,cAAc,CAAC;IACrB,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;CACd,GACD;IAAC,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC;AAElC,2DAA2D;AAC3D,MAAM,WAAW,eAAe;IAC/B,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAEzE,uEAAuE;AACvE,qBAAa,gBAAiB,SAAQ,KAAK;CAAG;AAO9C;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAgB1D;AAqCD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA+BtD;AAED,0EAA0E;AAC1E,MAAM,WAAW,wBAAwB;IACxC,sEAAsE;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;CACpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,GAAE,wBAA6B,GACpC,UAAU,CAuBZ"}
|
package/dist/triage-gate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triage-gate.js","sourceRoot":"","sources":["../src/triage-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAe,MAAM,cAAc,CAAC;AACvD,OAAO,EAAC,uBAAuB,EAAC,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"triage-gate.js","sourceRoot":"","sources":["../src/triage-gate.ts"],"names":[],"mappings":"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"}
|
package/dist/triage-persist.d.ts
CHANGED
|
@@ -4,6 +4,54 @@ import type { TriageAutoKind } from './triage-gate.js';
|
|
|
4
4
|
export declare class TriagePersistError extends Error {
|
|
5
5
|
constructor(message: string);
|
|
6
6
|
}
|
|
7
|
+
export interface StampTriagedMarkerOptions {
|
|
8
|
+
/** Working clone/worktree the stamp commits in. */
|
|
9
|
+
cwd: string;
|
|
10
|
+
/** The namespaced observation identity (`observation:<slug>`). */
|
|
11
|
+
item: string;
|
|
12
|
+
/** The observation file path RELATIVE to `cwd`. */
|
|
13
|
+
itemPath: string;
|
|
14
|
+
/** The `triaged:` value to stamp (the apply rung's settled disposition). */
|
|
15
|
+
value: string;
|
|
16
|
+
/** Why the stamp is being back-filled (rides the commit message). */
|
|
17
|
+
reason: string;
|
|
18
|
+
/** Advisory committer id for the commit subject. Defaults to git user.name. */
|
|
19
|
+
by?: string;
|
|
20
|
+
/** Environment for child git processes. */
|
|
21
|
+
env?: NodeJS.ProcessEnv;
|
|
22
|
+
/** Sink for human-readable progress notes. */
|
|
23
|
+
note?: (message: string) => void;
|
|
24
|
+
}
|
|
25
|
+
export interface StampTriagedMarkerResult {
|
|
26
|
+
/** The commit sha the stamp produced, or `undefined` when the body was already marked. */
|
|
27
|
+
commit?: string;
|
|
28
|
+
/** A human-readable summary. */
|
|
29
|
+
message: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Stamp the `triaged:` settled marker onto an observation that was ALREADY
|
|
33
|
+
* resolved-and-kept, in ONE local commit — the SELF-HEALING back-fill for notes
|
|
34
|
+
* resolved BEFORE the apply rung learned to stamp it (ADR
|
|
35
|
+
* `resolve-settles-the-question-loop-not-the-note`).
|
|
36
|
+
*
|
|
37
|
+
* Why a back-fill exists at all: the fix that makes `resolve` stamp the marker is
|
|
38
|
+
* forward-only, so every note a repo resolved under the old code still rests
|
|
39
|
+
* `needsAnswers:false` + no sidecar + NO marker — the exact shape the triage rung
|
|
40
|
+
* re-asks. Those notes are not hypothetical (a single `rocketh` cycle re-asked
|
|
41
|
+
* four, with eleven more queued behind them), and they are un-fixable from the
|
|
42
|
+
* human's side: answering again just resolves again into the same shape.
|
|
43
|
+
*
|
|
44
|
+
* The trigger is PROOF, not a heuristic: the caller fires this only when the body
|
|
45
|
+
* carries the ENGINE-WRITTEN `## Applied answers` record, which only
|
|
46
|
+
* `apply-persist.ts` writes and only after a human answered every open question.
|
|
47
|
+
* A hand-written note cannot accidentally acquire it, and the stamp is exactly
|
|
48
|
+
* what the apply rung WOULD have written had it known how.
|
|
49
|
+
*
|
|
50
|
+
* ONE commit touching ONE file, so the tree-less publish (`pushTreelessResult`)
|
|
51
|
+
* carries it to the arbiter like any other triage-rung marker write; once landed
|
|
52
|
+
* the note drops out of the triage pool and this path is never taken again.
|
|
53
|
+
*/
|
|
54
|
+
export declare function stampTriagedMarker(options: StampTriagedMarkerOptions): StampTriagedMarkerResult;
|
|
7
55
|
export interface AutoDispositionOptions {
|
|
8
56
|
/** Working clone/worktree the disposition commits in. */
|
|
9
57
|
cwd: string;
|
|
@@ -30,8 +78,10 @@ export interface AutoDispositionResult {
|
|
|
30
78
|
* DELETION (`git rm` in a standalone commit, the reason in the message). A
|
|
31
79
|
* `duplicate` is a redundant copy of `existing`; a `map` is already covered by
|
|
32
80
|
* `existing` — either way the note carries no unique signal, so it leaves the
|
|
33
|
-
* inbox by being gone.
|
|
34
|
-
* `agentic-apply-retire-disposition-vocabulary`)
|
|
81
|
+
* inbox by being gone. An AUTO disposition never RESTS a note (task
|
|
82
|
+
* `agentic-apply-retire-disposition-vocabulary`); resting a KEPT note is the
|
|
83
|
+
* human-answered `resolve` verdict's job on the apply rung (ADR
|
|
84
|
+
* `resolve-settles-the-question-loop-not-the-note`). NEVER an auto-delete of a
|
|
35
85
|
* NON-redundant signal.
|
|
36
86
|
*/
|
|
37
87
|
outcome: 'deleted';
|
|
@@ -47,9 +97,9 @@ export interface AutoDispositionResult {
|
|
|
47
97
|
* ONE local commit, no question surfaced. BOTH no-question cases DISCHARGE the
|
|
48
98
|
* redundant note BY DELETION (`git rm` in a STANDALONE commit, the mapped/
|
|
49
99
|
* duplicated-of identity + reason in the commit message; git history = archive).
|
|
50
|
-
*
|
|
51
|
-
* `agentic-apply-retire-disposition-vocabulary`
|
|
52
|
-
* acted-on, or deleted
|
|
100
|
+
* An AUTO disposition never RESTS a note (task
|
|
101
|
+
* `agentic-apply-retire-disposition-vocabulary`): its two cases carry no unique
|
|
102
|
+
* signal, so they are still-open, acted-on, or deleted — never kept:
|
|
53
103
|
*
|
|
54
104
|
* - `duplicate` → the note is an EXACT duplicate of `existing` (already
|
|
55
105
|
* captured); the original carries the signal, so the copy is deleted; or
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triage-persist.d.ts","sourceRoot":"","sources":["../src/triage-persist.ts"],"names":[],"mappings":"AAIA,OAAO,EAEN,KAAK,mBAAmB,EAExB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"triage-persist.d.ts","sourceRoot":"","sources":["../src/triage-persist.ts"],"names":[],"mappings":"AAIA,OAAO,EAEN,KAAK,mBAAmB,EAExB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AA2GrD,2EAA2E;AAC3E,qBAAa,kBAAmB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI3B;AAID,MAAM,WAAW,yBAAyB;IACzC,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,wBAAwB;IACxC,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,yBAAyB,GAChC,wBAAwB,CAyC1B;AAID,MAAM,WAAW,sBAAsB;IACtC,yDAAyD;IACzD,GAAG,EAAE,MAAM,CAAC;IACZ,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,IAAI,EAAE,cAAc,CAAC;IACrB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACrC;;;;;;;;;;OAUG;IACH,OAAO,EAAE,SAAS,CAAC;IACnB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,sBAAsB,GAC7B,qBAAqB,CA8BvB;AAID,MAAM,WAAW,yBAAyB;IACzC,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,8CAA8C;IAC9C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,wBAAwB;IACxC;;;;;;;;;OASG;IACH,OAAO,EACJ,UAAU,GACV,iBAAiB,GACjB,MAAM,GACN,WAAW,GACX,aAAa,CAAC;IACjB,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,kBAAkB,CACvC,OAAO,EAAE,yBAAyB,GAChC,OAAO,CAAC,wBAAwB,CAAC,CAwGnC"}
|
package/dist/triage-persist.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { readFileSync } from 'node:fs';
|
|
1
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { run } from './git.js';
|
|
4
4
|
import { workItemRel } from './work-layout.js';
|
|
@@ -19,8 +19,12 @@ import { setFrontmatterMarker } from './frontmatter.js';
|
|
|
19
19
|
* 1. **the conservative auto-disposition** ({@link autoDispositionObservation},
|
|
20
20
|
* US #17, `observationTriage: 'auto'`-gated): act on the no-question case on
|
|
21
21
|
* the UNTRIAGED observation in ONE local commit. BOTH no-question cases now
|
|
22
|
-
* DISCHARGE the redundant note BY DELETION
|
|
23
|
-
*
|
|
22
|
+
* DISCHARGE the redundant note BY DELETION — an AUTO disposition never RESTS a
|
|
23
|
+
* note, because both of its cases (duplicate / map) are by definition notes
|
|
24
|
+
* that carry no unique signal (task `agentic-apply-retire-disposition-
|
|
25
|
+
* vocabulary`; the ONE case that does rest a note is the human-answered
|
|
26
|
+
* `resolve` verdict on the APPLY rung, see ADR `resolve-settles-the-question-
|
|
27
|
+
* loop-not-the-note`):
|
|
24
28
|
* - `duplicate` → `git rm` the duplicate in a standalone commit, the
|
|
25
29
|
* duplicated-of identity + reason in the commit message (git history =
|
|
26
30
|
* archive). A duplicate is a redundant copy of an already-captured signal,
|
|
@@ -28,7 +32,6 @@ import { setFrontmatterMarker } from './frontmatter.js';
|
|
|
28
32
|
* - `map` → the note is already covered by the existing item it maps onto, so
|
|
29
33
|
* it is settled — `git rm` it in a standalone commit, the mapped-onto
|
|
30
34
|
* identity + reason recorded in the commit message (mirroring `duplicate`).
|
|
31
|
-
* There is no resting `triaged:keep` note any more.
|
|
32
35
|
* 2. **promote → SELF-CONTAINED new-item creation + DELETE through the CAS**
|
|
33
36
|
* ({@link promoteObservation}, US #1/#3/#8): an ANSWERED "promote" drafts a
|
|
34
37
|
* new `work/tasks/ready/<new-slug>.md` whose body is built FROM the
|
|
@@ -93,14 +96,72 @@ export class TriagePersistError extends Error {
|
|
|
93
96
|
this.name = 'TriagePersistError';
|
|
94
97
|
}
|
|
95
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Stamp the `triaged:` settled marker onto an observation that was ALREADY
|
|
101
|
+
* resolved-and-kept, in ONE local commit — the SELF-HEALING back-fill for notes
|
|
102
|
+
* resolved BEFORE the apply rung learned to stamp it (ADR
|
|
103
|
+
* `resolve-settles-the-question-loop-not-the-note`).
|
|
104
|
+
*
|
|
105
|
+
* Why a back-fill exists at all: the fix that makes `resolve` stamp the marker is
|
|
106
|
+
* forward-only, so every note a repo resolved under the old code still rests
|
|
107
|
+
* `needsAnswers:false` + no sidecar + NO marker — the exact shape the triage rung
|
|
108
|
+
* re-asks. Those notes are not hypothetical (a single `rocketh` cycle re-asked
|
|
109
|
+
* four, with eleven more queued behind them), and they are un-fixable from the
|
|
110
|
+
* human's side: answering again just resolves again into the same shape.
|
|
111
|
+
*
|
|
112
|
+
* The trigger is PROOF, not a heuristic: the caller fires this only when the body
|
|
113
|
+
* carries the ENGINE-WRITTEN `## Applied answers` record, which only
|
|
114
|
+
* `apply-persist.ts` writes and only after a human answered every open question.
|
|
115
|
+
* A hand-written note cannot accidentally acquire it, and the stamp is exactly
|
|
116
|
+
* what the apply rung WOULD have written had it known how.
|
|
117
|
+
*
|
|
118
|
+
* ONE commit touching ONE file, so the tree-less publish (`pushTreelessResult`)
|
|
119
|
+
* carries it to the arbiter like any other triage-rung marker write; once landed
|
|
120
|
+
* the note drops out of the triage pool and this path is never taken again.
|
|
121
|
+
*/
|
|
122
|
+
export function stampTriagedMarker(options) {
|
|
123
|
+
const { cwd, item, itemPath, value, reason, env } = options;
|
|
124
|
+
const note = options.note ?? (() => { });
|
|
125
|
+
if (gitSoft(['rev-parse', '--git-dir'], cwd, env).status !== 0) {
|
|
126
|
+
throw new TriagePersistError('not inside a git repository');
|
|
127
|
+
}
|
|
128
|
+
const abs = join(cwd, itemPath);
|
|
129
|
+
const before = readFileSync(abs, 'utf8');
|
|
130
|
+
const after = setFrontmatterMarker(before, 'triaged', value);
|
|
131
|
+
if (after === before) {
|
|
132
|
+
// Already marked (or a malformed fence `setFrontmatterMarker` refuses to
|
|
133
|
+
// rewrite) — nothing to commit; never produce an empty commit.
|
|
134
|
+
const message = `triage ${item}: already carries triaged:${value} — no stamp needed.`;
|
|
135
|
+
note(message);
|
|
136
|
+
return { message };
|
|
137
|
+
}
|
|
138
|
+
writeFileSync(abs, after);
|
|
139
|
+
const by = options.by || resolveBy(cwd, env);
|
|
140
|
+
gitHard(['add', '--', itemPath], cwd, env);
|
|
141
|
+
const subject = `advance: triage ${item} → settled (by ${by})`;
|
|
142
|
+
gitHard([
|
|
143
|
+
'commit',
|
|
144
|
+
'--quiet',
|
|
145
|
+
'-m',
|
|
146
|
+
subject,
|
|
147
|
+
'-m',
|
|
148
|
+
`triaged: ${value}\n\n${reason}`,
|
|
149
|
+
], cwd, env);
|
|
150
|
+
const commit = gitHard(['rev-parse', 'HEAD'], cwd, env).stdout.trim();
|
|
151
|
+
const message = `triage ${item}: back-stamped triaged:${value} (the note was already ` +
|
|
152
|
+
'resolved-and-kept — it carries an engine-written applied-answers record) ' +
|
|
153
|
+
'so the triage rung stops re-asking its settled question.';
|
|
154
|
+
note(message);
|
|
155
|
+
return { commit, message };
|
|
156
|
+
}
|
|
96
157
|
/**
|
|
97
158
|
* Execute a CONSERVATIVE auto-disposition on an UNTRIAGED observation (US #17),
|
|
98
159
|
* ONE local commit, no question surfaced. BOTH no-question cases DISCHARGE the
|
|
99
160
|
* redundant note BY DELETION (`git rm` in a STANDALONE commit, the mapped/
|
|
100
161
|
* duplicated-of identity + reason in the commit message; git history = archive).
|
|
101
|
-
*
|
|
102
|
-
* `agentic-apply-retire-disposition-vocabulary`
|
|
103
|
-
* acted-on, or deleted
|
|
162
|
+
* An AUTO disposition never RESTS a note (task
|
|
163
|
+
* `agentic-apply-retire-disposition-vocabulary`): its two cases carry no unique
|
|
164
|
+
* signal, so they are still-open, acted-on, or deleted — never kept:
|
|
104
165
|
*
|
|
105
166
|
* - `duplicate` → the note is an EXACT duplicate of `existing` (already
|
|
106
167
|
* captured); the original carries the signal, so the copy is deleted; or
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triage-persist.js","sourceRoot":"","sources":["../src/triage-persist.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"triage-persist.js","sourceRoot":"","sources":["../src/triage-persist.ts"],"names":[],"mappings":"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"}
|