diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fb59a044..75936b0a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -89,6 +89,8 @@ jobs: - name: Install devDependencies run: pnpm install --frozen-lockfile + - name: Tracked JavaScript comment and test-title guard + run: pnpm run test:quality - name: Typecheck (tsc --checkJs) run: pnpm run typecheck - name: Lint (eslint) diff --git a/docs/archive/2026-09-29-aqe-released-artifact-receipt.md b/docs/archive/2026-09-29-aqe-released-artifact-receipt.md new file mode 100644 index 00000000..e96ee014 --- /dev/null +++ b/docs/archive/2026-09-29-aqe-released-artifact-receipt.md @@ -0,0 +1,46 @@ +# AQE 3.14.5 released-artifact receipt (2026-09-29) + +Capture: 2026-09-29. Documentation basis: `b5a0a946ae0aca2e1d435c78b12a98bc587d1266`. Probe observations: 2026-09-29T14:27:38Z; compilation of retained evidence, without new runtime probes. The upstream issues [#655](https://github.com/proffesor-for-testing/agentic-qe/issues/655), [#753](https://github.com/proffesor-for-testing/agentic-qe/issues/753), and [#778](https://github.com/proffesor-for-testing/agentic-qe/issues/778) are closed, but closure does not establish installed behavior. This receipt reports only the selected tests below. It is not an issue-closing request. + +## Exact artifact and environment + +The controller registry capture at 2026-09-29 14:16:56 UTC listed `agentic-qe@3.14.5` as latest. The registry tarball had SHA-512 integrity `sha512-mDvWB1fUaGevg6F3QNWK7ESXHeZnlvc0MiQ4Ue9do4SJwggM6aP5dl3DZNWKmO2g5GGFjYJuikl53KeuT3uazg==` and SHA-256 `32cd29f00201cbcba19313b62bac20ffaa5c7d032b5246e5d08d94d6d24b9221`. Its installed selected source files matched tarball bytes: + +| Package-relative path | SHA-256 | +| --- | --- | +| `package.json` | `6a854da5e68636739a400b6237ad77b2250480471d5a4e643cc6474f297ee3a0` | +| `dist/cli/bundle.js` | `a8b61993b4286336f79f9d7db9195b26d86626924adbd522a158fad222b08a84` | +| `dist/init/codex-installer.js` | `79dda90da0faa7202ea61fc0c449d9ef4062d96f6062324bb98ecd6e9980d78a` | +| `dist/audit/witness-chain.js` | `a712fa97849efdfe160c3c2e440901d25e48450e2d6bdaa69af4225c824f3458` | + +The tarball was installed in a disposable private prefix with lifecycle scripts ignored; only `better-sqlite3` was rebuilt there. Both commands exited 0. Acquisition and native dependency preparation ran unsandboxed with a private constructed environment; the sandbox claim applies only to the later probes. The before/after global check covered package metadata, not a complete global installation fingerprint. Public `aqe` bin reported 3.14.5. Runtime: Node 26.4.0, `better-sqlite3` 12.11.1, SQLite 3.53.2, macOS arm64. Probe invocations ran with a credential-free, private environment, denied network, and sandboxed writes. The probe script relied on an earlier setup step that created the empty project and environment; the retained setup commands and logs support that initial state, but the probe script is not a self-contained fresh-root reproducer. Optional Vibium bootstrap attempted network access and failed as expected under the sandbox during the three init runs. No global install was made: global AQE metadata was 3.14.4 both before and after. The release's npm publication timestamp was 2026-09-29 10:08:33 UTC; [PR #783's merge commit](https://github.com/proffesor-for-testing/agentic-qe/commit/63d3debab54105dbc93030eb0b0088e2f9bebd9c) is dated 13:05:19 UTC, after that publication. The release metadata supplied no `gitHead`, so this ordering and the artifact probe bound the conclusion rather than an assumed source tag. + +## Selected results + +| Issue | Verdict on released 3.14.5 | Observed contract and limit | +| --- | --- | --- | +| [#655](https://github.com/proffesor-for-testing/agentic-qe/issues/655) | Verified selected compact path | `aqe init --auto --with-codex --codex-guidance compact` exited 0. The AQE-owned sentinel region was 315 UTF-8 bytes, below the released 512-byte constant. A separate foreign prefix/suffix fixture survived two identical calls with complete `AGENTS.md` bytes and mtime stable between calls 1 and 2. The fixture creation mtime was not captured. Full/none modes, CRLF and malformed/duplicate sentinels, all-platform verification, and receipt correctness remain unverified. Prior 3.14.4 broader conformance failed; this narrow result does not sunset the registry constraint. | +| [#753](https://github.com/proffesor-for-testing/agentic-qe/issues/753) | Verified fresh-chain append case | Released `createWitnessChain` places tail read and insert inside an immediate SQLite transaction. One native WAL sequential control and three synchronized two-process rounds each ended at 4001 rows (seed plus 2000 per process), `valid: true`, `signatureFailures: 0`, and SQLite integrity check `ok`. Only concurrent round 1 demonstrably interleaved the writers. Entries were synthesized unsigned `PATTERN_CREATE` records; signature validation, old-fork repair, import splices, live host concurrency, and Windows/Linux remain unverified. The kit's live-holder refusal still protects stray-store merge and must not be removed from this proof. | +| [#778](https://github.com/proffesor-for-testing/agentic-qe/issues/778) | Refuted fixed-in-3.14.5 claim | Three same-option public init calls on one unchanged minimal project each exited 0, yet `.claude/settings.json` hashes and mtimes changed on every call. Run 2 added a backup and changed domain/learning defaults; run 3 still changed `aqe.initialized`. `AGENTS.md` and `CLAUDE.md` bytes/mtimes were stable after run 1. The merged source fix is newer than the tested release. Subsequent-release conformance is unverified; keep installed/released convergence outstanding under own [#239](https://github.com/pacphi/agentic-kit/issues/239). | + +The source-bound report's private retained logs, snapshots, lockfile, scripts and synthesized databases have SHA-256 receipts. The digest of its artifact binding record is `200d11393cab0617bdd92b7218e5dcc5ab146e26e55ba7f58efee20d17471b1b`; selected result records are `init-results.json` `c03ee35435c5946bb18afa2bab96bbf5a29d2c3761bb102e80083d8e492789e4`, `foreign-results.json` `933883e6b9720ad01fb9b560919077247d65ab601750bf3fa4213a0c4ee3fb7b`, and `witness-results.json` `95b38b5c30380a53c1f7284fcaafb257a6b8c513381c9c824ad3a0748451c3f4`. This receipt intentionally omits private acquisition locations and raw project data. Time bounds were 30/60 s registry requests, 240 s dependency install, 180 s native rebuild, 150 s per init, 45 s per native child, and 20 s readiness; none expired in successful observed runs. The retained witness harness has a failure-path cleanup gap: if the first child fails, it can raise before killing and reaping its sibling. Do not reuse it without fixing that gap. + +There is no evidence here for broad Windows AQE support, repaired old forks, signed-entry verification, all guidance modes, or installed 3.14.4 conformance with the selected 3.14.5 behaviors. No upstream post, local store merge, or issue closure is authorized by this receipt. + +## Native holder and host-support boundary + +The [dated host-support addendum](../host-support.md) records released AQE 3.14.4 and +3.14.5 live-owner lock checks on macOS and Linux: status and the shipped adapter +reported `LockHeld`, without `FsyncFailed`; holder and storage bytes remained intact. +V4 [PR #275](https://github.com/pacphi/agentic-kit/pull/275), squash +`bb2e7efe88abd3cb2d73baf26530386549e3dc2e`, removed the exact temporary +`FsyncFailed`-as-busy exception. Ordinary `LockHeld` remains busy. Older 3.14.3 +error sequences now fail closed; no universal managed AQE minimum was introduced. + +Native Windows AQE was untested. Ruflo 3.48.0 native Windows CLI-to-MCP and +MCP-to-CLI visibility used one database with reported sql.js + HNSW and its native +bridge disabled. That separate proof establishes neither Windows AQE behavior nor +one native backend guarantee across platforms. The earlier Linux Ruflo result was +asymmetric. Own [#240](https://github.com/pacphi/agentic-kit/issues/240) remains open +on its literal managed-floor and combined live-MCP/`ak x verify aqe` criteria; +the native holder probe does not prove that combined final-artifact path. diff --git a/.superpowers/sdd/2026-09-28-dashboard-refresh/paused-time-report.md b/docs/archive/2026-09-29-dashboard-paused-time-evidence.md similarity index 100% rename from .superpowers/sdd/2026-09-28-dashboard-refresh/paused-time-report.md rename to docs/archive/2026-09-29-dashboard-paused-time-evidence.md diff --git a/docs/archive/2026-09-29-plan-remediation-v2-closeout.md b/docs/archive/2026-09-29-plan-remediation-v2-closeout.md new file mode 100644 index 00000000..6566d520 --- /dev/null +++ b/docs/archive/2026-09-29-plan-remediation-v2-closeout.md @@ -0,0 +1,41 @@ +# Remediation v2 closeout execution + +## Status and authority + +Active under the confirmed [develop execution plan](../plans/2026-09-28-remediation-v2-develop-execution.md). +Base: `develop@88ce597f`, incorporating reviewed V1–V6 and the main watcher reconciliation. +All 13 develop CI checks passed. Source scope remains the 189 Appendix A and 57 Appendix B +entries in [the program](../plans/2026-09-28-remediation-program-v2.md). New release, installation, +real-store merge, deletion, personal-memory writes and future #239 work remain outside this +implementation authority. The final develop → main PR stays open for human review. + +## Units and ownership + +1. **Comment-label guard:** a sole writer in this closeout worktree implements a parser-based + guard and removes transient planning labels from comments/test titles without changing + behavior. Scope: tracked JavaScript in src, scripts, bin and tests; no allowlist. Preserve + durable audit IDs and literal strings/regex/templates. Use RED/GREEN boundary fixtures. +2. **Scope and evidence documentation:** a separate task worktree prepares dated public + receipts for every original scope ID, source-bound Windows and AQE evidence, and all + recorded rulings. It preserves failed observations, limits and explicit deferrals. It + submits exact shared-index/program-status handoffs and private issue drafts to the controller. + No source/test edits or publication. This unit can run alongside the guard because their + paths are disjoint; final citation checks follow their integration. +3. **Controller integration:** review each unit, combine their accepted commits, apply shared + index/status handoffs, relocate the V3 paused-time report without losing its historical body, + and reconcile current issue conditions. Keep the parent program/execution plans active while + human approval and operational gates remain. Preserve all worktrees and branches. +4. **Final gates and delivery:** full guarded unit/legacy and browser suites, types, lint, + complexity, Markdown, build, offline links and independent branch review. Open the closeout + PR into develop, squash only after required CI/review, verify tree equality and develop CI, + then open the final main PR for the human. Recheck main before that final PR. + +## Evidence and limits + +The fixed Windows ten-before/ten-after cohort is historical, with all outcomes retained. +A separate three-consecutive-PR Windows timing rule remains pending: the current latest three +include a 358-second leg. Refresh that gate after closeout PR CI; do not manufacture green runs. +AQE #655/#753 proofs are narrow released-artifact observations; #778 settings churn still occurred +in the release tested before its source fix. No issue closure or installed-state inference follows +from upstream closed status alone. Exact current evidence and unresolved gates belong in the final +receipt and PR. No real routine trigger or paid provider run is required for this closeout. diff --git a/docs/archive/2026-09-29-remediation-v2-integration-evidence.md b/docs/archive/2026-09-29-remediation-v2-integration-evidence.md new file mode 100644 index 00000000..f25e909f --- /dev/null +++ b/docs/archive/2026-09-29-remediation-v2-integration-evidence.md @@ -0,0 +1,86 @@ +# Remediation v2 integration evidence + +Capture: 2026-09-29. Documentation basis: `b5a0a946ae0aca2e1d435c78b12a98bc587d1266`. +These are sanitized controller receipts, checked against local commit objects; they +record integration and the cited CI observations, not fresh runtime probes. +The [scope matrix](2026-09-29-remediation-v2-scope-matrix.md) retains original +dispositions and row-specific limits. + +## Inherited documentation integration + +The controller baseline receipt establishes these commits as ancestors of +`94890a00ec6f5869c186d1066076c5a2e17dfee4`. Titles and ancestry establish +provenance; they do not allocate every moved file to one PR or test current behavior. + +| PR | Integration commit | Scope | +| --- | --- | --- | +| [#264](https://github.com/pacphi/agentic-kit/pull/264) | `e7cfe9ca4d49cb5e94fba698cd0e8376e0c829b7` | docs: one purpose per docs folder, lower-case names, archive point-in-time material | +| [#266](https://github.com/pacphi/agentic-kit/pull/266) | `7936ca48942e4ed1b629641eb61dc0dfbcf12951` | docs(archive): repair and validate historical links | +| [#269](https://github.com/pacphi/agentic-kit/pull/269) | `159c1c98d86d5fbb22b5752413f5889d8b8d172b` | docs: archive completed taxonomy and Sonnet routing plans | + +## Reviewed feature integrations + +| Work | PR | Reviewed source | Squash commit | Reviewed and squash tree | +| --- | --- | --- | --- | --- | +| V3 dashboard | [#276](https://github.com/pacphi/agentic-kit/pull/276) | `cd5cd08b52a190e2a91540b404b648f6b43a365c` | `eb963f503f806f80df7a8173d7c71314adbd7cfa` | `b5544923cee35a3e0217de1e22d9f6b7f7ddaf4c` | +| V5 intelligence | [#274](https://github.com/pacphi/agentic-kit/pull/274) | `36d78caf2fca6a61b7fd924499da9541ae85060c` | `af825c9f165575b3ef6e1ce0a5836fcf40a1ca3b` | `7966ba916018af69fc4f4908e2d7202da5c507d6` | +| V4 follow-ups | [#275](https://github.com/pacphi/agentic-kit/pull/275) | `f19566adf2d0f0d7027bc4ea45f9f990e2b0355e` | `bb2e7efe88abd3cb2d73baf26530386549e3dc2e` | `0674d0762339037dcf24c30b9adbf58056b01db5` | +| V6 usage | [#282](https://github.com/pacphi/agentic-kit/pull/282) | `fa0cb7b788791a90577a2dfd9f9ca61e07d0591e` | `069553586fb3ad1d824877259562eef0765a42a1` | `78de12a7c593fc79c889cf853ff6eedf39cb583e` | +| Main watcher reconciliation | [#283](https://github.com/pacphi/agentic-kit/pull/283) | `09b198b6960c2dae14819d08729caa8b3794129b` | `9dc018b903ac074af0d4dbfcea0891c4e2a34e94` | `9db3da69020c147a798032b2cbde74e4eb88fdda` | + +V4 prerequisite [#273](https://github.com/pacphi/agentic-kit/pull/273), native trace +[#277](https://github.com/pacphi/agentic-kit/pull/277), and watcher follow-up +[#278](https://github.com/pacphi/agentic-kit/pull/278) remain separately reviewed +parts of the delivery. Public implementation detail is retained in the archived +[dashboard](2026-09-28-plan-dashboard-refresh.md), +[follow-ups](2026-09-28-plan-follow-ups-v2.md), +[usage](2026-09-28-plan-usage-accuracy.md), and +[native trace](2026-09-29-native-learning-trace.md) records. + +## Latest source-bound CI and ancestry receipts + +| Source | Run | Recorded result | +| --- | --- | --- | +| V6 reviewed `fa0cb7b788791a90577a2dfd9f9ca61e07d0591e` | [36614260309](https://github.com/pacphi/agentic-kit/actions/runs/36614260309) | 15 applicable checks passed; published-release consumer skipped | +| V6 develop squash `069553586fb3ad1d824877259562eef0765a42a1` | [36614973862](https://github.com/pacphi/agentic-kit/actions/runs/36614973862) | 13 checks passed | +| Main watcher reviewed `09b198b6960c2dae14819d08729caa8b3794129b` | [36616775739](https://github.com/pacphi/agentic-kit/actions/runs/36616775739) | 14 applicable checks passed; real watch skipped | +| Develop `88ce597f444d487a34d9871a447cf8942f76f760` | [36617683730](https://github.com/pacphi/agentic-kit/actions/runs/36617683730) | 13 checks passed | + +The last develop commit records parents `9dc018b903ac074af0d4dbfcea0891c4e2a34e94` +and `cb54f42e11fb6ff152ec278eb2dc1e119ee05ac5`. Its tree remains +`9db3da69020c147a798032b2cbde74e4eb88fdda`, equal to the reviewed watcher tree +and squash. The main input is an ancestor of the reviewed feature. This records +already-reviewed content while retaining ancestry; it is not final main approval. + +## Bounded dashboard observations + +The V3 controller receipt supporting [#256](https://github.com/pacphi/agentic-kit/issues/256) +records actual native-transcript replay on bounded re-entry, a failing-before and +passing-after fixture, and stable accepted/session/project counts for that scenario. +Offsets live in bounded memory: eviction or a new process can replay, so this is +not durable exactly-once delivery. A separate real Codex CLI 0.159.0 idle-fork +process/transcript join in a plain folder used the real survey. It establishes +plain-folder binding for that case, without a model turn, billing or browser claim. +Structured live input remains experimental with no verified producer. These three +answers make #256 a candidate final-main closure, subject to controller reconciliation. +No Network event-stream trace or diagnosed fix is recorded for +[#254](https://github.com/pacphi/agentic-kit/issues/254); the final trace check remains. + +## Remaining release and compatibility boundaries + +Node.js [#65934](https://github.com/nodejs/node/issues/65934) remains an upstream +Node 22 runner-protocol/backport boundary. The V6 test-local change replaced a +`beforeEach` console emission with `t.diagnostic`, preserving Unicode and assertions. +An official SHA-verified Node 22.23.2 binary and a coalesced actual-child V8 replay +matched the CI error; native historical chunk boundaries were not proved. Five +focused checks and five fixed replays passed in the retained receipt. This does +not establish an upstream runtime fix or permit dropping Windows assertions. + +The [Windows timing gate](2026-09-29-windows-ci-evidence.md) fails its recorded +three-run snapshot. AQE release and installed-state limitations are in the +[artifact receipt](2026-09-29-aqe-released-artifact-receipt.md). No real routine +trigger, paid provider run, global upgrade or real-store operation was performed +for these receipts. The memory loop remains OFF until main approval. Final +closeout CI, aggregate main PR review, releases, installations and approved +operational work remain separate gates. Attended time was not instrumented; +commit and run timestamps establish observed elapsed intervals only. diff --git a/docs/archive/2026-09-29-remediation-v2-rulings.md b/docs/archive/2026-09-29-remediation-v2-rulings.md new file mode 100644 index 00000000..c01cbbf3 --- /dev/null +++ b/docs/archive/2026-09-29-remediation-v2-rulings.md @@ -0,0 +1,152 @@ +# Remediation v2 ordered execution rulings + +Capture: 2026-09-29. Documentation basis: +`b5a0a946ae0aca2e1d435c78b12a98bc587d1266`. +This record transcribes the controller's current execution log into readable +language, retaining source order, decisions, reasons and stated costs. It includes +17 `Ruling:` entries and the separately worded ADR coordination ruling, for 18 +entries total. The earlier 13-entry rollup was incomplete. These execution rulings +operate within the [confirmed execution plan](../plans/2026-09-28-remediation-v2-develop-execution.md). +They do not create further release, data-operation or provider authority. + +## Maintainer-approved decisions + +The confirmed execution plan authorizes feature PRs into develop and conditional +squash integration after required CI and independent review. Final main approval +remains human-owned. D-3 through D-19 retain the plan's qualified dispositions; +D-5 moves execution identity, terminal outcomes, cancellation semantics and the +upgraded-install matrix to later v5 work. D-18 depends on unchanged totals and +D-19 labels structured live input experimental. D-9 preserves both v5 branches +and reserved ADR numbers. Personal Codex memory writes need a direct request. + +The maintainer also approved bounded unknown raw-origin metadata for local detail +under ADR-0060, and exact sanitized AQE init and Ruflo upstream messages recorded +by the controller. Those specific approvals do not authorize new posts. No future +Issue #239 W1–W8 or D-20+ work is approved by this record. The controller rulings below +are implementation and coordination choices within those boundaries. + +## Controller rulings in source order + +1. **Split the V4 B1 prerequisite PR.** V4 B1 overlapped V6 OpenCode and footprint + readers, so integrate it into develop before the remaining branches consume it. + Freeze the original V4 branch until merge, then continue from updated develop. + Remaining V4 scope is retained. Stated cost: one extra coordination PR. + +2. **Stage the A3 ADR amendment for the controller.** Implement and test the retry + stamp first. Apply its exact ADR-0063 amendment after V3 dashboard ADR work and + include the aligned ADR in the same V4 feature PR. Correct the old statement: + `record: false` still performs lookup without writing; `cacheOnly` skips both. + Reason: serialized ADR ownership and accurate behavior. Cost was not stated. + +3. **Run V6 Unit 20 before the remaining V4 merge.** Its quota/status-line classifier + paths do not overlap V4; B1 is integrated and C6 flags are verified. Raw-origin + policy still blocks dependent parser work. Stated cost if wrong: later quota + overlap needs serialized reconciliation; schema, UI and provider boundaries stay. + +4. **Integrate V6 Unit 2's agreed interface while raw-origin policy is pending.** + Both policy choices use the same factory return shape. Pass the factory result + through without inserting a policy filter or assuming approval; use synthetic + disposable caches. Final policy, ADR and delivery remain gated. Stated cost: + reshaping or schema staging may need revision before merge; no real cache or + privacy policy is deployed by this intermediate decision. + +5. **Add `declared-session-ids` without a schema bump.** Preserve the honest label + on legacy `transcript-files` snapshots. V3 exclusively owns the maintenance API, + so stage the API enum/test change for V6 consumer integration. Reason: avoid + concurrent contract edits. Stated cost: a pending public API handoff. + +6. **Pass explicit false for unchecked project trees.** Machine refresh must honor + the current selection across tabs. Correct the old plan's undefined/sticky + setting. Stated cost: a prior true selection is no longer inherited, intentionally. + +7. **Retire the precise C1 busy exception on the approved native criterion.** + The macOS/Linux AQE 3.14.4 live-owner criterion was independently satisfied. + Remove only `FsyncFailed`-as-busy; ordinary `LockHeld` remains. Do not invent a + global AQE floor from the older comment: only store merge has that feature floor. + Stated compatibility cost: the older 3.14.3 error sequence fails closed. At this + decision Windows Ruflo routing remained a separate failed gate; the later + qualified Windows proof is in the [AQE/native receipt](2026-09-29-aqe-released-artifact-receipt.md). + +8. **Exclude incomplete or corrupt mixed-file ownership as a whole.** Surface the + coverage as incomplete, following the fix brief and ADR, to avoid false imported + spend. Clean observed mixed files retain proved response/origin attribution. + Stated cost: undercounting a proved prefix in damaged files; prefix salvage is + not claimed. Investigate actual zero-response/token shapes separately. + +9. **Add `sessionSurfaces` while preserving legacy semantics.** Retain + `sessionOrigins`, `countBasis` and uncertain legacy precise mode. Assign narrow + ownership for management query/focus navigation, intelligence history and + footprint/projects DTOs. Reason: avoid a schema bump and false legacy origin + inference. Stated cost: additive compatibility complexity, reviewed at integration. + +10. **Exclude ignored scratch evidence from local whole-repository ESLint.** + Preserve immutable measurement scripts when default lint discovery includes + generated ignored probes. All tracked targets and clean-checkout CI lint remain. + Stated cost: local scratch is not linted and is not shipped. This cannot hide + tracked defects. + +11. **Run independent V6 Unit 15 before Unit 12 completes.** Give its isolated branch + exclusive usage-cost/OpenCode paths; Unit 12 excludes them. Integrate only after + both reviews and a clean handoff, through the final V6 feature PR. Stated cost + if wrong: delayed narrow integration handoff; concurrent writers remain forbidden. + +12. **Accept one charge owner in a fixed Claude identity pool.** The pool spans twice + the display days, capped at 730; eligibility requires both modification time and + end time. Outside-pool duplicates cannot steal or augment a charge. Uncovered + current data is excluded with coverage counts. Comparison-toggle invariance and + unique-charge conservation were checked. The earlier per-cohort Claude policy + was explicitly rejected and superseded. Stated cost: up to one preceding + display-width of extra cold reads or cached-claim validation. This is neither + a measured runtime benchmark nor a whole-corpus uniqueness guarantee. + +13. **Keep the conventional OpenCode path for storage census.** Actual usage and + project readers use `selectOpencodeSource`; the conventional default still + supplies the directory used by footprint/storage inventory. Returning null on + history ambiguity would break unrelated census callers. Stated cost: that + conventional location is not selected-history authority. Verify actual history + readers use the selector; no storage inventory redesign follows. + +14. **Build Unit 17's pure storage detector independently.** Reserve only its two + new paths in a separate worktree, using a caller-owned database or explicit + legacy root. It cannot select sources or change the index. Full acceptance waits + for Unit 16 and consumers. Reason: independent work without shared writers. + Stated cost: an explicit interface handoff. + +15. **Start main watcher reconciliation alongside V6 Windows fixes.** The paths are + disjoint; integrate updated develop only after V6 merges and develop is green. + Preserve both input sets, documented HTTP retry scope, token redaction, deferred + preview and blind-backlog handling. Reason: avoid serial idle time. Stated cost + if wrong: later integration rework, never concurrent writer paths. + +16. **Limit trigger retries to documented HTTP 500/503.** Do not retry body transport + errors or after an observed session URL. The routine API offers no idempotency + guarantee, and bounded retry is not proof of no side effects. Stated cost if + wrong: other transient 5xx responses wait for a later check. No real trigger + was performed. The [watcher integration receipt](2026-09-29-remediation-v2-integration-evidence.md) + binds the implemented source and CI. + +17. **Record already-reviewed main ancestry after feature squash.** Permit a + content-identical merge only when the reviewed feature contains the exact main + input and the squash tree equals the reviewed tree. Reason: preserve ancestry + without repeating the final main conflict. Stated cost if wrong: hiding an + unincorporated main change. The controller checked ancestor, tree, parents and + current-main preconditions; latest develop CI remained the dependency gate. + +18. **Include shared test-helper comments in the whole-tree guard sweep.** The + approved no-allowlist sweep permits comment-only label rewrites in helpers, + resolving the narrower worker brief. No competing writer owns those paths. + Runtime statements, exports and behavior must remain unchanged. Stated cost + if wrong: an accidental helper behavior change; source-token comparison and + focused checks must retain the code contract. + +## Limits carried into closeout + +The [integration receipt](2026-09-29-remediation-v2-integration-evidence.md) records +Node 22's upstream runner limitation and the test-local diagnostic mitigation. +Source fixes, released-artifact observations and installed behavior remain distinct. +The [Windows receipt](2026-09-29-windows-ci-evidence.md) retains a failing timing +gate snapshot; the [AQE receipt](2026-09-29-aqe-released-artifact-receipt.md) retains +untested platforms, unsigned fresh-chain limits and setup churn in 3.14.5. +No paid runs were performed. The memory loop remains OFF until main approval. +Attended time was not instrumented. Program and execution plans stay active while +final main review and operational gates remain. diff --git a/docs/archive/2026-09-29-remediation-v2-scope-matrix.md b/docs/archive/2026-09-29-remediation-v2-scope-matrix.md new file mode 100644 index 00000000..e88980e7 --- /dev/null +++ b/docs/archive/2026-09-29-remediation-v2-scope-matrix.md @@ -0,0 +1,269 @@ +# Remediation v2 scope reconciliation + +Capture: 2026-09-29. Documentation basis: `b5a0a946ae0aca2e1d435c78b12a98bc587d1266`. +Implementation evidence ends at develop `88ce597f444d487a34d9871a447cf8942f76f760`. +This records 189 Appendix A and 57 Appendix B identifiers exactly once, in source order. +Original disposition is retained separately from the current evidence disposition. + +The [approved program](../plans/2026-09-28-remediation-program-v2.md) and +[execution plan](../plans/2026-09-28-remediation-v2-develop-execution.md) govern authority. +Grouped Appendix B findings keep their original group evidence; the expanded identifiers +do not imply separate runtime probes. Historical DONE and declined/superseded entries +are provenance, not a new test of current behavior. Original ruling line references +refer to the source reviews identified by the program. + +See the [integration evidence](2026-09-29-remediation-v2-integration-evidence.md), +[Windows evidence](2026-09-29-windows-ci-evidence.md), +[AQE evidence](2026-09-29-aqe-released-artifact-receipt.md), and +[ordered rulings](2026-09-29-remediation-v2-rulings.md). +V7 guard work, final integration gates, the final main PR and human approval remain. +No release, installation, real-store mutation, deletion or paid provider run is proved. + +| ID | Appendix | Original disposition | Current disposition | Source evidence / PR / commit | Remaining condition and evidence limit | +| --- | --- | --- | --- | --- | --- | +| B0-1 | A | DONE | inherited done | #241 (`476717b63333802c7a5bc55267556303fd1ea025`); historical commit 476717b63333802c7a5bc55267556303fd1ea025 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B0-2 | A | DONE | inherited done | #241 (`476717b63333802c7a5bc55267556303fd1ea025`); historical commit 476717b63333802c7a5bc55267556303fd1ea025 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B0-3 | A | DONE | inherited done | #241 (`476717b63333802c7a5bc55267556303fd1ea025`); historical commit 476717b63333802c7a5bc55267556303fd1ea025 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B0-6 | A | DONE | inherited done | #241 (`476717b63333802c7a5bc55267556303fd1ea025`); historical commit 476717b63333802c7a5bc55267556303fd1ea025 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B0-11 | A | DONE | inherited done | #241 (`476717b63333802c7a5bc55267556303fd1ea025`); historical commit 476717b63333802c7a5bc55267556303fd1ea025 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B0-12 | A | DONE | inherited done | #241 (`476717b63333802c7a5bc55267556303fd1ea025`); historical commit 476717b63333802c7a5bc55267556303fd1ea025 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B0-5 | A | DONE | inherited done | `links (external)` in `.github/workflows/nightly.yml`; `links (internal)` in `ci.yml` | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B0-7 | A | DONE | inherited done | #252 (`31a1a39b621d19adc793edf0eef26c36ba09773e`), 6a Task 11 (about a 96 % cut); historical commit 31a1a39b621d19adc793edf0eef26c36ba09773e | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B0-8 | A | DONE | inherited done | Check ran in #241; the About render test moved to B9-11 (V5) | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B0-9 | A | DECLINED | declined by prior ruling | Ruling `L:35` (normal dashboard operation); the `readLimits` part is B6b-15 | Retain original ruling and citation; no implementation. | +| B0-10 | A | DONE | inherited done | `locators.json` has 0 matches for `` (re-checked 2026-09-28) | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. Source example path sanitized for export; no real personal path is asserted. | +| B0-4 | A | D-17 | answered/deferred design decision | program v2 Appendix A row B0-4 | Drop one-off AQE coverage-gap analysis; preserve actual 70/70/70 gate proof. | +| B0-13 | A | V4 | implemented on develop via V4 | Items B.9, B.12, B.3, B.6; accepted unit 53f6a17f8f79262035048e6c4dfd129103d32042; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. | +| B0-14 | A | V4 | implemented on develop via V4 | Items B.9, B.12, B.3, B.6; accepted unit b94d19f5f9dbde61a67fbddc62afd1d31d1d8478; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. | +| B0-15 | A | V4 | implemented on develop via V4 | Items B.9, B.12, B.3, B.6; accepted unit b4cc7d37bd198ff5d99e1e0d3b18baf4b19fff96; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. | +| B0-21 | A | V4 | implemented on develop via V4 | Items B.9, B.12, B.3, B.6; accepted unit 07e9c6738a2573a0dfceafacc0e2e6857d2e9c6a; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. | +| B0-16 | A | D-16 | answered/deferred design decision | program v2 Appendix A row B0-16 | Accepted Ruflo table-missing-before-quick_check limitation; no new fix. | +| B0-17 | A | DECLINED | declined by prior ruling | Documented trade-off (`ak sync --help`, ADR-0033 §9) | Retain original ruling and citation; no implementation. | +| B0-18 | A | DONE | inherited done | #263 (`e957737bb3b2d763aa09379992d2f6a90a574b68`): `docs/TROUBLESHOOTING.md:94` now reads "Windows Limits data appears after `ak sync`"; historical commit e957737bb3b2d763aa09379992d2f6a90a574b68 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B0-19 | A | DONE | inherited done | Windows CI green on #241 through #263 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B0-20 | A | SUPERSEDED | superseded by cited decision/work | #241's squash dropped them; briefs forbid trailer-like lines | Retain source ruling; verify cited replacement in final reconciliation. | +| B0-22 | A | V3 | implemented on develop via V3 | Client fixes; accepted unit 8420f9d9428a4041f11fd8c034921f172275eda3; PR #276; squash eb963f503f806f80df7a8173d7c71314adbd7cfa; PR #276; squash eb963f503f806f80df7a8173d7c71314adbd7cfa | Final main PR/review remains. | +| B0-23 | A | V3 | implemented on develop via V3 | Client fixes; accepted unit 8420f9d9428a4041f11fd8c034921f172275eda3; PR #276; squash eb963f503f806f80df7a8173d7c71314adbd7cfa; PR #276; squash eb963f503f806f80df7a8173d7c71314adbd7cfa | Final main PR/review remains. | +| B0-24 | A | issue #256 → V3 | V3 code/evidence on develop; #256 closure pending | The controller adds the evidence in Wave 0; V3 closes #256 (D-18, D-19); accepted unit e173bab9d32d350f9f7818aae24392d70791022c; PR #276; squash eb963f503f806f80df7a8173d7c71314adbd7cfa; PR #276; squash eb963f503f806f80df7a8173d7c71314adbd7cfa | Compare all three #256 exit conditions and disclose replay/experimental/no-producer limits before closing. | +| B0-25 | A | D-5 | decision D-5 carried to v5 | own #239 | Execution identity, terminal outcomes, cancellation semantics and upgraded-install matrix remain out of v2 completion. | +| B1-1 | A | DONE | inherited done | #244 (`5f5ca175bb6d9a4108402f4634be746e4d166ce1`); historical commit 5f5ca175bb6d9a4108402f4634be746e4d166ce1 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B1-2 | A | DONE | inherited done | #244 (`5f5ca175bb6d9a4108402f4634be746e4d166ce1`); historical commit 5f5ca175bb6d9a4108402f4634be746e4d166ce1 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B1-3 | A | §2 step 3 | snapshot/schema one-off pending | Snapshot still schema 7 | Current schema snapshot and operational approval to apply; no operation inferred from old schema-7 observation. | +| B1-4 | A | V6 | integrated on develop via V6 | Items 3, 2 and 6; [V6 integration receipt](2026-09-29-remediation-v2-integration-evidence.md) | Closeout integration gates and final main PR/human review remain. Aggregate PR/source-plan evidence; no invented fresh per-item runtime proof. | +| B1-5 | A | V6 | integrated on develop via V6 | Items 3, 2 and 6; [V6 integration receipt](2026-09-29-remediation-v2-integration-evidence.md) | Closeout integration gates and final main PR/human review remain. Aggregate PR/source-plan evidence; no invented fresh per-item runtime proof. | +| B1-6 | A | V6 | integrated on develop via V6 | Items 3, 2 and 6; [V6 integration receipt](2026-09-29-remediation-v2-integration-evidence.md) | Closeout integration gates and final main PR/human review remain. Aggregate PR/source-plan evidence; no invented fresh per-item runtime proof. | +| B2-1 | A | DONE | inherited done | #245 (`a0b75494789d45eb8d2e08fc42c4de477a2a8151`); strict Windows tripwire on #252; historical commit a0b75494789d45eb8d2e08fc42c4de477a2a8151 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B2-2 | A | DONE | inherited done | #245 (`a0b75494789d45eb8d2e08fc42c4de477a2a8151`); strict Windows tripwire on #252; historical commit a0b75494789d45eb8d2e08fc42c4de477a2a8151 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B2-3 | A | DONE | inherited done | #245 (`a0b75494789d45eb8d2e08fc42c4de477a2a8151`); strict Windows tripwire on #252; historical commit a0b75494789d45eb8d2e08fc42c4de477a2a8151 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B2-4 | A | DONE | inherited done | #245 (`a0b75494789d45eb8d2e08fc42c4de477a2a8151`); strict Windows tripwire on #252; historical commit a0b75494789d45eb8d2e08fc42c4de477a2a8151 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B2-5 | A | DONE | inherited done | #263: `tests/kit/verify-command.test.mjs` is gone, and its stricter replacements showed 0 flakes in 20 runs (`L:380`) | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B2-6 | A | V4 | implemented on develop via V4 | Item B.1; reviewed head 404642628d57eac1e42f26286f7db763f0fce704; PR #273; integration commit bd6b4f0fc33b68812497922ab9bc8467e3d4d443; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. | +| B3-1 | A | DONE | inherited done | #247 (`264609992aacac4302c3dd8d9ca769d5222fc1a9`); historical commit 264609992aacac4302c3dd8d9ca769d5222fc1a9 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B3-2 | A | DONE | inherited done | #247 (`264609992aacac4302c3dd8d9ca769d5222fc1a9`); historical commit 264609992aacac4302c3dd8d9ca769d5222fc1a9 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B3-11 | A | DONE | inherited done | #247 (`264609992aacac4302c3dd8d9ca769d5222fc1a9`); historical commit 264609992aacac4302c3dd8d9ca769d5222fc1a9 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B3-12 | A | DONE | inherited done | #247 (`264609992aacac4302c3dd8d9ca769d5222fc1a9`); historical commit 264609992aacac4302c3dd8d9ca769d5222fc1a9 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B3-13 | A | DONE | inherited done | #247 (`264609992aacac4302c3dd8d9ca769d5222fc1a9`); historical commit 264609992aacac4302c3dd8d9ca769d5222fc1a9 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B3-3 | A | DONE | inherited done | Evidence on ruvnet/ruflo#3196; filed ruvnet/ruflo#3509 and #3508. All three are in the registry (`src/lib/hook-audit/agentic-dependency-constraints.json`) | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B3-4 | A | DONE | inherited done | Evidence on ruvnet/ruflo#3196; filed ruvnet/ruflo#3509 and #3508. All three are in the registry (`src/lib/hook-audit/agentic-dependency-constraints.json`) | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B3-5 | A | DONE | inherited done | Evidence on ruvnet/ruflo#3196; filed ruvnet/ruflo#3509 and #3508. All three are in the registry (`src/lib/hook-audit/agentic-dependency-constraints.json`) | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B3-7 | A | DONE | inherited done | Re-checks recorded (`reports/b3-plan.md`; `L:195`) | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B3-8 | A | DONE | inherited done | Re-checks recorded (`reports/b3-plan.md`; `L:195`) | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B3-6 | A | V4 | implemented on develop via V4 | Items C.1, B.7; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. Source-plan item-level mapping only; PR #275 is aggregate integration evidence. | +| B3-9 | A | V4 | implemented on develop via V4 | Items C.1, B.7; accepted unit 03af512a7e42bec9e67744ff9b0f384c35ccbb28; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. | +| B3-10 | A | V4 | implemented on develop via V4 | Items C.1, B.7; accepted unit 03af512a7e42bec9e67744ff9b0f384c35ccbb28; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. | +| B4-1 | A | SUPERSEDED | superseded by cited decision/work | Decisions 14 and 15: #249 (`88e26999e6aecc61d3a1d09afbe51dd7173c93e7`), #253 (`82d1211b5526c9cc78702571c13813eead0c89ce`); #243 closed | Retain source ruling; verify cited replacement in final reconciliation. | +| B4-2 | A | SUPERSEDED | superseded by cited decision/work | Decisions 14 and 15: #249 (`88e26999e6aecc61d3a1d09afbe51dd7173c93e7`), #253 (`82d1211b5526c9cc78702571c13813eead0c89ce`); #243 closed | Retain source ruling; verify cited replacement in final reconciliation. | +| B4-3 | A | DONE | inherited done | #246 (`fca6b2bc208d718f74ebaef53ebbd438cbb34f3d`; the reconciliation's `29f93dfc042f443b588572aa0418229f23f23fa3` is a branch commit); historical commit fca6b2bc208d718f74ebaef53ebbd438cbb34f3d; historical commit 29f93dfc042f443b588572aa0418229f23f23fa3 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B4-5 | A | DONE | inherited done | #246 (`fca6b2bc208d718f74ebaef53ebbd438cbb34f3d`; the reconciliation's `29f93dfc042f443b588572aa0418229f23f23fa3` is a branch commit); historical commit fca6b2bc208d718f74ebaef53ebbd438cbb34f3d; historical commit 29f93dfc042f443b588572aa0418229f23f23fa3 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B4-4 | A | V4 | implemented on develop via V4 | Items C.1, C.2, C.4. B4-10's registry part is DONE in #258 (`a77bfdee3e3948fa1812ac1ce9199be43e0cc8e1`); PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. Source-plan item-level mapping only; PR #275 is aggregate integration evidence. | +| B4-10 | A | V4 | implemented on develop via V4 | Items C.1, C.2, C.4. B4-10's registry part is DONE in #258 (`a77bfdee3e3948fa1812ac1ce9199be43e0cc8e1`); PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. Source-plan item-level mapping only; PR #275 is aggregate integration evidence. | +| B4-11 | A | V4 | implemented on develop via V4 | Items C.1, C.2, C.4. B4-10's registry part is DONE in #258 (`a77bfdee3e3948fa1812ac1ce9199be43e0cc8e1`); PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. Source-plan item-level mapping only; PR #275 is aggregate integration evidence. | +| B4-6 | A | SUPERSEDED | superseded by cited decision/work | #617 was handled by hand in #250, and dispatch was redesigned in #253. The first live dispatch is tracked in DoD 6 | Retain source ruling; verify cited replacement in final reconciliation. | +| B4-7 | A | DONE | inherited done | Replies posted (`L:56`, `L:117-118`) | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B4-8 | A | DONE | inherited done | Replies posted (`L:56`, `L:117-118`) | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B4-9 | A | DONE | inherited done | #249 (`88e26999e6aecc61d3a1d09afbe51dd7173c93e7`); historical commit 88e26999e6aecc61d3a1d09afbe51dd7173c93e7 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B4-12 | A | DONE | inherited done | #250 (`3929cdd527231561bf6509f1405e6f446a057347`); historical commit 3929cdd527231561bf6509f1405e6f446a057347 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B5-1 | A | DONE | inherited done | #250 (`3929cdd527231561bf6509f1405e6f446a057347`); historical commit 3929cdd527231561bf6509f1405e6f446a057347 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B5-2 | A | DONE | inherited done | #250 (`3929cdd527231561bf6509f1405e6f446a057347`); historical commit 3929cdd527231561bf6509f1405e6f446a057347 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B5-14 | A | DONE | inherited done | #250 (`3929cdd527231561bf6509f1405e6f446a057347`); historical commit 3929cdd527231561bf6509f1405e6f446a057347 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B5-16 | A | DONE | inherited done | #250 (`3929cdd527231561bf6509f1405e6f446a057347`); historical commit 3929cdd527231561bf6509f1405e6f446a057347 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B5-3 | A | issue agentic-qe#655 | external closed; selected released compact path verified | Kept on conformance evidence; #755–#758 watched; [AQE artifact receipt](2026-09-29-aqe-released-artifact-receipt.md) (observed 2026-09-29T14:27:38Z): AQE #655 selected compact contract in private released 3.14.5 | Full/none guidance, complete receipt, cross-platform criteria and installed conformance remain unverified. Selected compact path only: 315-byte owned region and unchanged complete AGENTS bytes/mtime across two identical fixture invocations; initial creation mtime not recorded. | +| B5-4 | A | DONE | inherited done | #248 (`1c3c4d354433f444999916d6f641a8b83dafcc1b`); historical commit 1c3c4d354433f444999916d6f641a8b83dafcc1b | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B5-5 | A | issue agentic-qe#753 | external closed; released fresh append verified | AQE repairs the chain; [AQE artifact receipt](2026-09-29-aqe-released-artifact-receipt.md) (observed 2026-09-29T14:27:38Z): AQE #753 fresh-chain append in private released 3.14.5 | Keep holder refusal; old-fork repair, signature validation, import-splice repair, Windows/Linux and installed conformance remain unverified. Three synchronized two-writer rounds completed, but only one demonstrably interleaved; entries were unsigned synthesized PATTERN_CREATE events. | +| B5-6 | A | DONE | inherited done | Filed agentic-qe#754; wording in #250 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B5-7 | A | DONE | inherited done | Historical one-off receipt recorded in the approved program (private receipt identifier omitted) | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B5-8 | A | §2 step 2 | pin reconciliation evidence; operation separate | Pin still absent (verified) | Check current pinned surfaces and status; real-store changes require separate approval. | +| B5-9 | A | V4 and D-7 | V4 scan integrated; real-store operation gated | Item B.5 (the scan) + D-7 (the store); accepted unit 77557d4f3095c62f447b54d6fbd0d9d23ba7aceb; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | D-7 real stray-store merge/import decision remains separate; no real-store action without explicit approval and backup. | +| B5-10 | A | V4 | implemented on develop via V4 | Items B.5, C.4; accepted unit 4d376a11677f7a779c14f34a3012c85aa1649e5b; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. | +| B5-11 | A | V4 | implemented on develop via V4 | Items B.5, C.4; accepted unit da3b820bdfadb408898b9f728614318cbfad9c88; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. | +| B5-17 | A | V4 | implemented on develop via V4 | Items B.5, C.4; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. Source-plan item-level mapping only; PR #275 is aggregate integration evidence. | +| B5-12 | A | DONE | inherited done | Folded into the agentic-qe#735 comment | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B5-13 | A | DECLINED | declined by prior ruling | Ruling `L:188` | Retain original ruling and citation; no implementation. | +| B5-15 | A | D-6 | external closed; 3.14.5 still reproduces | [AQE artifact receipt](2026-09-29-aqe-released-artifact-receipt.md) (observed 2026-09-29T14:27:38Z): AQE #778 settings churn reproduces in released 3.14.5; release at 10:08Z predates fix PR #783 merge 63d3debab54105dbc93030eb0b0088e2f9bebd9c at 13:05Z | Subsequent released-artifact conformance unverified; global installed 3.14.4 metadata unchanged; keep #239 open for readiness. Closed upstream issue and later merged fix source do not establish a fixed released or installed artifact. | +| B5-18 | A | DONE | inherited done | vibium uninstalled with approval (`L:176`, `L:180`) | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B5-19 | A | DONE | inherited done | Registry lists agentic-qe#561 and #755–#759 (grep) | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B5-20 | A | DONE | inherited done | 21 posts read back (`L:215-239`) | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B5-21 | A | DECLINED | declined by prior ruling | Maintainer decision `L:213` | Retain original ruling and citation; no implementation. | +| B6a-1 | A | DONE | inherited done | #252 (`31a1a39b621d19adc793edf0eef26c36ba09773e`), released in alpha.59; historical commit 31a1a39b621d19adc793edf0eef26c36ba09773e | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6a-13 | A | DONE | inherited done | #252 (`31a1a39b621d19adc793edf0eef26c36ba09773e`), released in alpha.59; historical commit 31a1a39b621d19adc793edf0eef26c36ba09773e | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6a-2 | A | DONE | inherited done | #263: ADR-0063 `:102`; the `guarded` probe around `refreshPlanHosts` in `sync.mjs`; ADR-0063 "Known limitations" item 1 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6a-4 | A | DONE | inherited done | #263: ADR-0063 `:102`; the `guarded` probe around `refreshPlanHosts` in `sync.mjs`; ADR-0063 "Known limitations" item 1 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6a-8 | A | DONE | inherited done | #263: ADR-0063 `:102`; the `guarded` probe around `refreshPlanHosts` in `sync.mjs`; ADR-0063 "Known limitations" item 1 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6a-3 | A | V4 | implemented on develop via V4 | Items B.2, B.1; accepted unit 001225daa57662bfbc77510b39383e606b865823; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. | +| B6a-6 | A | V4 | implemented on develop via V4 | Items B.2, B.1; reviewed head 404642628d57eac1e42f26286f7db763f0fce704; PR #273; integration commit bd6b4f0fc33b68812497922ab9bc8467e3d4d443; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. | +| B6a-5 | A | V7 | pending V7 label cleanup | Item 1 (6b removed its own labels in #263) | Run tree-wide label guard after V6, preserve original 6b removal history. | +| B6a-7 | A | V5 | implemented on develop via V5 | Task 7; accepted unit 705bd5ff51c431a36e7b2b1e22a5c699c4315fa9; PR #274; squash af825c9f165575b3ef6e1ce0a5836fcf40a1ca3b | Final main PR/review remains. | +| B6a-9 | A | V3 | implemented on develop via V3 | PR #276; squash eb963f503f806f80df7a8173d7c71314adbd7cfa | Final main PR/review remains. Source-plan 6c group-level mapping; PR #276 is aggregate integration evidence. | +| B6a-12 | A | V3 | implemented on develop via V3 | PR #276; squash eb963f503f806f80df7a8173d7c71314adbd7cfa | Final main PR/review remains. Source-plan 6c group-level mapping; PR #276 is aggregate integration evidence. | +| B6a-10 | A | DECLINED | declined by prior ruling | `L:313`, `L:323` | Retain original ruling and citation; no implementation. | +| B6a-11 | A | DECLINED | declined by prior ruling | `L:313`, `L:323` | Retain original ruling and citation; no implementation. | +| B6b-1 | A | DONE | inherited done | #263 (`e957737bb3b2d763aa09379992d2f6a90a574b68`): `src/lib/refresh.mjs`, `src/lib/live-checks.mjs`, `x/host-connection.mjs`, `reset-routes`, `--show-text`, `sync/plan-versions.mjs`, `configErrorRecovery`, `tests/kit/host-dry-run.test.mjs`, `quota.mjs` `host-not-found`, ADR index rows 0053–0063; historical commit e957737bb3b2d763aa09379992d2f6a90a574b68 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6b-2 | A | DONE | inherited done | #263 (`e957737bb3b2d763aa09379992d2f6a90a574b68`): `src/lib/refresh.mjs`, `src/lib/live-checks.mjs`, `x/host-connection.mjs`, `reset-routes`, `--show-text`, `sync/plan-versions.mjs`, `configErrorRecovery`, `tests/kit/host-dry-run.test.mjs`, `quota.mjs` `host-not-found`, ADR index rows 0053–0063; historical commit e957737bb3b2d763aa09379992d2f6a90a574b68 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6b-4 | A | DONE | inherited done | #263 (`e957737bb3b2d763aa09379992d2f6a90a574b68`): `src/lib/refresh.mjs`, `src/lib/live-checks.mjs`, `x/host-connection.mjs`, `reset-routes`, `--show-text`, `sync/plan-versions.mjs`, `configErrorRecovery`, `tests/kit/host-dry-run.test.mjs`, `quota.mjs` `host-not-found`, ADR index rows 0053–0063; historical commit e957737bb3b2d763aa09379992d2f6a90a574b68 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6b-5 | A | DONE | inherited done | #263 (`e957737bb3b2d763aa09379992d2f6a90a574b68`): `src/lib/refresh.mjs`, `src/lib/live-checks.mjs`, `x/host-connection.mjs`, `reset-routes`, `--show-text`, `sync/plan-versions.mjs`, `configErrorRecovery`, `tests/kit/host-dry-run.test.mjs`, `quota.mjs` `host-not-found`, ADR index rows 0053–0063; historical commit e957737bb3b2d763aa09379992d2f6a90a574b68 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6b-6 | A | DONE | inherited done | #263 (`e957737bb3b2d763aa09379992d2f6a90a574b68`): `src/lib/refresh.mjs`, `src/lib/live-checks.mjs`, `x/host-connection.mjs`, `reset-routes`, `--show-text`, `sync/plan-versions.mjs`, `configErrorRecovery`, `tests/kit/host-dry-run.test.mjs`, `quota.mjs` `host-not-found`, ADR index rows 0053–0063; historical commit e957737bb3b2d763aa09379992d2f6a90a574b68 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6b-7 | A | DONE | inherited done | #263 (`e957737bb3b2d763aa09379992d2f6a90a574b68`): `src/lib/refresh.mjs`, `src/lib/live-checks.mjs`, `x/host-connection.mjs`, `reset-routes`, `--show-text`, `sync/plan-versions.mjs`, `configErrorRecovery`, `tests/kit/host-dry-run.test.mjs`, `quota.mjs` `host-not-found`, ADR index rows 0053–0063; historical commit e957737bb3b2d763aa09379992d2f6a90a574b68 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6b-9 | A | DONE | inherited done | #263 (`e957737bb3b2d763aa09379992d2f6a90a574b68`): `src/lib/refresh.mjs`, `src/lib/live-checks.mjs`, `x/host-connection.mjs`, `reset-routes`, `--show-text`, `sync/plan-versions.mjs`, `configErrorRecovery`, `tests/kit/host-dry-run.test.mjs`, `quota.mjs` `host-not-found`, ADR index rows 0053–0063; historical commit e957737bb3b2d763aa09379992d2f6a90a574b68 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6b-10 | A | DONE | inherited done | #263 (`e957737bb3b2d763aa09379992d2f6a90a574b68`): `src/lib/refresh.mjs`, `src/lib/live-checks.mjs`, `x/host-connection.mjs`, `reset-routes`, `--show-text`, `sync/plan-versions.mjs`, `configErrorRecovery`, `tests/kit/host-dry-run.test.mjs`, `quota.mjs` `host-not-found`, ADR index rows 0053–0063; historical commit e957737bb3b2d763aa09379992d2f6a90a574b68 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6b-11 | A | DONE | inherited done | #263 (`e957737bb3b2d763aa09379992d2f6a90a574b68`): `src/lib/refresh.mjs`, `src/lib/live-checks.mjs`, `x/host-connection.mjs`, `reset-routes`, `--show-text`, `sync/plan-versions.mjs`, `configErrorRecovery`, `tests/kit/host-dry-run.test.mjs`, `quota.mjs` `host-not-found`, ADR index rows 0053–0063; historical commit e957737bb3b2d763aa09379992d2f6a90a574b68 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6b-15 | A | DONE | inherited done | #263 (`e957737bb3b2d763aa09379992d2f6a90a574b68`): `src/lib/refresh.mjs`, `src/lib/live-checks.mjs`, `x/host-connection.mjs`, `reset-routes`, `--show-text`, `sync/plan-versions.mjs`, `configErrorRecovery`, `tests/kit/host-dry-run.test.mjs`, `quota.mjs` `host-not-found`, ADR index rows 0053–0063; historical commit e957737bb3b2d763aa09379992d2f6a90a574b68 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6b-16 | A | DONE | inherited done | #263 (`e957737bb3b2d763aa09379992d2f6a90a574b68`): `src/lib/refresh.mjs`, `src/lib/live-checks.mjs`, `x/host-connection.mjs`, `reset-routes`, `--show-text`, `sync/plan-versions.mjs`, `configErrorRecovery`, `tests/kit/host-dry-run.test.mjs`, `quota.mjs` `host-not-found`, ADR index rows 0053–0063; historical commit e957737bb3b2d763aa09379992d2f6a90a574b68 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6b-17 | A | DONE | inherited done | #263 (`e957737bb3b2d763aa09379992d2f6a90a574b68`): `src/lib/refresh.mjs`, `src/lib/live-checks.mjs`, `x/host-connection.mjs`, `reset-routes`, `--show-text`, `sync/plan-versions.mjs`, `configErrorRecovery`, `tests/kit/host-dry-run.test.mjs`, `quota.mjs` `host-not-found`, ADR index rows 0053–0063; historical commit e957737bb3b2d763aa09379992d2f6a90a574b68 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6b-20 | A | DONE | inherited done | #263 (`e957737bb3b2d763aa09379992d2f6a90a574b68`): `src/lib/refresh.mjs`, `src/lib/live-checks.mjs`, `x/host-connection.mjs`, `reset-routes`, `--show-text`, `sync/plan-versions.mjs`, `configErrorRecovery`, `tests/kit/host-dry-run.test.mjs`, `quota.mjs` `host-not-found`, ADR index rows 0053–0063; historical commit e957737bb3b2d763aa09379992d2f6a90a574b68 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6b-23 | A | DONE | inherited done | #263 (`e957737bb3b2d763aa09379992d2f6a90a574b68`): `src/lib/refresh.mjs`, `src/lib/live-checks.mjs`, `x/host-connection.mjs`, `reset-routes`, `--show-text`, `sync/plan-versions.mjs`, `configErrorRecovery`, `tests/kit/host-dry-run.test.mjs`, `quota.mjs` `host-not-found`, ADR index rows 0053–0063; historical commit e957737bb3b2d763aa09379992d2f6a90a574b68 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6b-26 | A | DONE | inherited done | #263 (`e957737bb3b2d763aa09379992d2f6a90a574b68`): `src/lib/refresh.mjs`, `src/lib/live-checks.mjs`, `x/host-connection.mjs`, `reset-routes`, `--show-text`, `sync/plan-versions.mjs`, `configErrorRecovery`, `tests/kit/host-dry-run.test.mjs`, `quota.mjs` `host-not-found`, ADR index rows 0053–0063; historical commit e957737bb3b2d763aa09379992d2f6a90a574b68 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B6b-3 | A | V3 | implemented on develop via V3 | 6c-1 … 6c-3; PR #276; squash eb963f503f806f80df7a8173d7c71314adbd7cfa | Final main PR/review remains. Source-plan 6c group-level mapping; PR #276 is aggregate integration evidence. | +| B6b-8 | A | V3 | implemented on develop via V3 | 6c-1 … 6c-3; PR #276; squash eb963f503f806f80df7a8173d7c71314adbd7cfa | Final main PR/review remains. Source-plan 6c group-level mapping; PR #276 is aggregate integration evidence. | +| B6b-18 | A | V3 | implemented on develop via V3 | 6c-1 … 6c-3; PR #276; squash eb963f503f806f80df7a8173d7c71314adbd7cfa | Final main PR/review remains. Source-plan 6c group-level mapping; PR #276 is aggregate integration evidence. | +| B6b-13 | A | DONE (CLI half) and V3 (dashboard half) | CLI inherited done; dashboard implemented on develop | #263 Tasks 13–14; 6c-4, 6c-5; PR #276; squash eb963f503f806f80df7a8173d7c71314adbd7cfa | Final main PR/review remains. | +| B6b-19 | A | DONE (CLI half) and V3 (dashboard half) | CLI inherited done; dashboard implemented on develop | #263 Tasks 13–14; 6c-4, 6c-5; PR #276; squash eb963f503f806f80df7a8173d7c71314adbd7cfa | Final main PR/review remains. | +| B6b-12 | A | SUPERSEDED | superseded by cited decision/work | False premise (R11) | Retain source ruling; verify cited replacement in final reconciliation. | +| B6b-14 | A | SUPERSEDED | superseded by cited decision/work | R17 | Retain source ruling; verify cited replacement in final reconciliation. | +| B6b-21 | A | V4 | implemented on develop via V4 | Items A.3, A.1, C.6; accepted unit 175677a682ec028c775eb1afe440add846827527; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. | +| B6b-22 | A | V4 | implemented on develop via V4 | Items A.3, A.1, C.6; accepted unit 557ba358e18a3c5ec50f806f5b69dae529a1cf98; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. | +| B6b-25 | A | V4 | implemented on develop via V4 | Items A.3, A.1, C.6; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. Source-plan item-level mapping only; PR #275 is aggregate integration evidence. | +| B6b-24 | A | DONE (PR body) and D-2 (release notes) | PR body done; release-notes operation pending | #263's body | D-2 release notes only after release approval and exact artifact gate. | +| UA-1 | A | V6 | integrated on develop via V6 | —; [V6 integration receipt](2026-09-29-remediation-v2-integration-evidence.md) | Closeout integration gates and final main PR/human review remain. Aggregate PR/source-plan evidence; no invented fresh per-item runtime proof. | +| UA-3 | A | V6 | integrated on develop via V6 | —; [V6 integration receipt](2026-09-29-remediation-v2-integration-evidence.md) | Closeout integration gates and final main PR/human review remain. Aggregate PR/source-plan evidence; no invented fresh per-item runtime proof. | +| UA-4 | A | V6 | integrated on develop via V6 | —; [V6 integration receipt](2026-09-29-remediation-v2-integration-evidence.md) | Closeout integration gates and final main PR/human review remain. Aggregate PR/source-plan evidence; no invented fresh per-item runtime proof. | +| UA-5 | A | V6 | integrated on develop via V6 | —; [V6 integration receipt](2026-09-29-remediation-v2-integration-evidence.md) | Closeout integration gates and final main PR/human review remain. Aggregate PR/source-plan evidence; no invented fresh per-item runtime proof. | +| UA-2 | A | issue #257: disclosure in V6; the source after v2 | V6 disclosure integrated; Cowork reader deferred | See "After v2"; own #257; [V6 integration receipt](2026-09-29-remediation-v2-integration-evidence.md) | Keep #257 open: source discovery and optional reader remain future work. | +| B9-1 | A | DONE | inherited done | #259 (`172f23074ecd8c5a21177ef58e4d58af0b7888ed`): orchestrator restore, "Partial data" card, round-trip prune, `docs/SETUP.md:126` and the `docs/UPGRADING.md` section of 2026-09-28; historical commit 172f23074ecd8c5a21177ef58e4d58af0b7888ed | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B9-4 | A | DONE | inherited done | #259 (`172f23074ecd8c5a21177ef58e4d58af0b7888ed`): orchestrator restore, "Partial data" card, round-trip prune, `docs/SETUP.md:126` and the `docs/UPGRADING.md` section of 2026-09-28; historical commit 172f23074ecd8c5a21177ef58e4d58af0b7888ed | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B9-8 | A | DONE | inherited done | #259 (`172f23074ecd8c5a21177ef58e4d58af0b7888ed`): orchestrator restore, "Partial data" card, round-trip prune, `docs/SETUP.md:126` and the `docs/UPGRADING.md` section of 2026-09-28; historical commit 172f23074ecd8c5a21177ef58e4d58af0b7888ed | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B9-17 | A | DONE | inherited done | #259 (`172f23074ecd8c5a21177ef58e4d58af0b7888ed`): orchestrator restore, "Partial data" card, round-trip prune, `docs/SETUP.md:126` and the `docs/UPGRADING.md` section of 2026-09-28; historical commit 172f23074ecd8c5a21177ef58e4d58af0b7888ed | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| B9-2 | A | V4 | implemented on develop via V4 | Items B.8, B.4, B.3, C.3, B.11, C.1; accepted unit b5570e1ed22717648a109c0dc2c4ff9418a992c8; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. | +| B9-3 | A | V4 | implemented on develop via V4 | Items B.8, B.4, B.3, C.3, B.11, C.1; accepted unit c8bfd64f7322718778499bf068352f3c7f723457; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. | +| B9-12 | A | V4 | implemented on develop via V4 | Items B.8, B.4, B.3, C.3, B.11, C.1; accepted unit b4cc7d37bd198ff5d99e1e0d3b18baf4b19fff96; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. | +| B9-15 | A | V4 | implemented on develop via V4 | Items B.8, B.4, B.3, C.3, B.11, C.1; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. Source-plan item-level mapping only; PR #275 is aggregate integration evidence. | +| B9-16 | A | V4 | implemented on develop via V4 | Items B.8, B.4, B.3, C.3, B.11, C.1; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. Source-plan item-level mapping only; PR #275 is aggregate integration evidence. | +| B9-18 | A | V4 | implemented on develop via V4 | Items B.8, B.4, B.3, C.3, B.11, C.1; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. Source-plan item-level mapping only; PR #275 is aggregate integration evidence. | +| B9-5 | A | issue #254: evidence-gated (§2 step 5) | evidence-gated issue #254 | V3 fixes it if a trace arrives; V7 closes it otherwise; own #254 | Recheck all available browser trace evidence; close with no-repro invitation only if issue criteria permit, otherwise leave open. | +| B9-6 | A | issue #255: after v2 | deferred named issue | See "After v2"; own #255 | Design-first worker warning after v2; no implementation claim. | +| B9-7 | A | DECLINED | declined by prior ruling | B9-OQ1 | Retain original ruling and citation; no implementation. | +| B9-9 | A | DECLINED | declined by prior ruling | B9-R12 | Retain original ruling and citation; no implementation. | +| B9-10 | A | issue #256 → V3 | V3 code/evidence on develop; #256 closure pending | D-18, D-19 and one real-machine observation; accepted unit e173bab9d32d350f9f7818aae24392d70791022c; PR #276; squash eb963f503f806f80df7a8173d7c71314adbd7cfa; PR #276; squash eb963f503f806f80df7a8173d7c71314adbd7cfa | Compare all three #256 exit conditions and disclose replay/experimental/no-producer limits before closing. | +| B9-11 | A | V5 | implemented on develop via V5 | B9-14 then goes to §2 step 7; PR #274; squash af825c9f165575b3ef6e1ce0a5836fcf40a1ca3b; PR #274; squash af825c9f165575b3ef6e1ce0a5836fcf40a1ca3b | Final main PR/review remains. | +| B9-13 | A | V5 | implemented on develop via V5 | B9-14 then goes to §2 step 7; PR #274; squash af825c9f165575b3ef6e1ce0a5836fcf40a1ca3b; PR #274; squash af825c9f165575b3ef6e1ce0a5836fcf40a1ca3b | Final main PR/review remains. | +| B9-14 | A | V5 | V5 inventory integrated; deletion gated | B9-14 then goes to §2 step 7; PR #274; squash af825c9f165575b3ef6e1ce0a5836fcf40a1ca3b; PR #274; squash af825c9f165575b3ef6e1ce0a5836fcf40a1ca3b | Read-only inventory is complete via PR #274; actual cleanup/deletion requires exact approval. | +| B9-20 | A | V5 | implemented on develop via V5 | B9-14 then goes to §2 step 7; PR #274; squash af825c9f165575b3ef6e1ce0a5836fcf40a1ca3b; PR #274; squash af825c9f165575b3ef6e1ce0a5836fcf40a1ca3b | Final main PR/review remains. | +| B9-19 | A | DONE | inherited done | #261 (`0fa5e4890aabd830ee9d41878dd4e41bc85d3c73`); historical commit 0fa5e4890aabd830ee9d41878dd4e41bc85d3c73 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| LQ-1 | A | V5 | implemented on develop via V5 | PR #274; squash af825c9f165575b3ef6e1ce0a5836fcf40a1ca3b; PR #274; squash af825c9f165575b3ef6e1ce0a5836fcf40a1ca3b | Final main PR/review remains. | +| LQ-4 | A | V5 | implemented on develop via V5 | PR #274; squash af825c9f165575b3ef6e1ce0a5836fcf40a1ca3b; PR #274; squash af825c9f165575b3ef6e1ce0a5836fcf40a1ca3b | Final main PR/review remains. | +| LQ-2 | A | V4 | V4 core integrated; conditional #3419 line deferred | Items B.6, B.10; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Ruflo #3419 has no maintainer-supported answer; add conditional manual-fix line only if upstream evidence warrants it. Do not call the conditional line completed. Source-plan item-level mapping only; PR #275 is aggregate integration evidence. | +| LQ-3 | A | V4 | implemented on develop via V4 | Items B.6, B.10; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. Source-plan item-level mapping only; PR #275 is aggregate integration evidence. | +| HK-1 | A | DONE | inherited done | `git ls-remote --heads origin feat/managed-ruflo-components` is empty | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| HK-2 | A | DONE | inherited done | `git worktree list` and `git stash list` | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| HK-3 | A | DONE | inherited done | `git worktree list` and `git stash list` | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| HK-4 | A | DONE | inherited done | Dependabot #231 closed | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| HK-5 | A | DECLINED | declined by prior ruling | Stay documented or excluded (v1 plan; `H1:159-160`) | Retain original ruling and citation; no implementation. | +| HK-7 | A | DECLINED | declined by prior ruling | Stay documented or excluded (v1 plan; `H1:159-160`) | Retain original ruling and citation; no implementation. | +| HK-6 | A | D-9 | answered/deferred design decision | program v2 Appendix A row HK-6 | Retain two v5 branches under D-9; no deletion/migration. | +| HK-8 | A | DONE | inherited done | No `ak-*` folder beside the repository (`L:513`, re-checked) | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| HK-9 | A | DONE | inherited done | No `ak-*` folder beside the repository (`L:513`, re-checked) | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| HK-10 | A | SUPERSEDED | superseded by cited decision/work | M-2 | Retain source ruling; verify cited replacement in final reconciliation. | +| HK-11 | A | issue stuinfla/ruvnet-brain#335 | external open issue | stuinfla/ruvnet-brain#335 | No local uninstall action. | +| HK-12 | A | DONE | inherited done | alpha.58 (`f3106a8ce53d5206898e8324cce9ba7c741f75c3`), alpha.59 (`b84b5a7ec8948daf21c04f7a4e91b9f9fe92e727`); historical commit f3106a8ce53d5206898e8324cce9ba7c741f75c3; historical commit b84b5a7ec8948daf21c04f7a4e91b9f9fe92e727 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| HK-13 | A | DONE | inherited done | #258 (`a77bfdee3e3948fa1812ac1ce9199be43e0cc8e1`); historical commit a77bfdee3e3948fa1812ac1ce9199be43e0cc8e1 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| HK-14 | A | DONE | inherited done | Probe repository returns 404; ruleset `24138491` active | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| HK-15 | A | D-8 | answered/deferred design decision | program v2 Appendix A row HK-15 | D-8 decision source and issue criteria must be cited at final V7 review. | +| DG-1 | A | D-10 … D-15 | answered/deferred design decision | program v2 Appendix A row DG-1 | Retain approved D-series decision and named future gate; no v2 code claim. | +| DG-2 | A | D-10 … D-15 | answered/deferred design decision | program v2 Appendix A row DG-2 | Retain approved D-series decision and named future gate; no v2 code claim. | +| DG-3 | A | D-10 … D-15 | answered/deferred design decision | program v2 Appendix A row DG-3 | Retain approved D-series decision and named future gate; no v2 code claim. | +| DG-4 | A | D-10 … D-15 | answered/deferred design decision | program v2 Appendix A row DG-4 | Retain approved D-series decision and named future gate; no v2 code claim. | +| DG-5 | A | D-10 … D-15 | answered/deferred design decision | program v2 Appendix A row DG-5 | Retain approved D-series decision and named future gate; no v2 code claim. | +| DG-6 | A | D-10 … D-15 | answered/deferred design decision | program v2 Appendix A row DG-6 | Retain approved D-series decision and named future gate; no v2 code claim. | +| AU-1 | A | DONE | inherited done | #240 exists; agentic-qe#734 (retired in #258), stuinfla/ruvnet-brain#330 and #331, ruvnet/ruflo#3446 and agentic-qe#735 are in the registry; the #574 note is issuecomment-5863219357 (`L:229`); stages 4–5 shipped in #241 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| AU-2 | A | DONE | inherited done | #240 exists; agentic-qe#734 (retired in #258), stuinfla/ruvnet-brain#330 and #331, ruvnet/ruflo#3446 and agentic-qe#735 are in the registry; the #574 note is issuecomment-5863219357 (`L:229`); stages 4–5 shipped in #241 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| AU-3 | A | DONE | inherited done | #240 exists; agentic-qe#734 (retired in #258), stuinfla/ruvnet-brain#330 and #331, ruvnet/ruflo#3446 and agentic-qe#735 are in the registry; the #574 note is issuecomment-5863219357 (`L:229`); stages 4–5 shipped in #241 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| AU-4 | A | DONE | inherited done | #240 exists; agentic-qe#734 (retired in #258), stuinfla/ruvnet-brain#330 and #331, ruvnet/ruflo#3446 and agentic-qe#735 are in the registry; the #574 note is issuecomment-5863219357 (`L:229`); stages 4–5 shipped in #241 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| AU-5 | A | DONE | inherited done | #240 exists; agentic-qe#734 (retired in #258), stuinfla/ruvnet-brain#330 and #331, ruvnet/ruflo#3446 and agentic-qe#735 are in the registry; the #574 note is issuecomment-5863219357 (`L:229`); stages 4–5 shipped in #241 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| AU-6 | A | DONE | inherited done | #240 exists; agentic-qe#734 (retired in #258), stuinfla/ruvnet-brain#330 and #331, ruvnet/ruflo#3446 and agentic-qe#735 are in the registry; the #574 note is issuecomment-5863219357 (`L:229`); stages 4–5 shipped in #241 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| AU-7 | A | DONE | inherited done | #240 exists; agentic-qe#734 (retired in #258), stuinfla/ruvnet-brain#330 and #331, ruvnet/ruflo#3446 and agentic-qe#735 are in the registry; the #574 note is issuecomment-5863219357 (`L:229`); stages 4–5 shipped in #241 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| AU-8 | A | DONE | inherited done | #240 exists; agentic-qe#734 (retired in #258), stuinfla/ruvnet-brain#330 and #331, ruvnet/ruflo#3446 and agentic-qe#735 are in the registry; the #574 note is issuecomment-5863219357 (`L:229`); stages 4–5 shipped in #241 | Confirm current behavior through final integration gates; no new ancestry claim. Historical ancestry confirms provenance, not current behavior; final integration gates remain. | +| AU-9 | A | DECLINED | declined by prior ruling | Paid qe-court live test stays manual | Retain original ruling and citation; no implementation. | +| AU-10 | A | SUPERSEDED | superseded by cited decision/work | Decision 15 | Retain source ruling; verify cited replacement in final reconciliation. | +| HO-1 | A | SUPERSEDED | superseded by cited decision/work | #253 merged; the hold lifted for N-5 only | Retain source ruling; verify cited replacement in final reconciliation. | +| DoD-1 | A | v2 DoD | operational definition-of-done gate | 1, 2, 6, 8, 7, and §5 with DoD 1; program v2 §6 | V6 integrated; V7 integration, final gates and main PR/human approval remain. External main watcher reconciliation is recorded separately. | +| DoD-2 | A | v2 DoD | operational definition-of-done gate | 1, 2, 6, 8, 7, and §5 with DoD 1; program v2 §6 | Source DoD-2 maps to program §6 item 2: all 246 rows need final citation/disposition after V6 and V7. | +| DoD-3 | A | v2 DoD | operational definition-of-done gate | 1, 2, 6, 8, 7, and §5 with DoD 1; program v2 §6 | Source DoD-3 maps to program §6 item 6: upstream watch live/quiet, #240 disposition and first real release dispatch remain observation-gated. | +| DoD-4 | A | v2 DoD | operational definition-of-done gate | 1, 2, 6, 8, 7, and §5 with DoD 1; program v2 §6 | Program records and archive reconciliation remain. Attended time was not instrumented; commit/run elapsed times cannot establish it. Personal Codex memory writes are outside this approval. | +| DoD-5 | A | v2 DoD | operational definition-of-done gate | 1, 2, 6, 8, 7, and §5 with DoD 1; program v2 §6 | Source DoD-5 maps to program §6 item 7: retained worktree/branch cleanup is an approved post-main operation, not done now. | +| DoD-6 | A | v2 DoD | operational definition-of-done gate | 1, 2, 6, 8, 7, and §5 with DoD 1; program v2 §6 | Source DoD-6 maps to program §5 plus DoD-1: full branch gates, integration review, final open main PR and human approval remain. | +| AB-row-1 | B | V1 | V1 integrated; 20-run evidence captured; issue publication pending | #262, Windows CI slowdown — V1 squash ab2fc5cb5104c2cf260fb9e3ff1721bd3b074202; [Windows receipt](2026-09-29-windows-ci-evidence.md) | Issue comment/closure require controller reconciliation. Current three-PR snapshot fails: Windows Node 24 took 358 seconds. Refresh after closeout PR CI. Observational medians meet the issue threshold; failed runs and a 359 s job remain, so no every-job-under-five-minutes claim. No #262 update posted from this draft. | +| AB-row-2 | B | V2 | V2 inherited documentation scope integrated on main | The docs taxonomy plan — D-3; [inherited integration receipt](2026-09-29-remediation-v2-integration-evidence.md): merged PR #264 e7cfe9ca4d49cb5e94fba698cd0e8376e0c829b7; PR #266 7936ca48942e4ed1b629641eb61dc0dfbcf12951; taxonomy/plan archive PR #269 159c1c98d86d5fbb22b5752413f5889d8b8d172b; all recorded ancestors of main@94890a00ec6f5869c186d1066076c5a2e17dfee4 | Retain final integration/docs checks before V7 signoff. Inherited receipt proves merged ancestry and titles, not current behavior or an exact per-file allocation among PRs. | +| AB-N-1 | B | V4 | implemented on develop via V4 | N-1, N-2, N-3, N-5 — Items C.1 to C.4; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-N-2 | B | V4 | implemented on develop via V4 | N-1, N-2, N-3, N-5 — Items C.1 to C.4; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-N-3 | B | V4 | implemented on develop via V4 | N-1, N-2, N-3, N-5 — Items C.1 to C.4; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-N-5 | B | V4 | implemented on develop via V4 | N-1, N-2, N-3, N-5 — Items C.1 to C.4; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-row-4 | B | DONE | inherited done | N-4 — #261 (`0fa5e4890aabd830ee9d41878dd4e41bc85d3c73`) | Confirm current behavior through final integration gates; no new ancestry claim. | +| AB-N5-M7 | B | V4 | implemented on develop via V4 | N-5 minors M7, M8 and 1–12 (14 items) — C4; each is listed in `reports/n5-253-deferred-minors.md` §2 and was present on `main`; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-N5-M8 | B | V4 | implemented on develop via V4 | N-5 minors M7, M8 and 1–12 (14 items) — C4; each is listed in `reports/n5-253-deferred-minors.md` §2 and was present on `main`; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-N5-minor-1 | B | V4 | implemented on develop via V4 | N-5 minors M7, M8 and 1–12 (14 items) — C4; each is listed in `reports/n5-253-deferred-minors.md` §2 and was present on `main`; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-N5-minor-2 | B | V4 | implemented on develop via V4 | N-5 minors M7, M8 and 1–12 (14 items) — C4; each is listed in `reports/n5-253-deferred-minors.md` §2 and was present on `main`; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-N5-minor-3 | B | V4 | implemented on develop via V4 | N-5 minors M7, M8 and 1–12 (14 items) — C4; each is listed in `reports/n5-253-deferred-minors.md` §2 and was present on `main`; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-N5-minor-4 | B | V4 | implemented on develop via V4 | N-5 minors M7, M8 and 1–12 (14 items) — C4; each is listed in `reports/n5-253-deferred-minors.md` §2 and was present on `main`; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-N5-minor-5 | B | V4 | implemented on develop via V4 | N-5 minors M7, M8 and 1–12 (14 items) — C4; each is listed in `reports/n5-253-deferred-minors.md` §2 and was present on `main`; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-N5-minor-6 | B | V4 | implemented on develop via V4 | N-5 minors M7, M8 and 1–12 (14 items) — C4; each is listed in `reports/n5-253-deferred-minors.md` §2 and was present on `main`; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-N5-minor-7 | B | V4 | implemented on develop via V4 | N-5 minors M7, M8 and 1–12 (14 items) — C4; each is listed in `reports/n5-253-deferred-minors.md` §2 and was present on `main`; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-N5-minor-8 | B | V4 | implemented on develop via V4 | N-5 minors M7, M8 and 1–12 (14 items) — C4; each is listed in `reports/n5-253-deferred-minors.md` §2 and was present on `main`; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-N5-minor-9 | B | V4 | implemented on develop via V4 | N-5 minors M7, M8 and 1–12 (14 items) — C4; each is listed in `reports/n5-253-deferred-minors.md` §2 and was present on `main`; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-N5-minor-10 | B | V4 | implemented on develop via V4 | N-5 minors M7, M8 and 1–12 (14 items) — C4; each is listed in `reports/n5-253-deferred-minors.md` §2 and was present on `main`; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-N5-minor-11 | B | V4 | implemented on develop via V4 | N-5 minors M7, M8 and 1–12 (14 items) — C4; each is listed in `reports/n5-253-deferred-minors.md` §2 and was present on `main`; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-N5-minor-12 | B | V4 | implemented on develop via V4 | N-5 minors M7, M8 and 1–12 (14 items) — C4; each is listed in `reports/n5-253-deferred-minors.md` §2 and was present on `main`; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-row-6 | B | DECLINED | declined by prior ruling | N-5 minor M10 — #253's final review: "None needed"; the doc matches the code | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-6b-parked-1 | B | V4 | implemented on develop via V4 | 6b parked items 1, 2, 3 and m-4 — Items A.3, A.1, A.2; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-6b-parked-2 | B | V4 | implemented on develop via V4 | 6b parked items 1, 2, 3 and m-4 — Items A.3, A.1, A.2; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-6b-parked-3 | B | V4 | implemented on develop via V4 | 6b parked items 1, 2, 3 and m-4 — Items A.3, A.1, A.2; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-6b-m-4 | B | V4 | implemented on develop via V4 | 6b parked items 1, 2, 3 and m-4 — Items A.3, A.1, A.2; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-row-8 | B | V4 | implemented on develop via V4 | 6b re-review Minor (no test pins the injected path) — Item A.4; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-models-unknown-verb | B | V4 | implemented on develop via V4 | 6b declined-to-judge: `ak models` exits 0 on an unknown verb; stray positional on plain `ak status` — Item A.1; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-status-stray-positional | B | V4 | implemented on develop via V4 | 6b declined-to-judge: `ak models` exits 0 on an unknown verb; stray positional on plain `ak status` — Item A.1; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-row-10 | B | V3 | implemented on develop via V3 | 6b declined-to-judge: the dashboard noun left in README and DASHBOARD — 6c-4; PR #276; squash eb963f503f806f80df7a8173d7c71314adbd7cfa | Final main PR/review remains. | +| AB-row-11 | B | V4 | implemented on develop via V4 | 6b declined-to-judge: the newest in-window re-check — Item C.6 (B6b-25); PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-row-12 | B | DONE | inherited done | 6b declined-to-judge: Windows behavior — #263's Windows CI legs green | Confirm current behavior through final integration gates; no new ancestry claim. | +| AB-parallel-named-proofs | B | DECLINED | declined by prior ruling | 6b declined-to-judge: the other 9 (parallel named proofs, live summary on system and maintain, the live-check label, no ticker for fast stages, concurrent CLI and dashboard scans, `--refresh=local` undocumented, maintenance writes under `--refresh`, the not-scanned step text, `check-connection --dry-run`'s local checks) — The reviewer found each by design, specified by the plan, or pre-existing and harmless | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-live-summary-system-maintain | B | DECLINED | declined by prior ruling | 6b declined-to-judge: the other 9 (parallel named proofs, live summary on system and maintain, the live-check label, no ticker for fast stages, concurrent CLI and dashboard scans, `--refresh=local` undocumented, maintenance writes under `--refresh`, the not-scanned step text, `check-connection --dry-run`'s local checks) — The reviewer found each by design, specified by the plan, or pre-existing and harmless | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-live-check-label | B | DECLINED | declined by prior ruling | 6b declined-to-judge: the other 9 (parallel named proofs, live summary on system and maintain, the live-check label, no ticker for fast stages, concurrent CLI and dashboard scans, `--refresh=local` undocumented, maintenance writes under `--refresh`, the not-scanned step text, `check-connection --dry-run`'s local checks) — The reviewer found each by design, specified by the plan, or pre-existing and harmless | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-fast-stage-ticker | B | DECLINED | declined by prior ruling | 6b declined-to-judge: the other 9 (parallel named proofs, live summary on system and maintain, the live-check label, no ticker for fast stages, concurrent CLI and dashboard scans, `--refresh=local` undocumented, maintenance writes under `--refresh`, the not-scanned step text, `check-connection --dry-run`'s local checks) — The reviewer found each by design, specified by the plan, or pre-existing and harmless | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-concurrent-cli-dashboard | B | DECLINED | declined by prior ruling | 6b declined-to-judge: the other 9 (parallel named proofs, live summary on system and maintain, the live-check label, no ticker for fast stages, concurrent CLI and dashboard scans, `--refresh=local` undocumented, maintenance writes under `--refresh`, the not-scanned step text, `check-connection --dry-run`'s local checks) — The reviewer found each by design, specified by the plan, or pre-existing and harmless | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-refresh-local-docs | B | DECLINED | declined by prior ruling | 6b declined-to-judge: the other 9 (parallel named proofs, live summary on system and maintain, the live-check label, no ticker for fast stages, concurrent CLI and dashboard scans, `--refresh=local` undocumented, maintenance writes under `--refresh`, the not-scanned step text, `check-connection --dry-run`'s local checks) — The reviewer found each by design, specified by the plan, or pre-existing and harmless | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-maintenance-writes-refresh | B | DECLINED | declined by prior ruling | 6b declined-to-judge: the other 9 (parallel named proofs, live summary on system and maintain, the live-check label, no ticker for fast stages, concurrent CLI and dashboard scans, `--refresh=local` undocumented, maintenance writes under `--refresh`, the not-scanned step text, `check-connection --dry-run`'s local checks) — The reviewer found each by design, specified by the plan, or pre-existing and harmless | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-not-scanned-text | B | DECLINED | declined by prior ruling | 6b declined-to-judge: the other 9 (parallel named proofs, live summary on system and maintain, the live-check label, no ticker for fast stages, concurrent CLI and dashboard scans, `--refresh=local` undocumented, maintenance writes under `--refresh`, the not-scanned step text, `check-connection --dry-run`'s local checks) — The reviewer found each by design, specified by the plan, or pre-existing and harmless | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-check-connection-dry-run | B | DECLINED | declined by prior ruling | 6b declined-to-judge: the other 9 (parallel named proofs, live summary on system and maintain, the live-check label, no ticker for fast stages, concurrent CLI and dashboard scans, `--refresh=local` undocumented, maintenance writes under `--refresh`, the not-scanned step text, `check-connection --dry-run`'s local checks) — The reviewer found each by design, specified by the plan, or pre-existing and harmless | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-row-14 | B | V4 | implemented on develop via V4 | Branch 9 Task 1's parked `pause()` summary — Item B.8 (same as B9-2); PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Final main PR/review remains. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | +| AB-row-15 | B | V4, V5 | V4/V5 code integrated on develop | Branch 9 declined-to-judge: Tasks 5–14 and N-1 to N-5 — Mapped above; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e; PR #274; squash af825c9f165575b3ef6e1ce0a5836fcf40a1ca3b | Map each underlying Task 5–14 and N item to its exact PR during final V7 review. Source is grouped; per-task mapping is not present in this expanded row. | +| AB-row-16 | B | DONE | inherited done | Branch 9 declined-to-judge: Windows behavior (EBUSY, junctions) — #259's Windows CI legs green | Confirm current behavior through final integration gates; no new ancestry claim. | +| AB-row-17 | B | SUPERSEDED | superseded by cited decision/work | Branch 9 declined-to-judge: 6b's uncommitted `DASHBOARD.md` hunks — #263 merged | Retain source ruling; verify cited replacement in final reconciliation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-row-18 | B | V6 | integrated on develop via V6 | Branch 9 declined-to-judge: census numbers not re-run — Item 4 re-measures; [V6 integration receipt](2026-09-29-remediation-v2-integration-evidence.md) | Closeout integration gates and final main PR/human review remain. Aggregate PR/source-plan evidence; no invented fresh per-item runtime proof. | +| AB-history-coverage-read | B | DECLINED | declined by prior ruling | Branch 9 declined-to-judge: the other 9 (history read per `coverage()`, non-canonical copies kept, trailing newline, `sudo` uid, `env` key position, commented TOML line, CRLF fixtures, `UPGRADING.md` date order, copies of a released file) — The reviewer found each safe by design or out of scope | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-noncanonical-copies | B | DECLINED | declined by prior ruling | Branch 9 declined-to-judge: the other 9 (history read per `coverage()`, non-canonical copies kept, trailing newline, `sudo` uid, `env` key position, commented TOML line, CRLF fixtures, `UPGRADING.md` date order, copies of a released file) — The reviewer found each safe by design or out of scope | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-trailing-newline | B | DECLINED | declined by prior ruling | Branch 9 declined-to-judge: the other 9 (history read per `coverage()`, non-canonical copies kept, trailing newline, `sudo` uid, `env` key position, commented TOML line, CRLF fixtures, `UPGRADING.md` date order, copies of a released file) — The reviewer found each safe by design or out of scope | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-sudo-uid | B | DECLINED | declined by prior ruling | Branch 9 declined-to-judge: the other 9 (history read per `coverage()`, non-canonical copies kept, trailing newline, `sudo` uid, `env` key position, commented TOML line, CRLF fixtures, `UPGRADING.md` date order, copies of a released file) — The reviewer found each safe by design or out of scope | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-env-key-position | B | DECLINED | declined by prior ruling | Branch 9 declined-to-judge: the other 9 (history read per `coverage()`, non-canonical copies kept, trailing newline, `sudo` uid, `env` key position, commented TOML line, CRLF fixtures, `UPGRADING.md` date order, copies of a released file) — The reviewer found each safe by design or out of scope | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-commented-toml | B | DECLINED | declined by prior ruling | Branch 9 declined-to-judge: the other 9 (history read per `coverage()`, non-canonical copies kept, trailing newline, `sudo` uid, `env` key position, commented TOML line, CRLF fixtures, `UPGRADING.md` date order, copies of a released file) — The reviewer found each safe by design or out of scope | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-crlf-fixtures | B | DECLINED | declined by prior ruling | Branch 9 declined-to-judge: the other 9 (history read per `coverage()`, non-canonical copies kept, trailing newline, `sudo` uid, `env` key position, commented TOML line, CRLF fixtures, `UPGRADING.md` date order, copies of a released file) — The reviewer found each safe by design or out of scope | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-upgrading-date-order | B | DECLINED | declined by prior ruling | Branch 9 declined-to-judge: the other 9 (history read per `coverage()`, non-canonical copies kept, trailing newline, `sudo` uid, `env` key position, commented TOML line, CRLF fixtures, `UPGRADING.md` date order, copies of a released file) — The reviewer found each safe by design or out of scope | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-released-file-copies | B | DECLINED | declined by prior ruling | Branch 9 declined-to-judge: the other 9 (history read per `coverage()`, non-canonical copies kept, trailing newline, `sudo` uid, `env` key position, commented TOML line, CRLF fixtures, `UPGRADING.md` date order, copies of a released file) — The reviewer found each safe by design or out of scope | Retain original ruling and citation; no implementation. Only original grouped review ruling cited; no fresh per-item verification claimed. | +| AB-row-20 | B | DONE | inherited done | EPIPE in `runWithInput` (seen on #261's CI) — #260 (`ad0170d97a2427c1fb79f179aa8632d13d372238`) | Confirm current behavior through final integration gates; no new ancestry claim. | +| AB-row-21 | B | V4 | conditional V4 pin item | AQE pin not planned by sync (conditional) — Item B.13, only if §2 step 2 shows it; PR #275; squash bb2e7efe88abd3cb2d73baf26530386549e3dc2e | Recheck §2 pin result; only apply if pin absent. No unconditional sync pin claim. V4 mapping is source-plan item/group-level; final reviewer should resolve exact unit evidence if required. | diff --git a/docs/archive/2026-09-29-windows-ci-evidence.md b/docs/archive/2026-09-29-windows-ci-evidence.md new file mode 100644 index 00000000..ff248962 --- /dev/null +++ b/docs/archive/2026-09-29-windows-ci-evidence.md @@ -0,0 +1,68 @@ +# Windows CI historical cohort and current timing gate + +Capture: 2026-09-29; compiled from retained GitHub job metadata, without new CI runs. +Documentation basis: `b5a0a946ae0aca2e1d435c78b12a98bc587d1266`. + +## Fixed historical cohort + +Preserve the ten before runs and the ten after runs, ending at run **36582013896**. These are fixed historical observations, not the current/latest ten runs. The complete observations appear below; retained controller JSON binds workload inputs and ancestry checks. + +| Cohort | Node | All-job median s | Noncancelled median s | Successful-job median s | Success / failure / cancelled | +| --- | --- | ---: | ---: | ---: | --- | +| Before | 22 | 649 | 659 | 659 | 9 / 0 / 1 | +| Before | 24 | 705.5 | 723 | 705.5 | 8 / 1 / 1 | +| Before | 26 | 875 | 888 | 888 | 9 / 0 / 1 | +| Fixed after | 22 | 221.5 | 221.5 | 240 | 7 / 3 / 0 | +| Fixed after | 24 | 225 | 225 | 215 | 7 / 3 / 0 | +| Fixed after | 26 | 210 | 210 | 210 | 7 / 3 / 0 | + +All-job medians in the earlier private draft are correct. Its “Median completed jobs” column mixes definitions: before excludes cancelled jobs but includes failure; after excludes failures. Rename/split the column as above. Cancelled observations are partial elapsed time, not completed workload performance. The after cohort includes three failed workflows and maximum Windows duration 359 s; preserve both. The earlier mixed after cohort containing pre-V1 run 36519742714 remains provenance, not a pure post-V1 comparison. Different source/workload/runner states prevent a controlled causal speedup claim. + +All ten fixed after heads independently passed local `git merge-base --is-ancestor ab2fc5cb5104c2cf260fb9e3ff1721bd3b074202 ` (exit 0). No object fetch was needed. + +## Separate current PR timing gate snapshot + +The approved source plan `docs/plans/2026-09-28-remediation-program-v2.md:261` says “three consecutive PR runs with every Windows leg under 5 minutes.” Selected the newest three distinct completed `pull_request` runs for `.github/workflows/ci.yml` in creation order, with no outcome or branch filtering. Latest attempt per run; all three are attempt 1. Snapshot: 2026-09-29T19:20:24Z, from a repository-wide inventory of 100 entries; full head hashes appear below. + +| Run (newest first) | Head | Windows 22 s | Windows 24 s | Windows 26 s | Workflow | +| --- | --- | ---: | ---: | ---: | --- | +| [36616775739](https://github.com/pacphi/agentic-kit/actions/runs/36616775739) | 09b198b6960c2dae14819d08729caa8b3794129b | 245 | 227 | 254 | success | +| [36614260309](https://github.com/pacphi/agentic-kit/actions/runs/36614260309) | fa0cb7b788791a90577a2dfd9f9ca61e07d0591e | 239 | 233 | 262 | success | +| [36612394617](https://github.com/pacphi/agentic-kit/actions/runs/36612394617) | 87234bdb2499200ce3fbe280894f6bb7ace74cde | 187 | **358** | 241 | **failure** | + +All nine Windows jobs completed successfully; all three heads pass the same V1 ancestry check. The third run failed on `test (macos-latest, node 22)`. Its Windows Node 24 duration independently violates the literal timing gate. Therefore this snapshot supports **two consecutive qualifying PR runs, not three**, and **two green workflows, not three**. Keep the failed third run. Refresh this separate gate after V7 PR CI; do not replace historical cohort membership. + +Raw per-run metadata and complete latest-attempt job lists are saved as `-run.json` and `-jobs.json`; total_count matched fetched job count for each. Job records bind URLs, start/end timestamps, duration, status, conclusion, attempt and head. Durations exclude queue time. + +API caveat: querying `actions/workflows/ci.yml/runs` returned a stale September 28 subset. The repository-wide `actions/runs?event=pull_request&status=completed&per_page=100` inventory correctly includes September 29 runs with workflow ID 313185208 and exact path `.github/workflows/ci.yml`; use that inventory plus attempt-specific job endpoints for refresh. Do not infer PR identity from the empty `pull_requests` arrays. + +## Complete fixed observations + +Cells retain seconds and conclusion for each Windows Node job. Full heads bind source; +job links retain timestamps and runner metadata. Cancelled values are partial elapsed times. + +| Cohort | Run | Source head | Node 22 | Node 24 | Node 26 | +| --- | --- | --- | --- | --- | --- | +| before | [36512746752](https://github.com/pacphi/agentic-kit/actions/runs/36512746752) | `ec7497179a2a6321ce2906b4346d5720ba50cba2` | [832 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36512746752/job/109228289572) | [588 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36512746752/job/109228289560) | [695 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36512746752/job/109228289704) | +| before | [36512738230](https://github.com/pacphi/agentic-kit/actions/runs/36512738230) | `bd8335748fbf117147a930322d3cc032009dfce2` | [604 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36512738230/job/109228262744) | [752 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36512738230/job/109228262957) | [968 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36512738230/job/109228263062) | +| before | [36512520521](https://github.com/pacphi/agentic-kit/actions/runs/36512520521) | `7936ca48942e4ed1b629641eb61dc0dfbcf12951` | [639 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36512520521/job/109227580342) | [591 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36512520521/job/109227580275) | [1027 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36512520521/job/109227580466) | +| before | [36507895935](https://github.com/pacphi/agentic-kit/actions/runs/36507895935) | `4d654d81dbaf59b475ff86d77e7a7ed3d10d4caa` | [755 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36507895935/job/109213354743) | [688 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36507895935/job/109213354777) | [776 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36507895935/job/109213354580) | +| before | [36507430463](https://github.com/pacphi/agentic-kit/actions/runs/36507430463) | `4f4f0201527952a99e4d5c165dd37c6a94cbc334` | [469 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36507430463/job/109211906632) | [512 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36507430463/job/109211906387) | [862 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36507430463/job/109211906551) | +| before | [36507067003](https://github.com/pacphi/agentic-kit/actions/runs/36507067003) | `174e5032e2dc36b8280941bc98593da18280e234` | [187 s, cancelled](https://github.com/pacphi/agentic-kit/actions/runs/36507067003/job/109210765385) | [157 s, cancelled](https://github.com/pacphi/agentic-kit/actions/runs/36507067003/job/109210765383) | [149 s, cancelled](https://github.com/pacphi/agentic-kit/actions/runs/36507067003/job/109210765403) | +| before | [36507043837](https://github.com/pacphi/agentic-kit/actions/runs/36507043837) | `b3761ba62f8b6253b3908a25c677a4ebbb565663` | [711 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36507043837/job/109210682350) | [723 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36507043837/job/109210682327) | [525 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36507043837/job/109210682409) | +| before | [36506687833](https://github.com/pacphi/agentic-kit/actions/runs/36506687833) | `2992c93c92ce1d8ea84f26283d6ccac2d146c8ee` | [607 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36506687833/job/109209580335) | [743 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36506687833/job/109209580181) | [1044 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36506687833/job/109209580209) | +| before | [36506455012](https://github.com/pacphi/agentic-kit/actions/runs/36506455012) | `e7cfe9ca4d49cb5e94fba698cd0e8376e0c829b7` | [659 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36506455012/job/109208858912) | [1413 s, failure](https://github.com/pacphi/agentic-kit/actions/runs/36506455012/job/109208858930) | [888 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36506455012/job/109208858967) | +| before | [36505126704](https://github.com/pacphi/agentic-kit/actions/runs/36505126704) | `c959db36a9c01e0a6454fb3386747bbe908971ea` | [795 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36505126704/job/109204728092) | [1243 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36505126704/job/109204728189) | [1088 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36505126704/job/109204728047) | +| after | [36582013896](https://github.com/pacphi/agentic-kit/actions/runs/36582013896) | `bb2e7efe88abd3cb2d73baf26530386549e3dc2e` | [247 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36582013896/job/109452341642) | [235 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36582013896/job/109452341600) | [214 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36582013896/job/109452341616) | +| after | [36581206489](https://github.com/pacphi/agentic-kit/actions/runs/36581206489) | `f19566adf2d0f0d7027bc4ea45f9f990e2b0355e` | [247 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36581206489/job/109449555718) | [174 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36581206489/job/109449556023) | [210 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36581206489/job/109449555782) | +| after | [36578593054](https://github.com/pacphi/agentic-kit/actions/runs/36578593054) | `989c5e563c8aa0527b1497fb64643f8277664c0a` | [214 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36578593054/job/109440525366) | [215 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36578593054/job/109440525563) | [200 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36578593054/job/109440525398) | +| after | [36577987831](https://github.com/pacphi/agentic-kit/actions/runs/36577987831) | `e8751224857f1301a350c8fa6e51dfc999c81206` | [225 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36577987831/job/109438467919) | [209 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36577987831/job/109438468373) | [222 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36577987831/job/109438468285) | +| after | [36573303236](https://github.com/pacphi/agentic-kit/actions/runs/36573303236) | `8430757488d1c154611d0f857d6c32db73e6fcca` | [240 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36573303236/job/109422417956) | [241 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36573303236/job/109422417926) | [220 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36573303236/job/109422417766) | +| after | [36573174471](https://github.com/pacphi/agentic-kit/actions/runs/36573174471) | `00a6faaa2622396309a231ef794628c856fc1071` | [209 s, failure](https://github.com/pacphi/agentic-kit/actions/runs/36573174471/job/109421970920) | [355 s, failure](https://github.com/pacphi/agentic-kit/actions/runs/36573174471/job/109421971175) | [184 s, failure](https://github.com/pacphi/agentic-kit/actions/runs/36573174471/job/109421971019) | +| after | [36572475641](https://github.com/pacphi/agentic-kit/actions/runs/36572475641) | `f440c1ec2e055f633438ea329ce629156439b3ba` | [214 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36572475641/job/109419613374) | [292 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36572475641/job/109419613443) | [195 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36572475641/job/109419613517) | +| after | [36569982241](https://github.com/pacphi/agentic-kit/actions/runs/36569982241) | `087a67154dccba79399900545574c72c86815041` | [218 s, failure](https://github.com/pacphi/agentic-kit/actions/runs/36569982241/job/109411273607) | [165 s, failure](https://github.com/pacphi/agentic-kit/actions/runs/36569982241/job/109411274140) | [187 s, failure](https://github.com/pacphi/agentic-kit/actions/runs/36569982241/job/109411274198) | +| after | [36569976640](https://github.com/pacphi/agentic-kit/actions/runs/36569976640) | `886b565dd5304f485af4c079c0c7c06aa83a13cd` | [283 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36569976640/job/109411256908) | [195 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36569976640/job/109411257316) | [210 s, success](https://github.com/pacphi/agentic-kit/actions/runs/36569976640/job/109411257237) | +| after | [36567912820](https://github.com/pacphi/agentic-kit/actions/runs/36567912820) | `ed8f4cb96836e1911aae9a89bbb3f015f033e115` | [197 s, failure](https://github.com/pacphi/agentic-kit/actions/runs/36567912820/job/109404334440) | [359 s, failure](https://github.com/pacphi/agentic-kit/actions/runs/36567912820/job/109404334368) | [231 s, failure](https://github.com/pacphi/agentic-kit/actions/runs/36567912820/job/109404334534) | + +Issue publication remains pending controller review; no posted table or closure is proved. +[Issue #262](https://github.com/pacphi/agentic-kit/issues/262) remains open. diff --git a/docs/archive/README.md b/docs/archive/README.md index 5394fe9c..5512a1fd 100644 --- a/docs/archive/README.md +++ b/docs/archive/README.md @@ -225,3 +225,15 @@ incident reports intentionally keep their original, now-dangling paths. | [2026-09-07-validation-maintenance-option-a.md](2026-09-07-validation-maintenance-option-a.md) | `docs/design/maintenance-overhaul/option-a-validation.md` | Maintenance overhaul option-a-validation.md | Dated verification evidence; does not prove the current source state or close open release gates. | | [2026-09-08-design-maintenance-project-metadata-adapters.md](2026-09-08-design-maintenance-project-metadata-adapters.md) | `docs/design/maintenance-overhaul/project-metadata-adapters.md` | Maintenance overhaul project-metadata-adapters.md | Live successor: [PROJECT-METADATA-ADAPTERS.md](../proposals/project-metadata-adapters.md); original snapshot retained as provenance. | | [2026-09-04-design-maintenance-overhaul-provider-and-action-policy.md](2026-09-04-design-maintenance-overhaul-provider-and-action-policy.md) | `docs/design/maintenance-overhaul/provider-and-action-policy.md` | Maintenance overhaul provider-and-action-policy.md | Frozen design snapshot; current behavior and remaining gates live in ADR-0048 and the maintained Maintenance guide. | + +## Added 2026-09-29 — remediation v2 evidence capture + +| File | Original location | What it was | Why it is historical | +| --- | --- | --- | --- | +| [2026-09-29-plan-remediation-v2-closeout.md](2026-09-29-plan-remediation-v2-closeout.md) | `docs/plans/2026-09-29-remediation-v2-closeout.md` | V7 closeout execution plan | Implementation and local gates completed; later PR, timing and human-review receipts remain separate. | +| [2026-09-29-aqe-released-artifact-receipt.md](2026-09-29-aqe-released-artifact-receipt.md) | Written here | AQE 3.14.5 released-artifact receipt (2026-09-29) | Dated capture; final main approval and operational gates remain. | +| [2026-09-29-remediation-v2-integration-evidence.md](2026-09-29-remediation-v2-integration-evidence.md) | Written here | Remediation v2 integration evidence | Dated capture; final main approval and operational gates remain. | +| [2026-09-29-remediation-v2-rulings.md](2026-09-29-remediation-v2-rulings.md) | Written here | Remediation v2 ordered execution rulings | Dated capture; final main approval and operational gates remain. | +| [2026-09-29-dashboard-paused-time-evidence.md](2026-09-29-dashboard-paused-time-evidence.md) | `.superpowers/sdd/2026-09-28-dashboard-refresh/paused-time-report.md` | V3 paused-time consumer proof | Body preserved from its pre-integration capture; later integration evidence is separate. | +| [2026-09-29-remediation-v2-scope-matrix.md](2026-09-29-remediation-v2-scope-matrix.md) | Written here | Remediation v2 scope reconciliation | Dated capture; final main approval and operational gates remain. | +| [2026-09-29-windows-ci-evidence.md](2026-09-29-windows-ci-evidence.md) | Written here | Windows CI historical cohort and current timing gate | Dated capture; final main approval and operational gates remain. | diff --git a/docs/host-support.md b/docs/host-support.md index fc445551..4448fdf5 100644 --- a/docs/host-support.md +++ b/docs/host-support.md @@ -209,9 +209,21 @@ and [exclusive platform initialization](https://github.com/proffesor-for-testing (the 3.14.4 recheck did not exercise `goap_execute`), [RVF recovery loop](https://github.com/proffesor-for-testing/agentic-qe/issues/574), and [local-embedding audit findings](https://github.com/proffesor-for-testing/agentic-qe/issues/615). -The newer 3.14.5 registry version does not establish that the repeated-init -settings rewrite reported in [AQE #778](https://github.com/proffesor-for-testing/agentic-qe/issues/778) -has been fixed; the disposable reproduction used 3.14.4. +A 2026-09-29 disposable probe of an npm-integrity-verified AQE 3.14.5 tarball found that +[#655](https://github.com/proffesor-for-testing/agentic-qe/issues/655)'s selected compact +guidance path emits a 315-byte owned sentinel and preserves a foreign `AGENTS.md` +prefix/suffix across two repeated calls. Full/none and complete receipt/platform +conformance remain unverified. +[#753](https://github.com/proffesor-for-testing/agentic-qe/issues/753)'s fresh native +macOS witness append produced valid 4001-row chains in one sequential and three +synchronized two-process rounds; only one concurrent round demonstrably interleaved. That +does not justify removing the kit's stray-store live-holder refusal or claim old-fork +repair, signature validation, import safety, or Windows/Linux behavior. +[#778](https://github.com/proffesor-for-testing/agentic-qe/issues/778) still reproduces +settings churn on 3.14.5 across three same-option init runs; its source fix merged after +this release was published. A later released-artifact retest is pending. See the [dated artifact +receipt](archive/2026-09-29-aqe-released-artifact-receipt.md) for source binding and +limits. The Codex QE-Court investigation in [agentic-kit #108](https://github.com/pacphi/agentic-kit/issues/108) is a diff --git a/docs/plans/2026-09-28-remediation-program-v2.md b/docs/plans/2026-09-28-remediation-program-v2.md index 4a6b526d..a69e52ad 100644 --- a/docs/plans/2026-09-28-remediation-program-v2.md +++ b/docs/plans/2026-09-28-remediation-program-v2.md @@ -10,11 +10,21 @@ Windows timing evidence. #251 is done, and the alpha.60 release commit is on `ma Publication and global installation were not verified in the execution-plan baseline. The historical decision batch and schedule below remain as scope/evidence references; the approved execution section governs wherever their authority or timing differs. -At the 2026-09-29 checkpoint, V3 #276, V5 #274, V4 B1 #273, V4 C3 #277, and -V4 C4 #278 had merged to `develop@989c5e56`. Remaining V4 implementation -units were accepted on an isolated branch; its final gates, whole-branch -review, PR CI and integration remained open. V6 and V7 still have work. The -final `develop` → `main` PR has not been opened. +At the 2026-09-29 closeout checkpoint, reviewed V1–V6 and main watcher reconciliation +are integrated through `develop@88ce597f444d487a34d9871a447cf8942f76f760` with all +13 develop CI checks passing. V7 guard and evidence units are independently accepted; +V7 shared integration, independent reviews and all nine local gates passed at +`795a0f7266de0bf6a04358359b75a1ad1b609e1d`; closeout PR CI and integration remain pending. +The [246-row scope matrix](../archive/2026-09-29-remediation-v2-scope-matrix.md), +[integration receipt](../archive/2026-09-29-remediation-v2-integration-evidence.md), +[ordered rulings](../archive/2026-09-29-remediation-v2-rulings.md), +[Windows evidence](../archive/2026-09-29-windows-ci-evidence.md) and +[AQE proof](../archive/2026-09-29-aqe-released-artifact-receipt.md) retain the limits. +The dated 19:20 UTC three-PR timing snapshot includes a 358-second Windows leg; +refresh this separate gate after closeout PR CI. +The final develop → main PR and human approval remain pending. This plan stays +active; no release, installation, real-store mutation, deletion or personal-memory +write follows from documentation completion. Attended time was not instrumented. ### Approved execution and precedence diff --git a/docs/plans/2026-09-28-remediation-v2-develop-execution.md b/docs/plans/2026-09-28-remediation-v2-develop-execution.md index c0d5c16e..c6ec6c33 100644 --- a/docs/plans/2026-09-28-remediation-v2-develop-execution.md +++ b/docs/plans/2026-09-28-remediation-v2-develop-execution.md @@ -7,20 +7,26 @@ ## Status **Active and confirmed** — the maintainer approved this execution plan on 2026-09-28. -Bootstrap reconciliation is in progress. Approval covers isolated implementation work, +Bootstrap and V1–V6 are integrated; V7 is in final validation. Approval covers isolated implementation work, unit commits, feature PRs into `develop`, and conditional squash integration; the final -`develop` → `main` PR remains open for human review. Releases, installation, real-data +`develop` → `main` PR will be left open for human review. Releases, installation, real-data operations and cleanup remain separately gated. Baseline inspected: `main@94890a00`. -**2026-09-29 execution update:** Bootstrap, V3 #276, V5 #274, V4 B1 #273, -V4 C3 #277, and V4 C4 #278 have merged to `develop@989c5e56`; their relevant -CI receipts passed. Remaining V4 implementation units are accepted on the -isolated branch, and its temporary C1 CI job has been removed. V4's ADR/C6 -alignment is underway. The final V4 full gates, whole-branch review, feature -PR CI including Windows, and integration are still pending. V6 and V7 remain -separate work. The final `develop` → `main` PR and operational gates have not -occurred. Historical baseline rows below describe planning-time state, not -current completion. +**2026-09-29 execution update:** Reviewed V1–V6 and main watcher reconciliation +are integrated through `develop@88ce597f444d487a34d9871a447cf8942f76f760` with all +13 develop CI checks passing. V7 guard and evidence units are independently accepted; +V7 shared integration, independent reviews and all nine local gates passed at +`795a0f7266de0bf6a04358359b75a1ad1b609e1d`; closeout PR CI and integration remain pending. +The [246-row scope matrix](../archive/2026-09-29-remediation-v2-scope-matrix.md), +[integration receipt](../archive/2026-09-29-remediation-v2-integration-evidence.md), +[ordered rulings](../archive/2026-09-29-remediation-v2-rulings.md), +[Windows evidence](../archive/2026-09-29-windows-ci-evidence.md) and +[AQE proof](../archive/2026-09-29-aqe-released-artifact-receipt.md) retain the limits. +The dated 19:20 UTC three-PR timing snapshot includes a 358-second Windows leg. +The controller will refresh that separate gate after closeout PR CI. +The final develop → main PR and human approval remain pending. This plan stays +active; no release, installation, real-store mutation, deletion or personal-memory +write follows from documentation completion. Attended time was not instrumented. **Goal:** Complete all remaining v2 remediation through feature PRs into `develop`, then open one aggregate `develop` → `main` PR for human review. @@ -79,30 +85,31 @@ The original program's "not yet started" status and main-only flow are stale. Re them in the bootstrap PR, retaining historical evidence rather than replaying completed work. ADR-0063 is **Accepted**, updated 2026-09-29, with CLI and V3 dashboard delivery -recorded; V4 A3 refines its offline retry limitation on the feature branch. +recorded; V4 A3's offline retry limitation was refined and integrated in #275. ADR-0048 is **Accepted**, updated 2026-09-28, with human evaluation gates outstanding; V3 records their approved v5 deferral. -ADR-0060 is **Proposed**, updated 2026-09-27, with discovery partly implemented; V6 implements -its approved remaining scope and records acceptance and the actual delivered subset. +ADR-0060 is **Accepted**, updated 2026-09-29, with its delivered V6 contracts recorded. +Dedicated Cowork storage remains uncovered under #257; observed provider metadata is not +network attestation. ## Phase A: establish the integration baseline Owner: controller. Dependencies: plan confirmation. Size: S, high confidence. -- [ ] Refresh GitHub and local refs; inventory worktrees, dirty paths, claims and open PRs. +- [x] Refresh GitHub and local refs; inventory worktrees, dirty paths, claims and open PRs. Preserve unrelated work. Check the ignored v1 reconciliation, N-5 list, reviews and ledger referenced by the spec are available; copy their relevant facts into scoped worker briefs. -- [ ] Create `develop` from verified current main in a dedicated integration worktree. +- [x] Create `develop` from verified current main in a dedicated integration worktree. Record base commit, user authority, controller and allowed actions in the execution ledger. -- [ ] Create a bootstrap feature branch from develop. Commit this plan and reconcile the +- [x] Create a bootstrap feature branch from develop. Commit this plan and reconcile the source program's Status, decisions, branch targets and definition of done. -- [ ] Add `develop` to `.github/workflows/ci.yml` push validation. Review other workflow +- [x] Add `develop` to `.github/workflows/ci.yml` push validation. Review other workflow filters and concurrency keys so develop integration is tested without enabling publishing. Check repository rules/check requirements; proposed changes to repository protection must be explicit. Enforce the same merge gate in the controller even if develop is unprotected. -- [ ] Validate docs layout, Markdown, links and workflow syntax; open bootstrap PR to develop. +- [x] Validate docs layout, Markdown, links and workflow syntax; open bootstrap PR to develop. Merge only after review and CI. Subsequent feature branches start at this integrated base. -- [ ] Reconcile V1/V2 completion and #262 run evidence. Capture source revision, run URL, +- [x] Reconcile V1/V2 completion and #262 run evidence. Capture source revision, run URL, OS/Node, job duration and result. Do not substitute a two-run observation for ten runs or claim the old three-consecutive-PR-run rule was historically met without its evidence. @@ -132,8 +139,8 @@ number must not overwrite a schema bump that has already landed. V6 Unit 21 implements static `statusLine` command classification for direct helper invocations and treats shell wrappers, inline programs, and chains as `custom`. -Its focused and unit gates passed; the unit commit is pending independent review. -V6's UI copy remains with V3 until that stream integrates. +It and the V6 UI are independently reviewed and integrated through #282. Usage schema +25 → 26 and the bounded accounting/coverage contracts are documented in the usage guide. ### Scheduling and team shape @@ -172,16 +179,16 @@ If routing or isolation cannot be demonstrated, report the limitation before usi ## Phase C: integrate and finish V6's UI -- [ ] Review every unit commit after its RED/GREEN evidence. Allow at most five task fix +- [x] Review every unit commit after its RED/GREEN evidence. Allow at most five task fix rounds, then raise the specific unresolved issue rather than looping indefinitely. -- [ ] Freeze the candidate branch, integrate the latest develop and resolve conflicts in +- [x] Freeze the candidate branch, integrate the latest develop and resolve conflicts in its own worktree with no other writer. Run required full gates and whole-branch review. -- [ ] Queue one feature PR merge at a time. Required evidence covers exact head/base SHAs; +- [x] Queue one feature PR merge at a time. Required evidence covers exact head/base SHAs; a changed base invalidates the previous integration result and requires appropriate reruns. -- [ ] Squash-merge only after required CI, including Windows, and independent review pass. +- [x] Squash-merge only after required CI, including Windows, and independent review pass. Verify the squash commit's tree equals the reviewed, develop-integrated feature tree. Run/check develop CI before releasing dependent streams. -- [ ] After V3 integrates, complete V6's labels across Usage, Projects, Maintenance and +- [x] After V3 integrates, complete V6's labels across Usage, Projects, Maintenance and Intelligence plus imported-copy counts in UI and `ak system`; keep these in the V6 PR. Task validation uses the narrowest meaningful tests first. Before V5 introduces `focus`, @@ -199,19 +206,26 @@ incur cost are excluded unless explicitly approved. ## Phase D: V7 close-out and final human review +This checkpoint records completed implementation and prepared issue drafts. The final +review PR will carry subsequent CI, timing and issue-action receipts; unchecked publication +gates below are deliberately not claimed ahead of those actions. A scheduled attempt at +`94890a00` returned seven HTTP 503 responses without parsed session URLs; successful routine +execution remains unverified. The later watcher fixes were validated synthetically and in +read-only PR preview, with no live trigger by this program. + Dependencies: V3–V6 merged and develop green. Branch: `chore/v2-close-out`. Size: S/M. -- [ ] Apply the tree-wide comment-label guard after competing code edits finish. -- [ ] Reconcile every original Appendix A/B row to an exact PR/evidence record, explicit +- [x] Apply the tree-wide comment-label guard after competing code edits finish. +- [x] Reconcile every original Appendix A/B row to an exact PR/evidence record, explicit declined/superseded ruling, named open issue, or approved post-merge operation. No row disappears because V1/V2 had already landed. -- [ ] Complete #262's ten-run before/after analysis or keep its evidence gate visibly open. +- [x] Complete #262's ten-run before/after analysis or keep its evidence gate visibly open. Classify source/runtime changes in samples; never cherry-pick green runs into a false series. -- [ ] Verify upstream watch behavior on the applicable branch/runtime. A first real release +- [x] Verify upstream watch behavior on the applicable branch/runtime. A first real release dispatch may remain observation-pending until an actual release event; do not fabricate one. -- [ ] Prepare issue updates (#239/#240/#254/#257/#262) with evidence. Distinguish integrated +- [x] Prepare issue updates (#239/#240/#254/#257/#262) with evidence. Distinguish integrated on develop from shipped on main; close only when the issue's own completion condition holds. -- [ ] Run docs alignment and archive completed branch plans with `scripts/docs-relocate.mjs`. +- [x] Run docs alignment and archive completed branch plans with `scripts/docs-relocate.mjs`. Keep this program's plan active while main approval and operational work remain pending. - [ ] Open final `develop` → `main` PR with scope/decision matrix, feature PRs and unit commit mappings, exact final source, tests, Windows evidence, release notes and known limitations. diff --git a/package.json b/package.json index 6eb0778b..95e6c309 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "scripts": { "test": "node scripts/run-tests.mjs unit", "test:ui": "node scripts/run-tests.mjs ui", + "test:quality": "node scripts/run-tests.mjs focus tests/quality/comment-label-guard.test.mjs", "test:surface": "node --test tests/kit/dispatch-surface.test.mjs", "test:aqe-external-provider-live": "node --test tests/live/aqe-external-provider-transport.test.mjs", "test:aqe-stop-hook-live": "AK_AQE_CONFORMANCE=1 node --test tests/live/aqe-stop-hook-conformance.test.mjs", diff --git a/src/commands/status/sections/ruflo-components.mjs b/src/commands/status/sections/ruflo-components.mjs index ee5270eb..c0d2c50a 100644 --- a/src/commands/status/sections/ruflo-components.mjs +++ b/src/commands/status/sections/ruflo-components.mjs @@ -1,7 +1,7 @@ // ADR-0058 §7: every row carries state + meaning + action, never a bare label. // Evidence comes from the cache; `ak status --refresh` re-probes first. The // projection itself (Claude env conflicts, policy state, missing hosts) is -// shared with Task 10's dashboard through rufloComponentsPayload — this +// shared with the dashboard through rufloComponentsPayload — this // section never re-implements it (controller ruling 3). import { installedVersion } from '../../../lib/versions.mjs'; import { row } from '../row.mjs'; diff --git a/src/lib/aqe-store-merge.mjs b/src/lib/aqe-store-merge.mjs index 22fc12af..35ea1a4c 100644 --- a/src/lib/aqe-store-merge.mjs +++ b/src/lib/aqe-store-merge.mjs @@ -27,7 +27,7 @@ // 3 backup VACUUM INTO /backup/root-memory.db. // 4 rehearse on a copy of that backup: per stray copy, delete its // witness_chain rows (appended unlinked they break the root's -// audit chain; Branch 5 Task 0.2, agentic-qe#759) and the starter patterns the +// audit chain; agentic-qe#759) and the starter patterns the // root does not hold, with the rows that must reference them (a // *pattern_id column that is NOT NULL or a foreign key to // qe_patterns: embeddings, usage, null results, lineage, @@ -39,7 +39,7 @@ // must equal the preview's union by (name, qe_domain, // pattern_type) and experience id; integrity and foreign keys // clean. AQE 3.14.4 skips shared patterns as conflicts without -// pruning (Task 0.2), so no agentic-qe#736 prune step runs. +// pruning, so no agentic-qe#736 prune step runs. // The archived strays keep their starter patterns. // 5 apply writers again, and every store must look as it did when the // preview copied it (fingerprint: size and mtime of each file; the diff --git a/src/lib/dashboard-server.mjs b/src/lib/dashboard-server.mjs index b81cf2ee..119daac9 100644 --- a/src/lib/dashboard-server.mjs +++ b/src/lib/dashboard-server.mjs @@ -2032,7 +2032,7 @@ export function startDashboard({ // filesystem call, so the 400 happens here and nowhere deeper. Two // shapes are accepted: a plain id (unchanged — parseSessionId/ // resolvesInsideRoot, exactly as before), or a namespaced - // `/` Claude subagent id (Task 5 round 2), gated by + // `/` Claude subagent id, gated by // its own dedicated parse+containment pair rather than loosening // parseSessionId/resolvesInsideRoot — those two also gate the // live-playback/SSE routes, which this fix does not touch. diff --git a/src/lib/dashboard/client/usage-rhythm.mjs b/src/lib/dashboard/client/usage-rhythm.mjs index 49288220..310ff429 100644 --- a/src/lib/dashboard/client/usage-rhythm.mjs +++ b/src/lib/dashboard/client/usage-rhythm.mjs @@ -3,7 +3,7 @@ // override comment for why this directory isn't run through the node lib. // Pure string-building chart primitives for the Usage tab's rhythm/mode -// panels (Task 9 wires these exports into usage.mjs). No DOM access, no +// panels (usage.mjs wires these exports). No DOM access, no // fetch, no module-level state — every function takes plain data in and // returns markup out. `esc` is copied from ./groups.mjs's real implementation // rather than imported: bootstrap.mjs's own `esc` is only a build-time diff --git a/src/lib/dashboard/session-security.mjs b/src/lib/dashboard/session-security.mjs index 8145c150..299e1844 100644 --- a/src/lib/dashboard/session-security.mjs +++ b/src/lib/dashboard/session-security.mjs @@ -35,7 +35,7 @@ export function resolvesInsideRoot(root, id) { * Claude Code writes every one as `agent-`, or `agent--` * when the Task tool call carried a name (the Agent tool's own `name` * parameter, charset [A-Za-z0-9_-]). A survey of this machine's real - * corpus (404 files, Task 5 round 2) found most stems carry a name — a + * corpus (404 files) found most stems carry a name — a * hex-only pattern would leave most subagent sessions still unopenable. * '/', '.', and '\' are simply not in this charset, so no separate * traversal check is needed for this segment beyond the charset itself. */ diff --git a/src/lib/hook-audit/agentic-dependency-constraints.json b/src/lib/hook-audit/agentic-dependency-constraints.json index bac4266e..d1310d2a 100644 --- a/src/lib/hook-audit/agentic-dependency-constraints.json +++ b/src/lib/hook-audit/agentic-dependency-constraints.json @@ -682,7 +682,7 @@ "doneWhen": { "state": "closed-completed", "release": { "channel": "npm", "name": "agentic-qe", "minVersion": "3.14.1" } }, "mapping": "mapped", "kitImpact": { "refs": ["constraint agentic-qe-3.14.0-codex-guidance-policy"], "files": [] }, - "adjustment": "Keep constraint agentic-qe-3.14.0-codex-guidance-policy: the 2026-09-27 conformance on 3.14.4 failed. On each Agentic-QE release run AK_AQE_CONFORMANCE=1 node --test tests/live/aqe-codex-guidance-conformance.test.mjs; sunset the constraint when it passes without its todo.", + "adjustment": "Keep constraint agentic-qe-3.14.0-codex-guidance-policy. The released 3.14.5 artifact passed the selected compact owned-byte and foreign-content preservation check, but full/none modes, all receipt and platform checks, and the complete ak conformance remain unverified. Run the existing opt-in full conformance on a future released artifact before any sunset.", "status": "released", "constraintIds": ["agentic-qe-3.14.0-codex-guidance-policy"], "history": [ @@ -690,7 +690,8 @@ { "date": "2026-09-06", "event": "closed", "note": "completed" }, { "date": "2026-09-26", "event": "registered" }, { "date": "2026-09-26", "event": "released", "note": "fix first released in 3.14.1; the ak change is pending" }, - { "date": "2026-09-27", "event": "reviewed", "note": "Branch 5 conformance on ak's path (full aqe init --auto --with-codex --codex-guidance full|compact|none through the aqe command, agentic-qe 3.14.4, sandboxed): FAIL, constraint kept. full: no block when AGENTS.md exists and platform verify reports detected=none; compact and none select correctly and are idempotent, but compact adds 6 bytes outside its sentinel; through the aqe bin resolvePackageRoot() misses the package, so no Codex hooks or skills install; platform verify exits 0 on failed checks; platform setup codex: Module not found in bundle. Evidence: Branch 5 report b5-655-conformance; upstream issue drafted, not filed" } + { "date": "2026-09-27", "event": "reviewed", "note": "Branch 5 conformance on ak's path (full aqe init --auto --with-codex --codex-guidance full|compact|none through the aqe command, agentic-qe 3.14.4, sandboxed): FAIL, constraint kept. full: no block when AGENTS.md exists and platform verify reports detected=none; compact and none select correctly and are idempotent, but compact adds 6 bytes outside its sentinel; through the aqe bin resolvePackageRoot() misses the package, so no Codex hooks or skills install; platform verify exits 0 on failed checks; platform setup codex: Module not found in bundle. Evidence: Branch 5 report b5-655-conformance; upstream issue drafted, not filed" }, + { "date": "2026-09-29", "event": "reviewed", "note": "Private source-bound agentic-qe 3.14.5 tarball proof: selected compact AGENTS sentinel is 315 bytes; separate foreign prefix/suffix survives two same-option public init calls with bytes and mtime stable between calls 1/2. Full/none, complete receipts and all-platform conformance unverified; constraint retained. Evidence: docs/archive/2026-09-29-aqe-released-artifact-receipt.md." } ] }, { @@ -2624,18 +2625,19 @@ "kind": "issue", "title": "Witness chain forks when two processes append at once. `append()` reads the tail and inserts it without a transaction, so `aqe audit verify --chain audit` reports BROKEN.", "dependency": "agentic-qe", - "doneWhen": { "state": "closed-completed", "release": { "channel": "npm", "name": "agentic-qe", "minVersion": null } }, + "doneWhen": { "state": "closed-completed", "release": { "channel": "npm", "name": "agentic-qe", "minVersion": "3.14.5" } }, "mapping": "mapped", "kitImpact": {"refs": ["investigation aqe-audit-chain", "Branch 5: stray-store merge runs with no other AQE writer"], "files": ["src/lib/aqe-store-holders.mjs", "src/lib/aqe-store-merge.mjs"]}, - "adjustment": "Once a released agentic-qe appends to the witness chain atomically, ak no longer needs to stop other AQE writers before merging stray stores.", - "status": "fixed-unreleased", + "adjustment": "Released agentic-qe 3.14.5 passed a native macOS fresh WAL chain append check: one sequential and three two-process rounds each yielded 4001 valid rows, with only one concurrent round demonstrably interleaved. Keep ak's live-holder refusal around stray-store backup, import and archive; the probe does not establish old-fork repair, import splice safety, live host behavior, signatures, or Windows/Linux conformance.", + "status": "released", "constraintIds": [], "history": [ { "date": "2026-09-27", "event": "filed" }, { "date": "2026-09-27", "event": "registered" }, { "date": "2026-09-27", "event": "reviewed", "note": "Branch 5: ak x aqe-store merge finds the processes holding the root or a stray store by open file (lsof, /proc; the host-session census on Windows) before its backup, its real import and its archive, and refuses while any holds one; there is no force" }, { "date": "2026-09-27", "event": "commented", "note": "still reproduces on 3.14.4, with impact; refs agentic-qe#759 (issuecomment-5863202746)" }, - { "date": "2026-09-28", "event": "closed", "note": "completed by PR 764; no release contains it yet" } + { "date": "2026-09-28", "event": "closed", "note": "completed by PR 764; no release contains it yet" }, + { "date": "2026-09-29", "event": "released", "note": "npm-integrity-verified 3.14.5 tarball, source-bound native macOS fresh-chain append proof: immediate transaction; 4001 valid rows in sequential control and three synchronized two-process rounds; only round 1 demonstrably interleaved. No old-fork repair, signed-entry, import-splice or live-holder removal claim. Evidence: docs/archive/2026-09-29-aqe-released-artifact-receipt.md." } ] }, { @@ -2764,12 +2766,14 @@ "doneWhen": { "state": "closed-completed", "release": { "channel": "npm", "name": "agentic-qe", "minVersion": null } }, "mapping": "mapped", "kitImpact": { "refs": ["ak setup invokes aqe init and can inherit its repeat-run settings churn"], "files": [] }, - "adjustment": "AQE 3.14.4 repeated init rewrites .claude/settings.json, changes domain and learning defaults on the second run, and creates a backup; CLAUDE.md and AGENTS.md hashes and mtimes stayed unchanged. Keep setup convergence claims bounded until a released fix is verified; 3.14.5 behavior has not been established.", - "status": "watching", + "adjustment": "Released AQE 3.14.5 still rewrites .claude/settings.json on all three same-option public init runs of an unchanged minimal project; run 2 also creates a backup and changes domain/learning defaults. AGENTS.md and CLAUDE.md remain stable after run 1. PR #783 merged after the 3.14.5 publication; wait for a later released artifact and repeat exact conformance before claiming setup convergence or setting a minimum fixed version.", + "status": "fixed-unreleased", "constraintIds": [], "history": [ { "date": "2026-09-29", "event": "filed", "note": "approved exact draft posted; remote title and body match receipt" }, - { "date": "2026-09-29", "event": "registered", "note": "3.14.4 disposable project repro: settings changed on all three runs; guidance hashes and mtimes did not" } + { "date": "2026-09-29", "event": "registered", "note": "3.14.4 disposable project repro: settings changed on all three runs; guidance hashes and mtimes did not" }, + { "date": "2026-09-29", "event": "closed", "note": "upstream completed via PR #783; merge commit 63d3deb dated 13:05:19 UTC, after npm 3.14.5 publication at 10:08:33 UTC" }, + { "date": "2026-09-29", "event": "reviewed", "note": "Source-bound released 3.14.5 disposable public init still churns settings on each of three same-option runs, with backup and default changes on run 2. Subsequent release conformance unverified; global 3.14.4 metadata unchanged. Evidence: docs/archive/2026-09-29-aqe-released-artifact-receipt.md." } ] } ] diff --git a/src/lib/ruflo-components/snapshot.mjs b/src/lib/ruflo-components/snapshot.mjs index 2ab54c6d..69d92b09 100644 --- a/src/lib/ruflo-components/snapshot.mjs +++ b/src/lib/ruflo-components/snapshot.mjs @@ -230,7 +230,7 @@ export function componentSnapshot({ cfg, rufloVersion, evidence, projection, now } /** Controller ruling 3: the ONE read-only projection every surface (status's own - * section, and Task 10's dashboard) builds a snapshot from — so none of them + * section, and the dashboard) builds a snapshot from — so none of them * re-implements it. Never spawns anything and never writes: the Claude env read * is a dry run, and the evidence comes from whatever is already cached (a * caller wanting fresher evidence collects + writes it BEFORE calling this, diff --git a/src/lib/usage-parsers.mjs b/src/lib/usage-parsers.mjs index 5be14c64..9ce3614d 100644 --- a/src/lib/usage-parsers.mjs +++ b/src/lib/usage-parsers.mjs @@ -1114,7 +1114,7 @@ function handleCodexUserMessage(rec, turns, titleState, latState, decoded, ms, w rec.prompts++; if (!titleState.firstPrompt) titleState.firstPrompt = text; // Opens the prompt→agent-message latency window; closed by the first - // following handleCodexAssistantMessage (mirrors Claude's latState, Task 3). + // following handleCodexAssistantMessage (mirrors Claude's latState). latState.pendingPromptMs = ms; // Codex's kind is exactly this gate's verdict (see the turn row below), so // a gated message contributes no fingerprint — the layer sits behind the diff --git a/tests/dashboard.test.cjs b/tests/dashboard.test.cjs index eaefbe19..0a063c01 100644 --- a/tests/dashboard.test.cjs +++ b/tests/dashboard.test.cjs @@ -503,7 +503,7 @@ async function main() { assert(resolvesInsideRoot(root, path.resolve(path.sep, 'etc', 'passwd')) === false, 'an absolute path escapes the root'); }); - // ── namespaced subagent session ids (Task 5 round 2) ── + // ── namespaced subagent session ids ── await test('parseNamespacedSessionId accepts /, decodes percent-encoding, and parses named subagents', async () => { const r = parseNamespacedSessionId('fc8c05e0-c311-456e-a226-6dac4279199b/agent-a2fc4593254cc01b9'); assert(r && r.parentId === 'fc8c05e0-c311-456e-a226-6dac4279199b' && r.stem === 'agent-a2fc4593254cc01b9', @@ -749,7 +749,7 @@ async function main() { 'readSession must NOT be called for any hostile id — got ' + (spy.calls.readSession.length - before) + ' call(s)'); }); - // ── namespaced subagent session ids reach readSession end-to-end (Task 5 round 2) ── + // ── namespaced subagent session ids reach readSession end-to-end ── await test('GET /api/session/:parentId/:stem → a namespaced subagent id reaches readSession end-to-end', async () => { const before = spy.calls.readSession.length; const r = await get(usageSrv.url + 'api/session/parent-uuid/agent-a2fc4593254cc01b9', usageSrv.token); diff --git a/tests/helpers/comment-label-guard.mjs b/tests/helpers/comment-label-guard.mjs new file mode 100644 index 00000000..db51e6e1 --- /dev/null +++ b/tests/helpers/comment-label-guard.mjs @@ -0,0 +1,84 @@ +import { Linter } from 'eslint'; + +const labels = /\bTask \d+(?:\.\d+)?[a-z]?\b|\b[Ff]ix round \d|final-review fix|\bBranch \d+[a-z]?\b[^.\n]{0,20}\bTask\b/; +const testNames = new Set(['test', 'it', 'describe', 'suite']); + +const modifiers = new Set(['only', 'skip', 'todo', 'concurrent', 'sequential', 'failing']); +const memberName = expression => expression.computed ? expression.property.value : expression.property.name; + +// Static contract: known declaration names/modifiers, each(table)(title), and +// first callback parameters of direct declarations (never each table data). +// An unbound `t.test` +// is accepted as the conventional context form; bound receivers must resolve +// to a declaration callback parameter. Runtime aliases are not evaluated. +function isTestContext(receiver, sourceCode) { + if (receiver.type !== 'Identifier') return false; + let scope = sourceCode.getScope(receiver); + while (scope) { + const variable = scope.set.get(receiver.name); + if (variable) { + return variable.defs.some(definition => { + const fn = definition.node; + const call = fn.parent; + return definition.type === 'Parameter' && fn.params[0] === definition.name + && call?.type === 'CallExpression' && call.arguments.includes(fn) + && isTestCall(call.callee, sourceCode, false); + }); + } + scope = scope.upper; + } + return receiver.name === 't'; +} + +function isTestCall(expression, sourceCode, allowEach = true) { + if (expression.type === 'Identifier') return testNames.has(expression.name); + if (expression.type === 'MemberExpression') { + const name = memberName(expression); + if (name === 'test') return isTestContext(expression.object, sourceCode); + return modifiers.has(name) && isTestCall(expression.object, sourceCode, allowEach); + } + return allowEach && expression.type === 'CallExpression' + && expression.callee.type === 'MemberExpression' + && memberName(expression.callee) === 'each' + && isTestCall(expression.callee.object, sourceCode); +} + +/** Parse real comments and static test titles through the existing lint parser. + * Strings, regex literals and template raw text stay opaque; syntax errors fail + * closed rather than quietly exempting malformed source from the guard. + */ +export function inspectCommentLabels(source, file = 'fixture.mjs') { + const findings = []; + const add = (text, node, kind) => { + const match = labels.exec(text); + if (match) findings.push({ + line: node.loc.start.line + text.slice(0, match.index).split('\n').length - 1, + kind, text: text.trim(), start: node.range[0], end: node.range[1], + }); + }; + const rule = { + create(context) { + return { + Program() { + for (const comment of context.sourceCode.getAllComments()) add(comment.value, comment, 'comment'); + }, + CallExpression(node) { + if (!isTestCall(node.callee, context.sourceCode)) return; + const title = node.arguments[0]; + if (title?.type === 'Literal' && typeof title.value === 'string') add(title.value, title, 'test title'); + if (title?.type === 'TemplateLiteral') { + for (const part of title.quasis) add(part.value.cooked ?? part.value.raw, part, 'test title'); + } + }, + }; + }, + }; + const messages = new Linter().verify(source, [{ + files: ['**/*.{js,mjs,cjs}'], + languageOptions: { ecmaVersion: 'latest', sourceType: file.endsWith('.cjs') ? 'commonjs' : 'module' }, + plugins: { labels: { rules: { references: rule } } }, + rules: { 'labels/references': 'error' }, + }], { filename: file, allowInlineConfig: false, reportUnusedDisableDirectives: false }); + if (messages.length) throw new Error(`Cannot parse ${file}: ${messages.map(message => `${message.line}:${message.message}`).join('; ')}`); + return findings.sort((a, b) => a.start - b.start); +} diff --git a/tests/helpers/spawn-guard.mjs b/tests/helpers/spawn-guard.mjs index e783badd..e06cdfea 100644 --- a/tests/helpers/spawn-guard.mjs +++ b/tests/helpers/spawn-guard.mjs @@ -1,7 +1,7 @@ // Test-only spawn ledger, meant to be loaded via `node --import`. Side-effect // free unless AK_SPAWN_LEDGER_FILE is set, so it is always safe to preload. // -// Branch 6a Task 8a (Ruling C): an earlier plan wanted a spawn-ledger seam +// A spawn ledger must cover every spawn path: a proposed seam // inside src/lib/exec.mjs's run(), but a repo-wide `grep -rln "child_process" // src/` found ~30 files that spawn directly, not through exec.mjs. A ledger // there would under-count and let a zero-spawn test pass vacuously on any @@ -41,8 +41,8 @@ if (ledgerFile) { } }; - // The brief's four forms, plus execSync/fork: empirically (see the Task 8a - // report) `exec` already routes through `execFile` internally, so it needs + // Wrap spawn, execFile, execFileSync, spawnSync, execSync and fork. + // `exec` already routes through `execFile` internally, so it needs // no separate wrapper, but `execSync` and `fork` call module-internal // implementations that bypass the four-function wrap even after // syncBuiltinESMExports() — confirmed nothing under src/ calls either diff --git a/tests/kit/ak-launcher-evidence.test.mjs b/tests/kit/ak-launcher-evidence.test.mjs index 440bbdb7..e5cfc7bb 100644 --- a/tests/kit/ak-launcher-evidence.test.mjs +++ b/tests/kit/ak-launcher-evidence.test.mjs @@ -1,4 +1,4 @@ -// Branch 6a Task 7: claudeLauncherUnavailable() (src/lib/mcp.mjs) stops +// claudeLauncherUnavailable() (src/lib/mcp.mjs) stops // spawning `which ak` (and, when ak is present, `ak x ruflo-mcp --help`) on // every plain `ak status` call where sync's register() would run — it reuses // fresh evidence instead (kind 'ak-launcher', id 'machine', 6h TTL, diff --git a/tests/kit/codex-mcp-convergence.test.mjs b/tests/kit/codex-mcp-convergence.test.mjs index e5134edd..ae5e4b3c 100644 --- a/tests/kit/codex-mcp-convergence.test.mjs +++ b/tests/kit/codex-mcp-convergence.test.mjs @@ -323,7 +323,7 @@ test('the kit-managed browser env child is folded into the placeholder and Codex assert.equal(fs.readFileSync(file, 'utf8'), source, 'a converged placeholder is left alone'); }); -// F4 (Branch 3 fix round 2): Codex's Claude import copies Claude Code's +// F4: Codex's Claude import copies Claude Code's // claude-flow entry by name. Since B3-D1 that entry is ak's launcher in // Claude mode, so a machine without the placeholder gains a second Ruflo // transport in Codex. ak recognizes its own launcher form under that name diff --git a/tests/kit/daemon-sweep-evidence.test.mjs b/tests/kit/daemon-sweep-evidence.test.mjs index 7f29d1ad..d55d0f7a 100644 --- a/tests/kit/daemon-sweep-evidence.test.mjs +++ b/tests/kit/daemon-sweep-evidence.test.mjs @@ -1,4 +1,4 @@ -// Branch 6a Task 7: listDaemons()'s processSweep() (src/lib/daemons.mjs) +// listDaemons()'s processSweep() (src/lib/daemons.mjs) // stops spawning `ps -eo pid=,args=` (or the Windows CIM query) on every // plain `ak status` call — it reuses fresh evidence instead (kind // 'daemon-sweep', id 'machine', 5-minute TTL: this is live process-table @@ -8,7 +8,7 @@ // collect() explicitly threads refresh:false from ctx. // // processSweep has no injectable runner, so — mirroring -// tests/kit/host-setup-evidence.test.mjs's Task 5 precedent — these tests +// tests/kit/host-setup-evidence.test.mjs's state-isolation precedent — these tests // break PATH so a real `ps` ENOENTs deterministically (run() never throws; // it degrades to an empty result), then seed cached evidence with a marker // entry no real sweep could ever produce. Getting the marker back proves the diff --git a/tests/kit/daemons-status.test.mjs b/tests/kit/daemons-status.test.mjs index 455c7253..fcbdc1dd 100644 --- a/tests/kit/daemons-status.test.mjs +++ b/tests/kit/daemons-status.test.mjs @@ -29,8 +29,8 @@ test('no project memory: none running stays ok', async (t) => { [{ subsystem: 'daemons', level: 'ok', message: 'none running', fix: null, repair: null }]); }); -// Task 7: collect() threads refresh/record/source into the listDaemons() -// call (gating processSweep's `ps` spawn), mirroring hosts.mjs's Task 5 +// collect() threads refresh/record/source into the listDaemons() +// call (gating processSweep's `ps` spawn), mirroring hosts.mjs's evidence-cache // precedent, so a plain `ak status` stays cache-first while `--refresh` // forces a fresh sweep. test('collect() threads refresh/record/source into listDaemons, defaulting to a plain-status-shaped call', async (t) => { @@ -143,7 +143,7 @@ test('no deferral row without a live daemon for this project', async (t) => { assert.equal(deferral(await collect(cwd, { now: NOW, platform: 'darwin' })), undefined); }); -// ── ak-managed daemon settings drift (Task 2.2) ──────────────────────────── +// ── ak-managed daemon settings drift ──────────────────────────── function rufloRepo(t, { autoStart } = {}) { const cwd = project(t, { autoStart }); fs.mkdirSync(path.join(cwd, '.git')); diff --git a/tests/kit/dashboard-ruflo-components.test.mjs b/tests/kit/dashboard-ruflo-components.test.mjs index 0b9450f5..bb84fa9c 100644 --- a/tests/kit/dashboard-ruflo-components.test.mjs +++ b/tests/kit/dashboard-ruflo-components.test.mjs @@ -1,6 +1,6 @@ -// Task 10: dashboard panel + About chip for ruflo components (ADR-0058). +// dashboard panel + About chip for ruflo components (ADR-0058). // Payload logic (rufloComponentsPayload) is already covered by -// tests/kit/ruflo-components-snapshot.test.mjs (Task 9's shared projection — +// tests/kit/ruflo-components-snapshot.test.mjs (the shared projection — // controller ruling 1), so this file covers only the dashboard-specific // surface: the route registration and the client bundle renderer. import { test } from 'node:test'; diff --git a/tests/kit/dashboard-status-cost.test.mjs b/tests/kit/dashboard-status-cost.test.mjs index 50fcdb85..e902f40d 100644 --- a/tests/kit/dashboard-status-cost.test.mjs +++ b/tests/kit/dashboard-status-cost.test.mjs @@ -1,7 +1,7 @@ -// Branch 6a Task 9 / Task 8b — the Review Focus item this whole branch was -// scoped around: "Dashboard cost. The 30-second poll must not start more -// processes or transfer more data than before the branch." Task 7 made a -// warm-cache collect() spawn-free; this task made dashboard-server.mjs call +// The dashboard cost regression budget is the requirement this test is +// built around: "Dashboard cost. The 30-second poll must not start more +// processes or transfer more data than before the branch." Evidence caching made a +// warm-cache collect() spawn-free; dashboard-server.mjs calls // it in process instead of shelling out. This file is the end-to-end proof // that swap actually delivered the promised cost property, simulating two // 30s poll ticks against a running server (not a bare collect() call): @@ -56,7 +56,7 @@ test('two 30s-poll-tick /api/status requests: the second starts no processes and const { port, token } = started; // Tick 1: a cold-cache poll. Every real dashboard's FIRST poll after - // startup pays this cost — Ruling A (Task 7) says a cold cache probes at + // startup pays this cost — a cold cache probes at // least once per gated kind, so this is not itself under budget. const first = await getJson(port, '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/api/status', token); assert.equal(first.status, 200); diff --git a/tests/kit/dashboard-status-inprocess.test.mjs b/tests/kit/dashboard-status-inprocess.test.mjs index 72c901f1..ae36458e 100644 --- a/tests/kit/dashboard-status-inprocess.test.mjs +++ b/tests/kit/dashboard-status-inprocess.test.mjs @@ -1,10 +1,10 @@ -// Branch 6a Task 9: dashboard-server.mjs's default /api/status provider now +// dashboard-server.mjs's default /api/status provider now // calls status.mjs's own collect() in process instead of shelling out to // `node bin/agentic-kit.mjs status --json`. This file proves the swap kept // both properties that mattered about the old subprocess boundary: // // 1. A warm-cache request spawns nothing (tests/fixtures/status-zero-spawn-child.mjs -// already proved this for a bare collect() call — Task 8a/Task 7; this +// already proved this for a bare collect() call; this harness // proves it for a REQUEST ARRIVING AT A RUNNING SERVER, the actual shape // the dashboard's 30s poll exercises). // 2. The JSON /api/status now COMPUTES has the same {overall, rows} content diff --git a/tests/kit/dashboard-usage-telemetry.test.mjs b/tests/kit/dashboard-usage-telemetry.test.mjs index b1b147cb..b69a907e 100644 --- a/tests/kit/dashboard-usage-telemetry.test.mjs +++ b/tests/kit/dashboard-usage-telemetry.test.mjs @@ -159,8 +159,8 @@ function spyReadIndex(records, calls) { test('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/api/usage payload carries rhythm, mode, provider and a previous-window projection', async () => { const calls = []; - // Mirrors usage-index.mjs's corrected buildIndex/scan contract (Task 7 - // ruling B): `aggregate` always sees the DISPLAY cutoff, and `previous` + // Mirrors usage-index.mjs's corrected buildIndex/scan contract: + // `aggregate` always sees the DISPLAY cutoff, and `previous` // rides through from the caller's own options unchanged. const usage = { readIndex: spyReadIndex(FIXTURE_RECORDS, calls) }; const srv = await startDashboard({ @@ -799,11 +799,11 @@ test('the whole-history chip ships hidden, for the one view that needs it', () = assert.match(JS, /usage-days-all/, 'and the client actually toggles it'); }); -// ── usage-rhythm.mjs: rhythm/mode chart primitives (Task 8) ──────────────── +// ── usage-rhythm.mjs: rhythm/mode chart primitives ──────────────── // // These are pure string builders, imported directly here — real ESM on disk, // not read through the concatenated client.mjs bundle (that concatenation is -// exercised separately, above, via the `JS` import). Task 9 wires these +// exercised separately, above, via the `JS` import). The panels wire these // exports into usage.mjs's panels. test('deltaChip renders an up arrow and a rounded percent for a positive change', () => { @@ -851,7 +851,7 @@ test('histogram renders a marker and its label, with the bars emitted after the // geometry test below for the CSS half of this: .hist-bars must ALSO be // positioned for "markers first" to actually put bars on top). This only // asserts the half a string test can honestly observe: markup order. - // Task 9's screenshot verification is what confirms the rendered result. + // Screenshot verification is what confirms the rendered result. const html = histogram({ counts: [1, 5, 2], labels: ['<1s', '1-3s', '3s+'], markers: [{ atPct: 50, label: 'p50' }] }); assert.match(html, /p50/); assert.match(html, /hist-marker/); @@ -917,7 +917,7 @@ test('usage styles append the rhythm/mode chart primitive classes with the mark- assert.match(CSS, /\.hist-bars\{[^}]*position:relative/, 'hist-bars must be positioned to paint over the positioned marker overlay'); }); -// ── Task 9: the panels that consume all of the above ────────────────────── +// ── the panels that consume all of the above ────────────────────── test('usage-rhythm.mjs reaches the served bundle, with exactly one escaper in it', () => { // Without this splice every panel below throws ReferenceError in the browser diff --git a/tests/kit/deja-vu-lifecycle.test.mjs b/tests/kit/deja-vu-lifecycle.test.mjs index 33ddc330..76e95d70 100644 --- a/tests/kit/deja-vu-lifecycle.test.mjs +++ b/tests/kit/deja-vu-lifecycle.test.mjs @@ -10,10 +10,10 @@ import { runLifecycle } from '../../src/lib/adapters/lifecycle.mjs'; import { evidenceDir, writeEvidence, stableInputsKey } from '../../src/lib/evidence.mjs'; import { tempDir } from './helpers/temp-dir.mjs'; -// Task 5 Part 2: detect() now reads/writes evidence under the kit state dir +// detect() now reads/writes evidence under the kit state dir // (evidenceDir()) when refresh:false. Redirect the state base for this whole // file so those reads/writes never touch this machine's real evidence store — -// mirrors tests/kit/natives-runtime.test.mjs's Task 4 redirect. +// mirrors tests/kit/natives-runtime.test.mjs's state redirect. process.env.XDG_STATE_HOME = tempDir('ak-deja-vu-lifecycle-state'); process.env.LOCALAPPDATA = process.env.XDG_STATE_HOME; const resetEvidence = () => fs.rmSync(evidenceDir(), { recursive: true, force: true }); @@ -406,7 +406,7 @@ test('undo removes verified target before exact owned npm package and never touc ]); }); -// ── detect() refresh caching (Branch 6a Task 5 Part 2) ────────────────────── +// ── detect() refresh caching ────────────────────── // Ruling A: 6h max age. Ruling B: `refresh` defaults to true, so every caller // other than status's plain-status path (collectDejaVuRows) keeps probing // unconditionally — including detect()'s own internal reuse inside plan() diff --git a/tests/kit/doc-citations.test.mjs b/tests/kit/doc-citations.test.mjs index 4581f57f..a479f3bf 100644 --- a/tests/kit/doc-citations.test.mjs +++ b/tests/kit/doc-citations.test.mjs @@ -22,7 +22,7 @@ // nearby falls back to a plain range check (the file has enough lines) — // there is nothing sharper to hold it to. // -// Fix round 1, C-1 — the DEFINITION-SITE rule. A named symbol's word-boundary +// C-1 — the DEFINITION-SITE rule. A named symbol's word-boundary // match above only proves the TEXT appears somewhere in the widened window — // a call site (`printScoreReliability(agg);`) contains the identifier just as // much as its definition does, so a citation moved off a function's real @@ -34,14 +34,14 @@ // multiple such declarations is too ambiguous to gate on and relies on the // plain word-boundary check above instead. // -// Fix round 1, I-2 — SAME-ROW fallback for table citations. Cell-scoping +// I-2 — SAME-ROW fallback for table citations. Cell-scoping // (below) stops a neighbouring column's identifier from anchoring a // DIFFERENT fact's citation, but a `| `symbol` | prose (`file.mjs:N`) |` row // legitimately names its subject in one cell and cites it in another. When a // table citation's OWN cell yields no anchor at all, it falls back to the // REST OF ITS ROW (every other cell on the same line) — never another row. // -// Fix round 2 — the CALL-SITE marker (an affordance, not an escape hatch). +// the CALL-SITE marker (an affordance, not an escape hatch). // Round 1 fixed genuine call-site citations by DE-ANCHORING them — stripping // or requoting the identifier so the definition-site rule had nothing to gate // on. That made the citation's own NUMBER invisible to the gate again, and @@ -97,7 +97,7 @@ function fileIndex() { const IDENTIFIER_RE = /^[A-Za-z_$][\w$]{3,}$/; const IDENTIFIER_PREFIX_RE = /^([A-Za-z_$][\w$]{3,})\s*(?:=|:(?!:)|\()/; -// Fix round 2 — the literal word "call" (never "calls"/"called"/"calling", +// the literal word "call" (never "calls"/"called"/"calling", // which \b already excludes), read from the citation's own sentence/cell as // a deliberate self-declaration that this citation is about a call site. const CALL_SITE_MARKER_RE = /\bcall\b/i; @@ -111,7 +111,7 @@ function identifierIn(tok) { return m ? m[1] : null; } -// Fix round 1, C-1 — the definition-site rule. `name` is always a validated +// C-1 — the definition-site rule. `name` is always a validated // identifier token (from identifierIn), never doc free text, so it is safe // to interpolate into a RegExp without escaping. function definitionRe(name) { @@ -194,7 +194,7 @@ function extractCitations(docText) { spans.push({ tok: m[1].replace(/\s+/g, ' '), line: startLine, col: m.index - lineStartOffset[startLine - 1] }); } for (const c of cites) { - // Fix round 1, I-2: mine the citation's OWN cell first; a table citation + // I-2: mine the citation's OWN cell first; a table citation // whose own cell names nothing falls back to the REST OF ITS ROW (never // another row) — see the file header. Non-table citations are unaffected // (ownCellOnly never restricts anything for them). @@ -234,7 +234,7 @@ function extractCitations(docText) { } c.idAnchors = [...idAnchors]; c.strAnchors = [...strAnchors]; - // Fix round 2 — the call-site marker, read from the SAME own-cell/prose + // the call-site marker, read from the SAME own-cell/prose // context as the quoted-string anchors above (not the row-fallback: a // marker is a deliberate per-citation declaration, never inherited from // a sibling cell). @@ -286,7 +286,7 @@ function checkDoc(docRel, index) { ); continue; } - // Fix round 1, C-1 — the definition-site rule: a word-boundary hit above + // C-1 — the definition-site rule: a word-boundary hit above // only proves the identifier's TEXT is somewhere in the window, which a // call site satisfies just as well as a definition. Scoped to the // anchors that ACTUALLY hit (idHitAnchors) — an identifier merely mined @@ -296,7 +296,7 @@ function checkDoc(docRel, index) { // only a symbol whose text-match is doing the work here has to prove // that text-match is a definition, not a call site. // - // Fix round 2 — a citation self-declared as a call site (see the + // a citation self-declared as a call site (see the // CALL_SITE_MARKER_RE header note) skips ONLY this rule; idHit/strHit // above still had to pass, so the citation is not exempt from having a // real anchor, only from that anchor having to be a declaration. diff --git a/tests/kit/heal-natives.test.mjs b/tests/kit/heal-natives.test.mjs index 53f826c7..cc63e52e 100644 --- a/tests/kit/heal-natives.test.mjs +++ b/tests/kit/heal-natives.test.mjs @@ -389,7 +389,7 @@ test('healNatives leaves a present binding that loads alone', async () => { } finally { cleanup(); } }); -// ── Task 4: a repair's evidence round-trips into a subsequent status read ─── +// ── a repair's evidence round-trips into a subsequent status read ─── test('healNatives\'s repair evidence round-trips through rufloRuntimeNatives({ refresh: false }) without a second spawn', async () => { const { pkg, cleanup } = presentBindingTree(); diff --git a/tests/kit/helpers/dashboard-child-server.mjs b/tests/kit/helpers/dashboard-child-server.mjs index b5c32c1c..b2ab9563 100644 --- a/tests/kit/helpers/dashboard-child-server.mjs +++ b/tests/kit/helpers/dashboard-child-server.mjs @@ -1,8 +1,8 @@ // Shared harness for tests that need a REAL dashboard-server.mjs HTTP server, // in a real child process with tests/helpers/spawn-guard.mjs preloaded (Branch -// 6a Task 9 — proving the in-process /api/status path spawns nothing on a warm +// Proving the in-process /api/status path spawns nothing on a warm // cache needs the same "every child_process spawn lands in a ledger" technique -// tests/fixtures/status-zero-spawn-child.mjs (Task 8a) uses for a bare +// tests/fixtures/status-zero-spawn-child.mjs uses for a bare // collect() call, applied here to a whole running server instead). // // Unlike status-zero-spawn-child.mjs (which drives collect() directly and diff --git a/tests/kit/helpers/home-sandbox.mjs b/tests/kit/helpers/home-sandbox.mjs index 038c6dfd..3227851e 100644 --- a/tests/kit/helpers/home-sandbox.mjs +++ b/tests/kit/helpers/home-sandbox.mjs @@ -218,7 +218,7 @@ export const snapshot = (dir) => walk(dir, dir, new Map()); * modified path — the load-bearing assertion behind every `--dry-run` test. * `opts.ignore` is a list of relative-path prefixes (as `snapshot()` keys, * e.g. from `path.relative(dir, someSubdir)`) excluded from the diff — for a - * deliberate, documented side-channel write (Branch 6a Task 5: the shared + * deliberate, documented side-channel write (the shared * evidence probe cache) a caller still wants every OTHER path covered for. * @param {Map} before * @param {string} dir diff --git a/tests/kit/host-executable.test.mjs b/tests/kit/host-executable.test.mjs index e657d140..bc9ff1ae 100644 --- a/tests/kit/host-executable.test.mjs +++ b/tests/kit/host-executable.test.mjs @@ -27,7 +27,7 @@ test('hostExecutable accepts a launcher that answers --version', async () => { assert.deepEqual(calls, [['codex', '--version']]); }); -// ── hostExecutable refresh caching (Branch 6a Task 5) ─────────────────────── +// ── hostExecutable refresh caching ─────────────────────── // `runner` is injectable, so these prove zero-spawn directly instead of // needing the broken-PATH trick tests/kit/host-setup-evidence.test.mjs uses // for the non-injectable have()/hostVersion() probes. diff --git a/tests/kit/host-setup-evidence.test.mjs b/tests/kit/host-setup-evidence.test.mjs index 77634616..66c8f378 100644 --- a/tests/kit/host-setup-evidence.test.mjs +++ b/tests/kit/host-setup-evidence.test.mjs @@ -1,4 +1,4 @@ -// Branch 6a Task 5, Part 1: detectHosts()/hostInstallState() stop spawning +// detectHosts()/hostInstallState() stop spawning // `which`/` --version` on every plain `ak status` call — they reuse // fresh evidence instead, gated by `refresh` (Ruling A: 6h max age; Ruling B: // every new `refresh` param defaults to true, so every caller other than @@ -6,7 +6,7 @@ // // Neither `have()` nor `hostVersion()` (providers.mjs) nor `installedVersion()` // (versions.mjs, via globalRoot()) is injectable, so — mirroring -// tests/kit/natives-runtime.test.mjs's Task 4 precedent — these tests break +// tests/kit/natives-runtime.test.mjs's state-isolation precedent — these tests break // PATH and redirect the npm global root to an empty fixture dir so a REAL // probe deterministically returns "absent", then seed cached evidence with a // value ("...-cache-marker") a real probe could never produce. Getting the @@ -227,7 +227,7 @@ test('collectIntegrationFacts({ refresh: true }) (its default) threads through a resetEvidence(); }); -// ── Task 4/5 joint fix: `record` suppresses persistence, never the probe ──── +// ── `record` suppresses persistence, never the probe ──── // (`sync.mjs`'s plan-computation reads pass `record: false` so a cold-cache // probe never writes evidence as a side effect of merely building the plan.) diff --git a/tests/kit/mcp-scopes.test.mjs b/tests/kit/mcp-scopes.test.mjs index 9acbaef8..b8720b9a 100644 --- a/tests/kit/mcp-scopes.test.mjs +++ b/tests/kit/mcp-scopes.test.mjs @@ -357,7 +357,7 @@ test('status names the store the launcher picks from this folder', (t) => { assert.match(outside.message, /from here it uses the user-level store .*\.claude-flow.memory \(this folder is the home folder\)/); }); -// Plan Task 4.2: register() refuses with 'ak-not-on-path' when it would write +// register() refuses with 'ak-not-on-path' when it would write // a registration that starts `ak`, so every row whose sync fix goes through // that write is the user's step until `ak` resolves on PATH. const AK_OFF_PATH_FIX = 'put `ak` on PATH, then run `ak sync`'; @@ -400,10 +400,10 @@ test('the mcp section looks ak up only when ak manages the registration', async assert.equal(rows.find((r) => /not registered/.test(r.message)).fix, AK_OFF_PATH_FIX); }); -// Task 7: the mcp section's collect() threads refresh/record into +// the mcp section's collect() threads refresh/record into // launcherCheck() (claudeLauncherUnavailable, evidence-gated) so a plain // `ak status` (refresh: false) stays cache-first while `--refresh` forces it, -// mirroring hosts.mjs's Task 5 precedent. +// mirroring hosts.mjs's evidence-cache precedent. test('the mcp section threads refresh/record into launcherCheck, defaulting to a plain-status-shaped call', async (t) => { const { home, cwd } = fixture(t); const seen = []; @@ -421,7 +421,7 @@ test('the mcp section threads refresh/record into launcherCheck, defaulting to a 'explicit refresh/record/source thread straight through'); }); -// F1 (Branch 3 fix round 2): an `ak` on PATH older than the launcher's +// F1: an `ak` on PATH older than the launcher's // `--host` option cannot start `ak x ruflo-mcp --host claude` (it exits 2 on // the unknown option), so being on PATH is not enough. The check asks the PATH // `ak` for its launcher help; this is ak 4.0.0-alpha.56's, which has no --host. diff --git a/tests/kit/natives-runtime.test.mjs b/tests/kit/natives-runtime.test.mjs index 9581d9f2..b191a1c2 100644 --- a/tests/kit/natives-runtime.test.mjs +++ b/tests/kit/natives-runtime.test.mjs @@ -16,7 +16,7 @@ import { _setGlobalRootForTest } from '../../src/lib/paths.mjs'; import { evidenceDir, readEvidence, writeEvidence, stableInputsKey } from '../../src/lib/evidence.mjs'; import { tempDir } from './helpers/temp-dir.mjs'; -// Task 4: rufloRuntimeNatives now reads/writes evidence under the kit state dir +// rufloRuntimeNatives now reads/writes evidence under the kit state dir // (evidenceDir()) when refresh:false. Redirect the state base for this whole // file so those reads/writes never touch this machine's real evidence store — // mirrors tests/kit/heal-natives.test.mjs's XDG_STATE_HOME/LOCALAPPDATA redirect. @@ -386,7 +386,7 @@ test('rufloRuntimeNatives reports not-installed and never spawns when ruflo is a _setGlobalRootForTest(null); rm(g); }); -// ── Task 4: evidence-backed refresh (Ruling A/B) ──────────────────────────── +// ── evidence-backed refresh (Ruling A/B) ──────────────────────────── /** Seed a fresh, matching evidence record for one context, as a real probe + * writeEvidence would leave it. */ diff --git a/tests/kit/paths-global-root-evidence.test.mjs b/tests/kit/paths-global-root-evidence.test.mjs index 57d2c321..7294d627 100644 --- a/tests/kit/paths-global-root-evidence.test.mjs +++ b/tests/kit/paths-global-root-evidence.test.mjs @@ -1,4 +1,4 @@ -// Branch 6a Task 7: globalRoot() (src/lib/paths.mjs) stops spawning +// globalRoot() (src/lib/paths.mjs) stops spawning // `npm root -g` on every plain `ak status` call — it reuses fresh evidence // instead (kind 'npm-global-root', id 'machine', 24h TTL). Unlike every other // evidence-gated check in this branch, BOTH `refresh` and `record` DEFAULT TO @@ -16,7 +16,7 @@ // byte-compatible, not just paths.mjs talking to itself. // // globalRoot() has no injectable runner (it calls execFileSync directly), so -// — mirroring tests/kit/host-setup-evidence.test.mjs's Task 5 precedent — +// — mirroring tests/kit/host-setup-evidence.test.mjs's state-isolation precedent — // these tests break PATH so a real `npm root -g` ENOENTs deterministically, // then seed cached evidence with a marker path no real probe/fallback could // ever produce. Getting the marker back proves the cache was used. diff --git a/tests/kit/providers-status-section.test.mjs b/tests/kit/providers-status-section.test.mjs index 8f98fc3b..1498b0af 100644 --- a/tests/kit/providers-status-section.test.mjs +++ b/tests/kit/providers-status-section.test.mjs @@ -1,7 +1,7 @@ -// Branch 6a Task 7: the providers section's hostManagementRows() stops +// the providers section's hostManagementRows() stops // calling have(h.bin) for every non-enabled host — providers.mjs's -// detectHosts() (via collectIntegrationFacts, already evidence-cached by -// Task 5) already answers the exact same "is this host's bin on PATH" +// detectHosts() (via collectIntegrationFacts, already backed by the +// evidence cache) already answers the exact same "is this host's bin on PATH" // question once per collect(), for every host regardless of enablement, so // reusing integrationFacts.hosts[h.id].present removes a duplicate probe of // the identical fact rather than adding a second evidence kind for it. diff --git a/tests/kit/ruflo-components-snapshot.test.mjs b/tests/kit/ruflo-components-snapshot.test.mjs index f1e99fdd..8fee7a6c 100644 --- a/tests/kit/ruflo-components-snapshot.test.mjs +++ b/tests/kit/ruflo-components-snapshot.test.mjs @@ -189,7 +189,7 @@ for (const decidedBy of ['package-default', 'project-config', 'user-config']) { } // Controller ruling 1: the shared, read-only projection every surface (status, -// Task 10's dashboard) builds a snapshot from. +// the dashboard) builds a snapshot from. test('rufloComponentsPayload has all 8 components, writes nothing, and reports unwritten typesafe as not applied', () => { const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'ak-rc-payload-')); try { diff --git a/tests/kit/ruflo-daemon-config.test.mjs b/tests/kit/ruflo-daemon-config.test.mjs index 90467e09..30af764f 100644 --- a/tests/kit/ruflo-daemon-config.test.mjs +++ b/tests/kit/ruflo-daemon-config.test.mjs @@ -1,4 +1,4 @@ -// ak-managed Ruflo daemon settings (Branch 3, Task 2.2). The daemon reads FLAT +// ak-managed Ruflo daemon settings. The daemon reads FLAT // keys from /.claude-flow/config.json once, in its constructor // (worker-daemon.js:139-144, 354-416, Ruflo 3.46.1); `ruflo config set` // writes nested keys and relocates the memory root (ruvnet/ruflo#3449), so ak @@ -448,7 +448,7 @@ test('a daemon deferring under a user-managed config.json is not restarted: sync } }); -// F5 (Branch 3 fix round 2): Ruflo 3.46.1 treats a folder as a Ruflo project +// F5: Ruflo 3.46.1 treats a folder as a Ruflo project // only with a durable marker (services/daemon-autostart.js:90-123, isRufloProject): // .claude-flow/config.{yaml,yml,json}, claude-flow.config.json, // .swarm/memory.db, settings.json `claudeFlow`, or a ruflo/claude-flow server in diff --git a/tests/kit/setup-command.test.mjs b/tests/kit/setup-command.test.mjs index 70fe19ae..2b918bfe 100644 --- a/tests/kit/setup-command.test.mjs +++ b/tests/kit/setup-command.test.mjs @@ -774,7 +774,7 @@ test('ak setup --opencode with an ABSENT CLI never fabricates the config home', test.after(() => rmrf(HOME)); -// Branch 3, Task 2.2: setup no longer turns Ruflo's start-on-use off, and it +// setup no longer turns Ruflo's start-on-use off, and it // writes the managed daemon settings BEFORE `ruflo daemon start`, because the // daemon reads .claude-flow/config.json once, in its constructor // (worker-daemon.js:139-144, 3.46.1). diff --git a/tests/kit/status-command.test.mjs b/tests/kit/status-command.test.mjs index 92ca6191..5539389d 100644 --- a/tests/kit/status-command.test.mjs +++ b/tests/kit/status-command.test.mjs @@ -284,7 +284,7 @@ test('collect() writes nothing to HOME or the project, beyond its own probe-resu const beforeHome = snapshot(HOME); const beforeProject = snapshot(PROJECT); await collect(); - // Branch 6a Task 5: a plain status collect() call (refresh:false, the + // a plain status collect() call (refresh:false, the // default) still probes for real on a cache miss/stale/first run (Ruling // A) and records the result — so a LATER plain status call can reuse it. // That write lands only under the shared evidence store, never anywhere @@ -329,7 +329,7 @@ test('ruflo provider intent never claims registration alone is routed execution' assert.doesNotMatch(intent.message, /routable|executed successfully/); }); -// Branch 6a Task 9: dashboard-server.mjs now calls collect() in process, and +// dashboard-server.mjs now calls collect() in process, and // a live dashboard server can be asked (via its per-request `cwd`) for a // project other than its own launch cwd. Every cwd-sensitive section must // resolve against the PASSED cwd, never a silent process.cwd() fallback. diff --git a/tests/kit/status-version-drift-refresh.test.mjs b/tests/kit/status-version-drift-refresh.test.mjs index 88dd9dc3..1a0076e0 100644 --- a/tests/kit/status-version-drift-refresh.test.mjs +++ b/tests/kit/status-version-drift-refresh.test.mjs @@ -1,4 +1,4 @@ -// Task 6 (Branch 6a refactor/evidence-store): `ak status --refresh` had no +// `ak status --refresh` had no // effect on version-drift rows because four sections silently dropped the // `refresh` key their shared collect() ctx already carries. The four // libraries (versions.mjs/ruvector.mjs/ruvnet-brain.mjs's driftReport/ diff --git a/tests/kit/status-zero-spawn.test.mjs b/tests/kit/status-zero-spawn.test.mjs index e7a68d86..974ede8b 100644 --- a/tests/kit/status-zero-spawn.test.mjs +++ b/tests/kit/status-zero-spawn.test.mjs @@ -1,11 +1,11 @@ -// Branch 6a Task 8a built this harness: src/commands/status.mjs's collect() +// This harness covers src/commands/status.mjs's collect() // runs inside a real child Node process launched with `--import` of // tests/helpers/spawn-guard.mjs (Ruling C: a product-code ledger seam inside // exec.mjs would under-count — ~30 files spawn child_process directly, not // through it), so every spawn path is caught regardless of which module // makes it, with no product code change. // -// Task 7 closed every remaining spawn path on a plain `ak status` (native +// Evidence caching closed every remaining spawn path on a plain `ak status` (native // runtime, host setup/launch, deja-vu, version drift, npm's global root, the // daemon process sweep, the ak-launcher-availability check) and promotes the // zero-spawn assertion from `test.todo` (Ruling D — never commit a red test) diff --git a/tests/kit/sync-command.test.mjs b/tests/kit/sync-command.test.mjs index 3883e066..64945d97 100644 --- a/tests/kit/sync-command.test.mjs +++ b/tests/kit/sync-command.test.mjs @@ -1248,7 +1248,7 @@ test('enabled + absent CLI: the install is attempted by hosts, the wiring is ski assert.ok(!fs.existsSync(ocHome()), 'the config home is never fabricated for an absent host'); }); -// final-review fix: a real (non-dry-run) sync forces host evidence fresh +// a real (non-dry-run) sync forces host evidence fresh // BEFORE the plan is read (refreshPlanHosts), so a cached row that has not // yet gone stale (host-setup's 6h TTL) but is simply WRONG — here, claude // went from "absent" to "on PATH" since it was last recorded — can never diff --git a/tests/kit/sync-daemon-repair.test.mjs b/tests/kit/sync-daemon-repair.test.mjs index 79c9aa82..b13863f5 100644 --- a/tests/kit/sync-daemon-repair.test.mjs +++ b/tests/kit/sync-daemon-repair.test.mjs @@ -1,4 +1,4 @@ -// final-review fix: sync's 'daemons' step must re-record daemon-sweep +// sync's 'daemons' step must re-record daemon-sweep // evidence after a successful reap. The Important finding: listDaemons() // records the PRE-reap process list; without a re-list after reap() kills // something, that stale list is the last thing written — a later `ak diff --git a/tests/kit/sync-host-repair.test.mjs b/tests/kit/sync-host-repair.test.mjs index 99977555..b17e74a4 100644 --- a/tests/kit/sync-host-repair.test.mjs +++ b/tests/kit/sync-host-repair.test.mjs @@ -59,7 +59,7 @@ test('the versions step verifies host CLIs it upgrades', () => { assert.deepEqual(sync.hostUpgradeOptions('ruflo'), {}); }); -// ── final-review fix: re-record evidence after a repair succeeds ─────────── +// ── re-record evidence after a repair succeeds ─────────── // The Important finding: `installState()` at the top of the loop records the // PRE-repair evidence; without a re-probe after `install()` succeeds, that // stale row is the last thing written — a later `ak status`/this sync's own diff --git a/tests/kit/trust-manifest.test.mjs b/tests/kit/trust-manifest.test.mjs index 30b07ea3..cea6267d 100644 --- a/tests/kit/trust-manifest.test.mjs +++ b/tests/kit/trust-manifest.test.mjs @@ -250,7 +250,7 @@ test('ruflo components governance disclosure states enforcement is scoped to the assert.match(text, /project's own existing \.harness\/mcp-policy\.json is left alone/); }); -// Branch 3, Task 2.2: project setup discloses both daemon writes and the opt-out. +// project setup discloses both daemon writes and the opt-out. test('project setup discloses the managed Ruflo daemon settings and how to opt out', () => { const group = (cfg, project) => setupTrustManifest(cfg, { hosts: [], project }) .find((g) => g.componentId === 'ruflo-daemon'); diff --git a/tests/kit/uninstall-command.test.mjs b/tests/kit/uninstall-command.test.mjs index c443e2a1..73145ef0 100644 --- a/tests/kit/uninstall-command.test.mjs +++ b/tests/kit/uninstall-command.test.mjs @@ -492,7 +492,7 @@ test('a failed typesafe package removal keeps kit.json under --purge', async () test.after(() => rmrf(HOME)); -// Branch 3, Task 2.2: uninstall puts back what ak changed for Ruflo's daemon +// uninstall puts back what ak changed for Ruflo's daemon // in every receipted project: the autoStart value and the flat keys (and the // .claude-flow/config.json ak created). test('uninstall restores autoStart and removes the managed daemon keys in receipted projects', async () => { diff --git a/tests/kit/usage-index.test.mjs b/tests/kit/usage-index.test.mjs index b52f5e3d..f67adbe9 100644 --- a/tests/kit/usage-index.test.mjs +++ b/tests/kit/usage-index.test.mjs @@ -1858,7 +1858,7 @@ test('blankSession v14 fingerprint fields default honest-empty', () => { assert.equal(rec.promptFPOverflow, 0); }); -// ── v11 index carry-through + lookback (Task 5) ───────────────────────────── +// ── v11 index carry-through + lookback ───────────────────────────── /** Carries BOTH v16 shape flags: it opens with a persona assignment and it ends * with a question mark. Shared by the fixture and its assertions so the two @@ -1959,7 +1959,7 @@ test('cached session entries round-trip the v11 and v14 fields across a cache hi assertBoth(); // cache-hit read: identical values prove the round trip }); -// ── lookback (Task 5) ──────────────────────────────────────────────────────── +// ── lookback ──────────────────────────────────────────────────────── test("buildIndex({ days, lookbackDays }) widens discovery/parse; unset stays exactly today's behavior", async () => { _resetForTest(); @@ -1986,7 +1986,7 @@ test("buildIndex({ days, lookbackDays }) widens discovery/parse; unset stays exa assert.equal(byId(undefinedLookback, 'old-session'), undefined, 'lookbackDays: undefined must not widen the window either'); assert.deepEqual(undefinedLookback.totals, plain.totals, 'unset lookbackDays is identical to omitting it entirely'); - // Task 7 (2026-08-28-scorecard-matrix-a SDD) ruling B: lookbackDays alone + // lookbackDays alone // no longer widens what the CURRENT window's sessions/totals contain — only // discovery/parse/cache. `aggregate` is always called with the DISPLAY // cutoff (now - days*DAY_MS), so a `previous: true`-less caller must see @@ -2030,7 +2030,7 @@ test('scanKey distinguishes calls that differ only by lookbackDays', async () => 'a call with lookbackDays set must not collide with one that omits it — they must not share the in-flight promise / result object'); }); -// Task 7 fix round 1: the same F-08-style regression guard as the lookbackDays +// The same F-08-style regression guard as the lookbackDays // test above, now for `previous` — added after review flagged that scanKey // folded lookbackDays into its identity but not previous, so a {previous:true} // caller (e.g. /api/usage) racing a {previous:false} caller (e.g. the Models @@ -2045,7 +2045,7 @@ test('scanKey distinguishes calls that differ only by previous', async () => { 'a call with previous:true must not collide with one that omits it — they must not share the in-flight promise / result object'); }); -// ── aggregate: buckets, rhythm, per-day engaged, previous window (Task 6) ─── +// ── aggregate: buckets, rhythm, per-day engaged, previous window ─── // // These suites drive `aggregate()` directly instead of through buildIndex: the // previous-window projection reads records OLDER than the cutoff, which only diff --git a/tests/kit/usage-limits-empty-state.test.mjs b/tests/kit/usage-limits-empty-state.test.mjs index 069eb943..ff880eaa 100644 --- a/tests/kit/usage-limits-empty-state.test.mjs +++ b/tests/kit/usage-limits-empty-state.test.mjs @@ -117,7 +117,7 @@ test('a stale Codex answer served after a failed refresh says the refresh failed assert.doesNotMatch(fresh['u-lim-codex-note'].textContent, /refresh failed/); }); -// Fix round 1: a cached figure served under a presence-gated reason (no spawn +// a cached figure served under a presence-gated reason (no spawn // was ever attempted) must say "not refreshed", never "last refresh failed" — // that phrase implies an attempt that did not happen. test('a cached Codex figure served under a presence-gated reason says "not refreshed", never "failed"', () => { diff --git a/tests/quality/comment-label-guard.test.mjs b/tests/quality/comment-label-guard.test.mjs new file mode 100644 index 00000000..f26e1132 --- /dev/null +++ b/tests/quality/comment-label-guard.test.mjs @@ -0,0 +1,100 @@ +import test from 'node:test'; +import assert from 'node:assert/strict'; +import { execFileSync } from 'node:child_process'; +import { readFileSync } from 'node:fs'; +import { fileURLToPath } from 'node:url'; +import { inspectCommentLabels } from '../helpers/comment-label-guard.mjs'; +import { spawnEnv } from '../kit/helpers/home-sandbox.mjs'; +import { tempDir } from '../kit/helpers/temp-dir.mjs'; + +const root = fileURLToPath(new URL('../../', import.meta.url)); + +test('finds transient labels in all comment positions and reports their lines', () => { + const source = '// Task 1\nfunction f() { /* Fix round 2 */ }\nconst x = 1; // final-review fix\n/* Branch 6a shared Task */\n'; + assert.deepEqual(inspectCommentLabels(source).map(({ line, kind }) => [line, kind]), + [[1, 'comment'], [2, 'comment'], [3, 'comment'], [4, 'comment']]); +}); + +test('finds ordinary and member test titles including template segments', () => { + for (const callee of ['test', 'it', 'describe', 'suite', 'test.skip', 'describe.only', 't.test', "test['todo']", 'test.only.each([])']) { + assert.equal(inspectCommentLabels(`${callee}('Task 2.3a: behavior', () => {});`).length, 1, callee); + } + assert.equal(inspectCommentLabels('test(`Fix round 3`, () => {});').length, 1); + assert.equal(inspectCommentLabels('test(`Task 3: ${value}`, () => {});').length, 1); +}); + +test('ignores ordinary member calls and parameterized test data', () => { + for (const source of [ + '/Task/.test("Task 1");', + 'const pattern = /Task/; pattern.test("Task 1");', + 'const t = /Task/; t.test("Task 1");', + 'test.log("Task 1");', + 'describe.toString("Task 1");', + 'other.test("Task 1");', + 'test.each("Task 1")("ordinary title", () => {});', + ]) assert.deepEqual(inspectCommentLabels(source), [], source); +}); + +test('parameterized callback arguments are table data, not Node contexts', () => { + for (const api of ['test.each', 'test.only.each', "test['each']"]) { + assert.deepEqual(inspectCommentLabels(`${api}([/Task/])('matches text', (pattern) => pattern.test('Task 1'));`), [], api); + const findings = inspectCommentLabels(`${api}([/Task/])('Task 2: matches text', (t) => t.test('Task 1'));`); + assert.equal(findings.length, 1, api); + assert.equal(findings[0].text, 'Task 2: matches text'); + } + assert.equal(inspectCommentLabels('test.each([1])("row", () => { test("outer", (context) => context.test("Task 1", () => {})); });').length, 1); +}); + +test('recognizes lexically declared nested Node test contexts', () => { + assert.equal(inspectCommentLabels('test("outer", async (context) => { await context.test("Task 1", async (child) => { await child.test("Task 2", () => {}); }); });').length, 2); + assert.deepEqual(inspectCommentLabels('other("outer", (context) => { context.test("Task 1"); });'), []); +}); + +test('ignores strings, URLs, regular expressions, template text and durable audit IDs', () => { + const source = String.raw` +const url = 'https://example.test/Task 1'; +const text = "// Task 2"; +const pattern = /\/\/ Task 3/; +const template = \`/* Task 4 */ \${'// Task 5'}\`; +// B3-D2 / B5-D1 / ADR-0063 / agentic-qe#759 +other('Task 6'); +`.replaceAll('\\`', '`').replaceAll('\\${', '${'); + assert.deepEqual(inspectCommentLabels(source), []); +}); + +test('finds comments inside template expressions without flagging raw segments', () => { + assert.equal(inspectCommentLabels('const x = `Task 1 ${ /* Task 2 */ 1 } // Task 3`;').length, 1); +}); + +test('handles JSDoc, empty files with comments, CRLF, division and regex boundaries', () => { + assert.equal(inspectCommentLabels('/** Task 1 */\r\nconst x = /Task 2/.test("x") / 2; // Task 3').length, 2); + assert.equal(inspectCommentLabels('/* Task 1 */').length, 1); + assert.equal(inspectCommentLabels('function f() {} /* Task 1 */').length, 1); +}); + +test('rejects malformed JavaScript rather than silently overlooking labels', () => { + assert.throws(() => inspectCommentLabels('const x = "unterminated'), /Cannot parse/); +}); + +test('inline lint directives cannot suppress inspection', () => { + assert.equal(inspectCommentLabels('/* eslint-disable */\n// Task 1').length, 1); + assert.equal(inspectCommentLabels('/* eslint-disable labels/references */\ntest("Task 2", () => {});').length, 1); +}); + +test('parses CommonJS return and module imports using the matching source mode', () => { + assert.equal(inspectCommentLabels('return; // Task 1', 'fixture.cjs').length, 1); + assert.equal(inspectCommentLabels('import x from "x"; // Task 1', 'fixture.mjs').length, 1); + assert.throws(() => inspectCommentLabels('return;', 'fixture.mjs'), /Cannot parse/); +}); + +test('tracked JavaScript comments and test titles use durable references', (t) => { + const home = tempDir('ak-comment-label-git', t); + const files = execFileSync('git', ['ls-files', '-z', '--', 'src', 'scripts', 'bin', 'tests'], { + cwd: root, encoding: 'utf8', env: spawnEnv(home), + }) + .split('\0').filter(file => /\.(?:mjs|cjs|js)$/.test(file)); + assert.ok(files.length > 0); + const findings = files.flatMap(file => inspectCommentLabels(readFileSync(new URL(`../../${file}`, import.meta.url), 'utf8'), file) + .map(hit => `${file}:${hit.line}: ${hit.kind}: ${hit.text}`)); + assert.deepEqual(findings, []); +});