diff --git a/TODO.md b/TODO.md index ee25040..beffc27 100644 --- a/TODO.md +++ b/TODO.md @@ -10,6 +10,10 @@ test command independent of ambient SubLLM credentials. Current state: `IN_PROGRESS / PUBLICATION`; workstream: `integration`. +- [ ] [`ticket-094`](project/ticket-094/README.md) — reconcile the healthy but + incorrectly scoped PR #110 linker split without rewriting history. Current + state: `IN_PROGRESS / PUBLICATION`; workstream: `governance`. + - [ ] [`ticket-054`](project/ticket-054/README.md) — restore skills-agent discovery, prove a todo2code → Repair PR → independent Validator hand-off, then add three bounded todo2code-grounded skills. Current state: diff --git a/project/TICKETS.md b/project/TICKETS.md index 211b564..a9237ba 100644 --- a/project/TICKETS.md +++ b/project/TICKETS.md @@ -71,4 +71,5 @@ of `project/README.md`, which remains a generated technical-analysis artifact. | **ticket-089** | [`README.md`](./ticket-089/README.md) | [`preprompt.md`](./ticket-089/preprompt.md) | - | [`ai-codex.md`](./ticket-089/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-089/ai-codex-logs.txt) | [`changelog.md`](./ticket-089/changelog.md) | | **ticket-090** | [`README.md`](./ticket-090/README.md) | [`preprompt.md`](./ticket-090/preprompt.md) | - | [`ai-codex.md`](./ticket-090/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-090/ai-codex-logs.txt) | [`changelog.md`](./ticket-090/changelog.md) | | **ticket-091** | [`README.md`](./ticket-091/README.md) | [`preprompt.md`](./ticket-091/preprompt.md) | - | [`ai-codex.md`](./ticket-091/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-091/ai-codex-logs.txt) | [`changelog.md`](./ticket-091/changelog.md) | +| **ticket-094** | [`README.md`](./ticket-094/README.md) | [`preprompt.md`](./ticket-094/preprompt.md) | - | [`ai-codex.md`](./ticket-094/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-094/ai-codex-logs.txt) | [`changelog.md`](./ticket-094/changelog.md) | diff --git a/project/ticket-088/README.md b/project/ticket-088/README.md index 074459f..d8aee55 100644 --- a/project/ticket-088/README.md +++ b/project/ticket-088/README.md @@ -30,3 +30,34 @@ between disjoint statements and different sources. - Human participant: user:tom through the active session request; no user-* file was created by this script. - Agent participant: [ai-codex.md](ai-codex.md) + +## Protected delivery evidence + +- Pull request: `autogrammar/todo2code#103` +- Approved implementation HEAD: `a37f4020c0f0719cbb1a9336c9d03b895071972d` +- Protected merge commit: `89e72ce991e3f2518b323d2d5e45ff7368b46acf` +- Trusted reviewer: `ifuri-validator-agent[bot]`, bound to `ticket-088` and + the exact implementation HEAD +- Merged at: `2026-08-26T01:09:01Z` +- Implementation branch `ticket/088-same-source-conflict` is absent from the + remote after merge. + +## Historical scope mismatch + +PR #110 later split `src/graph/linker.ts` into focused modules. Its exact-head +Validator review is authentic, but it was incorrectly bound to `ticket-088` +after that PR expanded only this ticket's `intent.json`. The ticket goal, +acceptance criteria, plan and execution evidence never authorized the module +split. PR #110 head `dd5fa3a080c56119848ba50397c7dfe8a77b5e2a` merged as +`dcbf9ef2729b2174647261e9e1bde66c67b8e810`. + +Ticket-094 records the prospective human decision to retain the independently +tested split at main `aa20ec43e284a7f47ecbe8386978b6b2a8058341` without +claiming retroactive authorization. The intent above again reflects only the +scope delivered by this ticket's own PR #103. + +PR #112 then allowed this completed ticket's README in `ticket-093` and removed +the protected delivery section while splitting unrelated workspace-comparison +code. Exact head `915786092a496a9a9fc25c62baa1c56da7328ffa` merged as +`f7034e3fc87fd90e6d7c7e4aac2ec4aaa9d1ea11`. Ticket-094 restores the deleted +evidence and records that cross-ticket path as a second scope leak. diff --git a/project/ticket-088/ai-codex-logs.txt b/project/ticket-088/ai-codex-logs.txt index 48222d3..ba69696 100644 --- a/project/ticket-088/ai-codex-logs.txt +++ b/project/ticket-088/ai-codex-logs.txt @@ -8,3 +8,5 @@ 2026-08-26 PROTECTED_MERGE PR 103 merged as 89e72ce991e3f2518b323d2d5e45ff7368b46acf; remote implementation branch deleted 2026-09-01 LIFECYCLE_RECONCILIATION protected delivery evidence verified through GitHub API; ticket moved from stale IN_PROGRESS/PUBLICATION to DONE/DONE 2026-09-01 CLOSURE_VALIDATION governance GOV-PASS; docker smoke PASS; npm test retry passed 433, failed 0, skipped 1 after one isolated cli-watch timeout passed 1/1 on focused retry +2026-09-01 SCOPE_MISMATCH PR 110 head dd5fa3a080c56119848ba50397c7dfe8a77b5e2a merged as dcbf9ef2729b2174647261e9e1bde66c67b8e810 after expanding only ticket-088 intent; the linker module split had no matching ticket goal, ACs, plan or execution log +2026-09-01 RECONCILIATION ticket-094 restores the PR 103 intent scope and prospectively accepts retention of the tested split without rewriting protected history diff --git a/project/ticket-088/ai-codex.md b/project/ticket-088/ai-codex.md index e9a4cd5..5eb98c2 100644 --- a/project/ticket-088/ai-codex.md +++ b/project/ticket-088/ai-codex.md @@ -33,6 +33,9 @@ Sprawdzanie", so it is not independent contrary evidence. pre-existing blocking diagnostic, so the candidate adds no blocking delta. - Passed the focused tests, full repository verification, Docker smoke, governance and whitespace gates. +- Ticket-094 later restored this intent projection to the exact PR #103 scope + and appended PR #110 as a historical scope mismatch. That note does not + revoke PR #110's technical checks or pretend its authorization was valid. ## Blockers diff --git a/project/ticket-088/changelog.md b/project/ticket-088/changelog.md index bcaddef..11675ae 100644 --- a/project/ticket-088/changelog.md +++ b/project/ticket-088/changelog.md @@ -24,3 +24,9 @@ - Reconciled the stale lifecycle with exact protected evidence from PR #103. - Bound the Validator approval to `ticket-088` and implementation HEAD `a37f4020`, recorded protected merge `89e72ce`, and confirmed branch cleanup. + +## [0.5.0] - 2026-09-01 + +- Restored the intent projection to the exact PR #103 defect scope. +- Recorded PR #110 as an authentic exact-head technical review with a + mismatched ticket scope; ticket-094 owns the prospective retention decision. diff --git a/project/ticket-088/intent.json b/project/ticket-088/intent.json index 9568022..091ceec 100644 --- a/project/ticket-088/intent.json +++ b/project/ticket-088/intent.json @@ -13,10 +13,6 @@ "TODO.md", "project/TICKETS.md", "src/graph/linker.ts", - "src/graph/linker-candidates.ts", - "src/graph/linker-keywords.ts", - "src/graph/linker-relations.ts", - "src/graph/linker-scoring.ts", "test/linker-pairing.test.ts" ], "forbiddenPaths": ["project/ticket-*/user-*.md"], @@ -31,11 +27,11 @@ "nonGoals": ["No global polarity suppression", "No comparison threshold change", "No public schema change", "No direct merge"], "complexity": "XS", "estimatedMinutes": 20, - "budgets": {"maxImplementationFiles": 6, "maxAffectedComponents": 1, "maxPublicInterfaceChanges": 0, "maxRuntimeDependencies": 0}, + "budgets": {"maxImplementationFiles": 2, "maxAffectedComponents": 1, "maxPublicInterfaceChanges": 0, "maxRuntimeDependencies": 0}, "architecture": { "status": "accepted", "decision": "Treat overlapping source ranges in one normalized source file as alternate projections of one statement for contradiction classification only; retain their ordinary source-kind relation.", - "components": [{"name": "intent-linker", "paths": ["src/graph/linker.ts", "src/graph/linker-*.ts", "test/linker-pairing.test.ts"]}], + "components": [{"name": "intent-linker", "paths": ["src/graph/linker.ts", "test/linker-pairing.test.ts"]}], "responsibilityChanges": false, "interfaceChanges": [], "dataChanges": [], diff --git a/project/ticket-094/README.md b/project/ticket-094/README.md new file mode 100644 index 0000000..07e21b4 --- /dev/null +++ b/project/ticket-094/README.md @@ -0,0 +1,45 @@ +# Ticket 094: Reconcile linker split governance evidence + +- **ID**: ticket-094 +- **Owner**: agent:codex under the current human retention approval +- **Status**: IN_PROGRESS +- **Workflow state**: PUBLICATION +- **Created**: 2026-09-01 + +## Goal and scope + +Reconcile the protected merge of PR #110 without rewriting its history. The PR +split `src/graph/linker.ts` into focused modules and is functionally healthy, +but it reused `ticket-088`, whose approved goal and acceptance criteria cover a +different same-source contradiction defect. The PR changed only that ticket's +`intent.json` plus executable linker files; it did not add a matching ticket +goal, plan, acceptance criteria or execution log. + +If the human owner approves retention, restore `ticket-088/intent.json` to the +scope delivered by its own protected PR #103, append the PR #110 scope mismatch +as immutable audit evidence, and explicitly accept the already-merged linker +split at exact audited main `aa20ec43e284a7f47ecbe8386978b6b2a8058341` +under this reconciliation ticket. Do not claim that the new approval existed +before PR #110, and do not change executable code. + +## Acceptance criteria + +- [x] AC-01: A human owner explicitly chooses to retain the audited linker + split and approves this documentation-only reconciliation. +- [x] AC-02: The record binds PR #110, implementation HEAD `dd5fa3a080c5611`, + merge `dcbf9ef2729b2174`, reviewer `ifuri-validator-agent[bot]`, the + mismatched `ticket-088` binding and final audited main `aa20ec43e284a7f`; + it also binds the PR #112 removal of ticket-088 delivery evidence. +- [x] AC-03: `ticket-088` again describes only the scope approved and delivered + through PR #103; an appended note preserves PR #110 as a historical scope + violation rather than laundering it into that ticket. +- [x] AC-04: No executable source, test, workflow, dependency, generated + runtime artifact or human-owned participant file changes. +- [x] AC-05: Governance, full offline verification, Docker smoke and whitespace + checks pass on the exact reconciliation diff. + +## Participants + +- Human participant: the current session user; explicit approval is still + required and no `user-*` file was created or modified. +- Agent participant: [ai-codex.md](ai-codex.md) diff --git a/project/ticket-094/ai-codex-logs.txt b/project/ticket-094/ai-codex-logs.txt new file mode 100644 index 0000000..08feddd --- /dev/null +++ b/project/ticket-094/ai-codex-logs.txt @@ -0,0 +1,14 @@ +2026-09-01 AUDIT_BASE protected main aa20ec43e284a7f47ecbe8386978b6b2a8058341 +2026-09-01 PR110_EVIDENCE PR 110 head dd5fa3a080c56119848ba50397c7dfe8a77b5e2a merged as dcbf9ef2729b2174647261e9e1bde66c67b8e810; exact-head review by ifuri-validator-agent[bot] bound ticket-088 +2026-09-01 SCOPE_MISMATCH ticket-088 goal, ACs and agent plan cover the same-source contradiction defect; PR 110 added linker module allowedPaths and code without a matching goal, AC, plan or log +2026-09-01 BASELINE_VERIFY npm run verify passed tests=434 pass=433 fail=0 skip=1 on protected main aa20ec43 +2026-09-01 BASELINE_GOVERNANCE ./project/governance-check.sh --actor agent returned GOV-PASS on protected main aa20ec43 +2026-09-01 BASELINE_DOCKER make docker-smoke returned PASS on protected main aa20ec43 +2026-09-01 PLAN_GATE ticket remains PLAN/WAIT_FOR_APPROVAL; no ticket-088 or executable file changed +2026-09-01 HUMAN_APPROVAL current user instructed continuation after reviewing the ticket-094 retention/reconciliation plan; ticket moved to IN_PROGRESS/EDIT +2026-09-01 BASE_REFRESH plan rebased onto main f7034e3fc87fd90e6d7c7e4aac2ec4aaa9d1ea11 after unrelated ticket-093 protected merge; no owned-path conflict +2026-09-01 GOVERNANCE_BUDGET active intent requires positive file and component budgets; set the minimum 1/1 while AC-04 continues to forbid executable changes +2026-09-01 RECONCILIATION_EDIT restored ticket-088 intent allowedPaths, budget and architecture paths to the PR 103 version; appended exact PR 110 mismatch evidence; executable diff remains empty +2026-09-01 PR112_SCOPE_LEAK ticket-093 intent allowed project/ticket-088/README.md and PR 112 head 915786092a496a9a9fc25c62baa1c56da7328ffa deleted its protected delivery section while splitting unrelated workspace code; merge f7034e3fc87fd90e6d7c7e4aac2ec4aaa9d1ea11 +2026-09-01 VALIDATION npm run verify passed tests=434 pass=433 fail=0 skip=1; governance GOV-PASS; make docker-smoke PASS; git diff --check PASS +2026-09-01 PUBLICATION_GATE ticket moved to IN_PROGRESS/PUBLICATION; exact diff contains governance evidence only and awaits a fresh ticket-094 Validator binding diff --git a/project/ticket-094/ai-codex.md b/project/ticket-094/ai-codex.md new file mode 100644 index 0000000..04f8fd5 --- /dev/null +++ b/project/ticket-094/ai-codex.md @@ -0,0 +1,52 @@ +--- +participant-id: agent:codex +participant: codex +role: agent +ticket: ticket-094 +--- +# Participant: codex (AI agent) + +## Understanding + +PR #110 is merged and its exact-head Validator decision is authentic, but the +decision binds the linker modularization to `ticket-088`. That ticket's goal, +acceptance criteria, agent plan and protected PR #103 evidence concern only the +same-source contradiction defect. Adding linker module paths to its intent at +the end of PR #110 did not make the new refactor ticket-first. + +The final protected main is functionally healthy: `npm run verify` passed 433 +tests with one environment skip and zero failures, governance returned +`GOV-PASS`, and Docker smoke passed. Therefore the least destructive honest +repair is a prospective human retention decision plus an append-only mismatch +record, not a claim that the earlier authorization was valid. + +## Execution plan + +1. Commit and publish this documentation-only plan in `WAIT_FOR_APPROVAL`. +2. After explicit approval, restore ticket-088's intent to its PR #103 scope + and append exact PR #110 mismatch evidence to both tickets. +3. Re-run full offline, governance, Docker and whitespace verification. +4. Publish through the protected Validator boundary with exact bindings to + `ticket-094`; never reuse the ticket-088 review as this ticket's approval. + +## Actual changes + +- The user explicitly approved continuation after reviewing ticket-094, + ticket-024 and ticket-022; ticket-094 moved to `IN_PROGRESS / EDIT`. +- The plan was rebased without conflict from audited main `aa20ec43` to + `f7034e3`; the intervening ticket-093 merge does not touch this ticket's + historical linker evidence or owned documentation paths. +- Restored ticket-088's allowed paths, implementation budget and architecture + component to the exact PR #103 defect scope. +- Appended the exact PR #110 review/merge mismatch without modifying any + executable file or protected GitHub evidence. +- Restored the protected PR #103 evidence deleted by unrelated PR #112 and + recorded its foreign-ticket allowed path as a second scope leak. +- Full offline verification passed 433 tests with one environment skip and no + failures; governance, Docker smoke and whitespace checks passed. +- The exact documentation-only diff is ready for protected publication under + `ticket-094`. + +## Blockers + +- None inside the approved documentation-only scope. diff --git a/project/ticket-094/changelog.md b/project/ticket-094/changelog.md new file mode 100644 index 0000000..4b139c1 --- /dev/null +++ b/project/ticket-094/changelog.md @@ -0,0 +1,29 @@ +# Ticket Changelog (ticket-094) + +## [0.1.0] - 2026-09-01 + +- Initial governance scaffold created. +- No human participant identity or content was generated. + +## [0.2.0] - 2026-09-01 + +- Recorded the exact protected PR #110, Validator and final-main evidence. +- Planned an honest documentation-only reconciliation without retroactive + authorization or executable changes. + +## [0.3.0] - 2026-09-01 + +- Recorded explicit human retention approval and entered `IN_PROGRESS / EDIT`. +- Refreshed the accepted base after the unrelated ticket-093 protected merge. + +## [0.4.0] - 2026-09-01 + +- Restored ticket-088's original defect scope projection. +- Appended exact PR #110 scope-mismatch and prospective-retention evidence. +- Restored ticket-088 protected evidence removed by unrelated PR #112 and + recorded that cross-ticket allowed path as a separate scope leak. + +## [0.5.0] - 2026-09-01 + +- Passed full offline verification, governance, Docker smoke and whitespace + checks and entered protected publication. diff --git a/project/ticket-094/intent.json b/project/ticket-094/intent.json new file mode 100644 index 0000000..8e506c2 --- /dev/null +++ b/project/ticket-094/intent.json @@ -0,0 +1,82 @@ +{ + "schema": "new-project.intent/v3", + "ticket": "ticket-094", + "summary": "Reconcile linker split governance evidence", + "workstream": "governance", + "classification": { + "kind": "SERVICE", + "priority": "P1", + "origin": "health" + }, + "allowedPaths": [ + "project/ticket-088/README.md", + "project/ticket-088/intent.json", + "project/ticket-088/ai-codex.md", + "project/ticket-088/ai-codex-logs.txt", + "project/ticket-088/changelog.md", + "project/ticket-094/**", + "TODO.md", + "project/TICKETS.md" + ], + "forbiddenPaths": ["project/ticket-*/user-*.md"], + "stacks": [], + "dependsOn": [], + "conflictsWith": [], + "integrationTicket": null, + "delivery": { + "acceptedBaseSha": "f7034e3fc87fd90e6d7c7e4aac2ec4aaa9d1ea11", + "targetBranch": "main", + "outcome": "Main retains a tested linker module split while its governance record truthfully distinguishes PR #110 from ticket-088's approved defect scope.", + "nonGoals": [ + "No executable code or test change", + "No retroactive claim that PR #110 was ticket-first", + "No alteration of protected GitHub review or merge history", + "No direct merge" + ], + "complexity": "XS", + "estimatedMinutes": 15, + "budgets": { + "maxImplementationFiles": 1, + "maxAffectedComponents": 1, + "maxPublicInterfaceChanges": 0, + "maxRuntimeDependencies": 0 + }, + "architecture": { + "status": "accepted", + "decision": "Retain the already-merged, independently verified linker split only after a new human decision, restore ticket-088's original scope projection, and append the intervening scope mismatch as audit evidence.", + "components": [ + { + "name": "repository-governance-evidence", + "paths": [ + "project/ticket-088/**", + "project/ticket-094/**", + "TODO.md", + "project/TICKETS.md" + ] + } + ], + "responsibilityChanges": false, + "interfaceChanges": [], + "dataChanges": [], + "ui": { + "impact": "none", + "states": [], + "evidence": [] + }, + "rollback": "Revert the documentation-only reconciliation; PR #110 and its protected Git history remain unchanged." + }, + "runtimeDependencies": [], + "validation": [ + { + "criterion": "AC-05", + "commands": [ + "npm run verify", + "./project/governance-check.sh --actor agent", + "make docker-smoke", + "git diff --check" + ], + "evidence": "project/ticket-094/ai-codex-logs.txt" + } + ] + } +} diff --git a/project/ticket-094/preprompt.md b/project/ticket-094/preprompt.md new file mode 100644 index 0000000..8a26802 --- /dev/null +++ b/project/ticket-094/preprompt.md @@ -0,0 +1,8 @@ +# Ticket preprompt + +- **Task ID**: ticket-094 +- **Task title**: Reconcile linker split governance evidence +- **Created**: 2026-09-01T12:30:12Z + +Keep executable implementation outside this governance/evidence directory. +Read a human-owned user-*.md file only when one exists.