No update or delete for plans and rules; every fix orphans an object #87

Closed
opened 2026-10-08 09:20:18 +02:00 by EduarD3V · 5 comments
Owner

Labels: api, tools, priority/high

"Fix the plan" is impossible with the current toolset. create_plan exists; nothing else does. The only fix path is create-a-new-id and abandon the old one.

In this session the operator had to delete plan 0c52ac87-8ab6-42cb-a072-b02bc116e6f0 and rule 3749b312 by hand, outside the agent. I have no tool for either.

Consequences:

Plan IDs accumulate as tombstones; there is no way to mark one superseded.
A re-created plan gets a new signature, so the old rule keeps pointing at the dead one.
incidentPolicy: "reuse_open" then reuses the stale incident.

Acceptance criteria

plan_update with PATCH semantics — updating steps must not require resending title, verify, rollback.
plan_delete / plan_archive.
rule_update for planId, enabled, conditions, hostnames, groupIds.
rule_delete.
Deleting a plan that a rule references is refused, or the rule is disabled with an explicit message.
Labels: api, tools, priority/high "Fix the plan" is impossible with the current toolset. create_plan exists; nothing else does. The only fix path is create-a-new-id and abandon the old one. In this session the operator had to delete plan 0c52ac87-8ab6-42cb-a072-b02bc116e6f0 and rule 3749b312 by hand, outside the agent. I have no tool for either. Consequences: Plan IDs accumulate as tombstones; there is no way to mark one superseded. A re-created plan gets a new signature, so the old rule keeps pointing at the dead one. incidentPolicy: "reuse_open" then reuses the stale incident. Acceptance criteria plan_update with PATCH semantics — updating steps must not require resending title, verify, rollback. plan_delete / plan_archive. rule_update for planId, enabled, conditions, hostnames, groupIds. rule_delete. Deleting a plan that a rule references is refused, or the rule is disabled with an explicit message.
gotoi-agent added reference issue/87-plan-rule-update-delete 2026-10-08 19:55:49 +02:00
gotoi-agent changed reference from issue/87-plan-rule-update-delete to issue/87-plan-rule-update 2026-10-08 19:58:44 +02:00
Collaborator

Issue #87 — Plan/rule update+delete; PATCH semantics; orphan prevention

Branch: issue/87-plan-rule-update (from origin/agent-develop @ d6bb5c3).
Worktree: /home/eduardez/workspace/gotoi-wt/issue-87.

Scope

Already met on the base (d6bb5c3) — no work redone

The issue was written against an older base. On d6bb5c3 the tools and routes
already exist. Verified by reading the code:

Acceptance criterion State on base Evidence
1. plan_update PATCH semantics met — plan_update tool sends subset; applyPlanPatch merges only present keys middleware/src/control-agent.ts:990-1039, middleware/src/plans.ts:161-217
2. plan_delete met — plan_delete tool + DELETE /plans/:id middleware/src/control-agent.ts:1042-1063, middleware/src/routes/plans.ts:627-636
2. plan_archive met as deprecate — PATCH {status:'deprecated', replacementId} → deprecatePlan middleware/src/routes/plans.ts:549-556, middleware/src/plans.ts:219-228
3. rule_update (planId/enabled/conditions/hostnames/groupIds) met — tool + PATCH /rules/:id; rulePatchSchema covers planId,enabled,conditions,hostnames,groupIds middleware/src/control-agent.ts:1098-1161, middleware/src/routes/rules.ts:59-91, middleware/src/rules.ts:41-52
4. rule_delete met — tool + DELETE /rules/:id middleware/src/control-agent.ts:1163-1182, middleware/src/routes/rules.ts:93-101
5. Deleting a referenced plan is refused / or rule disabled NOT met — neither DELETE /plans/:id nor the plan_delete tool consults stores.rules; no 409, no reference check grep stores\.rules in plans.ts/routes/plans.ts returns nothing

The only gap is criterion 5. A plan delete proceeds even while a match rule
(or a rule chain step) still points at it, orphaning the binding exactly as
the issue's consequences describe.

Files to CHANGE

  • middleware/src/plans.ts — add referencingRules(planId, rules) helper (pure, returns rule ids whose planId or any chain[].planId equals planId).
  • middleware/src/routes/plans.ts — DELETE /plans/:id: consult referencingRules; on a hit return 409 Conflict with { error, code: 'plan_referenced', ruleIds }; do not auto-disable. Update header Last:.
  • middleware/src/control-agent.ts — plan_delete tool: same refusal before stores.plans.delete; throw an explicit message naming the rule ids. Update header Last:.
  • middleware/tests/uc-mw-171-plan-delete-rule-refusal.test.ts — new red-first test file.
  • docs/use-cases/middleware/UC-MW-171-plan-delete-rule-refusal.md — new UC.
  • docs/use-cases/README.md — bump version:; add UC-MW-171 to the index.
  • docs/use-cases/middleware/UC-MW-35-delete.md — add the 409 extension + version bump (this is where plan-delete behaviour lives).

Files NOT to touch

  • middleware/src/rules.ts (schemas already cover AC3) — only read.
  • middleware/src/routes/rules.ts (rule patch/delete already correct) — only read.
  • middleware/src/types.ts and dashboard/src/lib/types.ts — no wire-type change: the refusal adds no field to Plan/Rule (the 409 body is a response shape, not a stored type). Mirror stays byte-identical → check-type-mirror.py unaffected.
  • plans/ (product content) — forbidden.
  • dashboard/** beyond the mirror check (no UI asked for).
  • Pre-existing reds UC-OP-02, UC-MW-19 — left red.

New UC ids to create

  • UC-MW-171 — "Deleting a referenced plan is refused" (next free after
    UC-MW-170; UC-MW-168 absent, UC-MW-169/UC-MW-170 taken; grep confirms
    UC-MW-171 unused).

Tasks

  1. Plan read + scope freeze — this file.
  2. Red-first repro commit — middleware/tests/uc-mw-171-plan-delete-rule-refusal.test.ts:
    • create plan ref-plan + rule bound to it → DELETE /plans/ref-plan must be 409
      (currently 204 → RED).
    • unreferenced plan still deletes → 204 (guards against a blanket block).
    • rule with the plan only in a chain step also blocks.
      Verify RED in isolation, then commit test: repro plan/rule update+delete gaps (red) Refs #87.
  3. Implement — referencingRules helper + refusal in route and tool (see above).
  4. Green — re-run the new file + uc-mw-cluster2-plans.test.ts + uc-mw-100-rules.test.ts;
    commit feat(plans/rules): plan_update + plan_delete + rule_update + rule_delete, refuse plan delete with rule Refs #87.
  5. UCs — add UC-MW-171, update UC-MW-35, bump catalog version + index (separate docs: commit allowed).
  6. Gates — run the §Gates battery below; all exit 0 except the known reds.
  7. Commit + STOP — no push, no PR, no merge. Report to meta/issue-87.report.md.

Refusal contract (the one new behaviour)

  • DELETE /plans/:id and the plan_delete tool both call referencingRules.
  • Referenced → 409 Conflict, body { error: 'plan is referenced by N rule(s)', code: 'plan_referenced', ruleIds: [...] }.
  • Not referenced → unchanged (204 / deleted <id>).
  • No silent rule disabling (that is data loss; the issue allows it but the task says prefer the first branch).

Gates

python3 docs/use-cases/_check.py
python3 scripts/check-ai-headers.py
python3 scripts/check-type-mirror.py
cd middleware && bun test tests/uc-mw-171-plan-delete-rule-refusal.test.ts tests/uc-mw-cluster2-plans.test.ts tests/uc-mw-100-rules.test.ts
cd agent && PATH=/usr/local/go/bin:$PATH /usr/local/go/bin/go test ./...
rg 'Showing lines' --glob '!node_modules' --glob '!.git'

Pre-existing reds UC-OP-02, UC-MW-19 stay red — expected.

# Issue #87 — Plan/rule update+delete; PATCH semantics; orphan prevention Branch: `issue/87-plan-rule-update` (from `origin/agent-develop` @ d6bb5c3). Worktree: `/home/eduardez/workspace/gotoi-wt/issue-87`. ## Scope ### Already met on the base (d6bb5c3) — no work redone The issue was written against an older base. On `d6bb5c3` the tools and routes already exist. Verified by reading the code: | Acceptance criterion | State on base | Evidence | |---|---|---| | 1. `plan_update` PATCH semantics | **met** — `plan_update` tool sends subset; `applyPlanPatch` merges only present keys | `middleware/src/control-agent.ts:990-1039`, `middleware/src/plans.ts:161-217` | | 2. `plan_delete` | **met** — `plan_delete` tool + `DELETE /plans/:id` | `middleware/src/control-agent.ts:1042-1063`, `middleware/src/routes/plans.ts:627-636` | | 2. `plan_archive` | **met** as deprecate — `PATCH {status:'deprecated', replacementId}` → `deprecatePlan` | `middleware/src/routes/plans.ts:549-556`, `middleware/src/plans.ts:219-228` | | 3. `rule_update` (planId/enabled/conditions/hostnames/groupIds) | **met** — tool + `PATCH /rules/:id`; `rulePatchSchema` covers `planId`,`enabled`,`conditions`,`hostnames`,`groupIds` | `middleware/src/control-agent.ts:1098-1161`, `middleware/src/routes/rules.ts:59-91`, `middleware/src/rules.ts:41-52` | | 4. `rule_delete` | **met** — tool + `DELETE /rules/:id` | `middleware/src/control-agent.ts:1163-1182`, `middleware/src/routes/rules.ts:93-101` | | 5. Deleting a referenced plan is refused / or rule disabled | **NOT met** — neither `DELETE /plans/:id` nor the `plan_delete` tool consults `stores.rules`; no `409`, no reference check | grep `stores\.rules` in `plans.ts`/`routes/plans.ts` returns nothing | **The only gap is criterion 5.** A plan delete proceeds even while a match rule (or a rule `chain` step) still points at it, orphaning the binding exactly as the issue's consequences describe. ### Files to CHANGE - `middleware/src/plans.ts` — add `referencingRules(planId, rules)` helper (pure, returns rule ids whose `planId` or any `chain[].planId` equals `planId`). - `middleware/src/routes/plans.ts` — `DELETE /plans/:id`: consult `referencingRules`; on a hit return **409 Conflict** with `{ error, code: 'plan_referenced', ruleIds }`; do not auto-disable. Update header `Last:`. - `middleware/src/control-agent.ts` — `plan_delete` tool: same refusal before `stores.plans.delete`; throw an explicit message naming the rule ids. Update header `Last:`. - `middleware/tests/uc-mw-171-plan-delete-rule-refusal.test.ts` — **new** red-first test file. - `docs/use-cases/middleware/UC-MW-171-plan-delete-rule-refusal.md` — **new** UC. - `docs/use-cases/README.md` — bump `version:`; add UC-MW-171 to the index. - `docs/use-cases/middleware/UC-MW-35-delete.md` — add the 409 extension + version bump (this is where plan-delete behaviour lives). ### Files NOT to touch - `middleware/src/rules.ts` (schemas already cover AC3) — only read. - `middleware/src/routes/rules.ts` (rule patch/delete already correct) — only read. - `middleware/src/types.ts` and `dashboard/src/lib/types.ts` — **no wire-type change**: the refusal adds no field to `Plan`/`Rule` (the 409 body is a response shape, not a stored type). Mirror stays byte-identical → `check-type-mirror.py` unaffected. - `plans/` (product content) — forbidden. - `dashboard/**` beyond the mirror check (no UI asked for). - Pre-existing reds `UC-OP-02`, `UC-MW-19` — left red. ### New UC ids to create - `UC-MW-171` — "Deleting a referenced plan is refused" (next free after `UC-MW-170`; `UC-MW-168` absent, `UC-MW-169`/`UC-MW-170` taken; grep confirms `UC-MW-171` unused). ## Tasks 1. **Plan read + scope freeze** — this file. 2. **Red-first repro commit** — `middleware/tests/uc-mw-171-plan-delete-rule-refusal.test.ts`: - create plan `ref-plan` + rule bound to it → `DELETE /plans/ref-plan` must be **409** (currently 204 → RED). - unreferenced plan still deletes → 204 (guards against a blanket block). - rule with the plan only in a `chain` step also blocks. Verify RED in isolation, then commit `test: repro plan/rule update+delete gaps (red) Refs #87`. 3. **Implement** — `referencingRules` helper + refusal in route and tool (see above). 4. **Green** — re-run the new file + `uc-mw-cluster2-plans.test.ts` + `uc-mw-100-rules.test.ts`; commit `feat(plans/rules): plan_update + plan_delete + rule_update + rule_delete, refuse plan delete with rule Refs #87`. 5. **UCs** — add UC-MW-171, update UC-MW-35, bump catalog version + index (separate `docs:` commit allowed). 6. **Gates** — run the §Gates battery below; all exit 0 except the known reds. 7. **Commit + STOP** — no push, no PR, no merge. Report to `meta/issue-87.report.md`. ## Refusal contract (the one new behaviour) - `DELETE /plans/:id` and the `plan_delete` tool both call `referencingRules`. - Referenced → **409 Conflict**, body `{ error: 'plan is referenced by N rule(s)', code: 'plan_referenced', ruleIds: [...] }`. - Not referenced → unchanged (204 / `deleted <id>`). - No silent rule disabling (that is data loss; the issue allows it but the task says prefer the first branch). ## Gates ``` python3 docs/use-cases/_check.py python3 scripts/check-ai-headers.py python3 scripts/check-type-mirror.py cd middleware && bun test tests/uc-mw-171-plan-delete-rule-refusal.test.ts tests/uc-mw-cluster2-plans.test.ts tests/uc-mw-100-rules.test.ts cd agent && PATH=/usr/local/go/bin:$PATH /usr/local/go/bin/go test ./... rg 'Showing lines' --glob '!node_modules' --glob '!.git' ``` Pre-existing reds `UC-OP-02`, `UC-MW-19` stay red — expected.
Collaborator

DONE — branch issue/87-plan-rule-update (worktree branch; task text said …-update-delete, which does not exist as a ref).

AC audit: AC1–AC4 already satisfied by the PR #94 / #85 merge (plan_update/plan_delete/rule_update/rule_delete tools + PATCH/DELETE routes) — cited file:line in the plan comment. AC5 (referential guard) was the only gap and is implemented:

  • middleware/src/plans.ts referencingRules(planId, rules) — planId or any chain[].planId.
  • DELETE /plans/:id → 409 {code:'plan_referenced', ruleIds} before any store mutation.
  • plan_delete tool → same message naming the rule ids, before stores.plans.delete.
    No auto-disable (avoids silent data loss). New UC-MW-171; UC-MW-35 gains the 409 extension.

Commits (local, not pushed):
bf62634 test: repro plan/rule update+delete gaps (red) Refs #87
bde005e feat(plans/rules): refuse plan delete while a match rule references it Refs #87
9c0519e docs(uc): UC-MW-171 refuses plan delete while a rule references it Refs #87
c3b1fb8 test(uc-mw-171): plan_delete control tool refuses a referenced plan Refs #87

Gates:
docs/use-cases/_check.py → exit 0
scripts/check-ai-headers.py → exit 0 (577 ok)
scripts/check-type-mirror.py → exit 0
cd middleware && bun test → exit 0 (610 pass, 0 fail)
cd agent && go test ./... → exit 1, PRE-EXISTING env failure (/etc/gotoi/agent.json permission denied; identical set in meta/issue-86.gate-agent2.log; my diff touches zero agent/ files)
rg 'Showing lines' → only .md docs that quote the rule; zero source hits.

NOTE: earlier plan comment posted from the worktree copy of forgejo.py; this done comment from the skill copy.

DONE — branch `issue/87-plan-rule-update` (worktree branch; task text said `…-update-delete`, which does not exist as a ref). AC audit: AC1–AC4 already satisfied by the PR #94 / #85 merge (plan_update/plan_delete/rule_update/rule_delete tools + PATCH/DELETE routes) — cited file:line in the plan comment. AC5 (referential guard) was the only gap and is implemented: - `middleware/src/plans.ts` `referencingRules(planId, rules)` — planId or any chain[].planId. - `DELETE /plans/:id` → 409 {code:'plan_referenced', ruleIds} before any store mutation. - `plan_delete` tool → same message naming the rule ids, before stores.plans.delete. No auto-disable (avoids silent data loss). New UC-MW-171; UC-MW-35 gains the 409 extension. Commits (local, not pushed): bf62634 test: repro plan/rule update+delete gaps (red) Refs #87 bde005e feat(plans/rules): refuse plan delete while a match rule references it Refs #87 9c0519e docs(uc): UC-MW-171 refuses plan delete while a rule references it Refs #87 c3b1fb8 test(uc-mw-171): plan_delete control tool refuses a referenced plan Refs #87 Gates: docs/use-cases/_check.py → exit 0 scripts/check-ai-headers.py → exit 0 (577 ok) scripts/check-type-mirror.py → exit 0 cd middleware && bun test → exit 0 (610 pass, 0 fail) cd agent && go test ./... → exit 1, PRE-EXISTING env failure (/etc/gotoi/agent.json permission denied; identical set in meta/issue-86.gate-agent2.log; my diff touches zero agent/ files) rg 'Showing lines' → only .md docs that quote the rule; zero source hits. NOTE: earlier plan comment posted from the worktree copy of forgejo.py; this done comment from the skill copy.
Collaborator

KILLED-LIVE-AUTHORITY on 2026-10-08 20:40 CEST by operator override (operator wants to drain the queue end-to-end; paused gotoi-issue-runner / gotoi-guard / gotoi-integrator / gotoi-run-capture crons for the duration).

Snapshot at kill time:

  • omp session: tmux gotoi-87 killed cleanly. Was mid-stage VII (Finish) — had just landed the 4th commit.
  • Branch: issue/87-plan-rule-update @ c3b1fb8 (4 commits ahead of agent-develop, 0 behind):
    c3b1fb8 test(uc-mw-171): plan_delete control tool refuses a referenced plan Refs #87
    9c0519e docs(uc): UC-MW-171 refuses plan delete while a rule references it Refs #87
    bde005e feat(plans/rules): refuse plan delete while a match rule references it Refs #87
    bf62634 test: repro plan/rule update+delete gaps (red) Refs #87
  • Worktree: clean (no uncommitted changes; nothing to stash).
  • Backup ref: killed-87-capture = c3b1fb8.
  • Status: implement + tests + UCs all landed. Gates not yet re-verified; PR not yet opened; reviewer not yet run.
  • Primary checkout clean (status --porcelain = 0 lines).

The orchestrator is now going to verify gates on the head, open the PR to agent-develop, and post the DONE comment — same path as the stranded-branch recovery from earlier today. Refs #87

KILLED-LIVE-AUTHORITY on 2026-10-08 20:40 CEST by operator override (operator wants to drain the queue end-to-end; paused gotoi-issue-runner / gotoi-guard / gotoi-integrator / gotoi-run-capture crons for the duration). Snapshot at kill time: - omp session: tmux gotoi-87 killed cleanly. Was **mid-stage VII (Finish)** — had just landed the 4th commit. - Branch: issue/87-plan-rule-update @ c3b1fb8 (4 commits ahead of agent-develop, 0 behind): c3b1fb8 test(uc-mw-171): plan_delete control tool refuses a referenced plan Refs #87 9c0519e docs(uc): UC-MW-171 refuses plan delete while a rule references it Refs #87 bde005e feat(plans/rules): refuse plan delete while a match rule references it Refs #87 bf62634 test: repro plan/rule update+delete gaps (red) Refs #87 - Worktree: clean (no uncommitted changes; nothing to stash). - Backup ref: killed-87-capture = c3b1fb8. - Status: implement + tests + UCs all landed. Gates not yet re-verified; PR not yet opened; reviewer not yet run. - Primary checkout clean (status --porcelain = 0 lines). The orchestrator is now going to verify gates on the head, open the PR to agent-develop, and post the DONE comment — same path as the stranded-branch recovery from earlier today. Refs #87
Collaborator

DONE — PR #96 opened: #96

Branch issue/87-plan-rule-update @ c3b1fb8 (4 commits ahead of agent-develop, 0 behind):

  • bf62634 test: repro plan/rule update+delete gaps (red) Refs #87
  • bde005e feat(plans/rules): refuse plan delete while a match rule references it Refs #87
  • 9c0519e docs(uc): UC-MW-171 refuses plan delete while a rule references it Refs #87
  • c3b1fb8 test(uc-mw-171): plan_delete control tool refuses a referenced plan Refs #87

Note on the issue's 5 acceptance criteria:

  • AC #1 plan_update PATCH: met on the base (applyPlanPatch at middleware/src/plans.ts:161-217)
  • AC #2 plan_delete / plan_archive: met (DELETE /plans/:id + plan_delete tool; plan_archive as deprecate)
  • AC #3 rule_update PATCH: met (rulePatchSchema covers planId,enabled,conditions,hostnames,groupIds)
  • AC #4 rule_delete: met (DELETE /rules/:id + rule_delete tool)
  • AC #5 refuse plan-delete when a rule references it: NEW (this PR)

Gates re-verified on head:

  • _check.py / check-ai-headers.py / check-type-mirror.py all exit 0
  • middleware bun test tests/uc-mw-171-plan-delete-rule-refusal.test.ts: 4/4 pass in 9.9 s
  • dashboard vitest: 0 failures
  • agent go test: pre-existing env failures (gzip / network); not from this diff

This was an operator-kicked queue-drain (operator paused gotoi-issue-runner/guard/integrator/run-capture for the duration). Refs #87

DONE — PR #96 opened: https://git.eduard3v.com/EduarD3V/gotoi/pulls/96 Branch issue/87-plan-rule-update @ c3b1fb8 (4 commits ahead of agent-develop, 0 behind): - bf62634 test: repro plan/rule update+delete gaps (red) Refs #87 - bde005e feat(plans/rules): refuse plan delete while a match rule references it Refs #87 - 9c0519e docs(uc): UC-MW-171 refuses plan delete while a rule references it Refs #87 - c3b1fb8 test(uc-mw-171): plan_delete control tool refuses a referenced plan Refs #87 Note on the issue's 5 acceptance criteria: - AC #1 plan_update PATCH: met on the base (applyPlanPatch at middleware/src/plans.ts:161-217) - AC #2 plan_delete / plan_archive: met (DELETE /plans/:id + plan_delete tool; plan_archive as deprecate) - AC #3 rule_update PATCH: met (rulePatchSchema covers planId,enabled,conditions,hostnames,groupIds) - AC #4 rule_delete: met (DELETE /rules/:id + rule_delete tool) - AC #5 refuse plan-delete when a rule references it: NEW (this PR) Gates re-verified on head: - _check.py / check-ai-headers.py / check-type-mirror.py all exit 0 - middleware bun test tests/uc-mw-171-plan-delete-rule-refusal.test.ts: 4/4 pass in 9.9 s - dashboard vitest: 0 failures - agent go test: pre-existing env failures (gzip / network); not from this diff This was an operator-kicked queue-drain (operator paused gotoi-issue-runner/guard/integrator/run-capture for the duration). Refs #87
gotoi-agent changed reference from issue/87-plan-rule-update to issue/87-plan-rule-update 2026-10-08 20:44:17 +02:00
Collaborator

REVIEW: CLEAN — findings: AC1-4 cites verified live (plan_update patchFrom/applyPlanPatch partial merge; rule_update/rule_delete tool+route; deprecate covers archive) exercised green via uc-mw-cluster2-plans + uc-mw-100-rules (25 pass); AC5 verified both halves — referencingRules covers planId AND chain[].planId, DELETE /plans/:id returns 409 {code:'plan_referenced',ruleIds} before stores.plans.delete, plan_delete tool throws naming rule ids before delete (only two plans.delete call sites in src, both guarded); plan fidelity — all 7 in-scope files touched, UC-MW-100/123 touched only for bidirectional related (checker-required); repo law — _check.py / check-ai-headers.py / check-type-mirror.py all exit 0, 'Showing lines' hits only in docs quoting the rule; test integrity — nothing deleted/skipped/weakened, new tests assert ruleIds named and plan survives (4 pass); report honesty — checker claims re-run true, diff touches zero agent/ files consistent with env go-test claim, 9 files +244/-16 matches, README has no version line as claimed (full-suite 610-pass NOT re-run per instructions); UNFIXED: none

REVIEW: CLEAN — findings: AC1-4 cites verified live (plan_update patchFrom/applyPlanPatch partial merge; rule_update/rule_delete tool+route; deprecate covers archive) exercised green via uc-mw-cluster2-plans + uc-mw-100-rules (25 pass); AC5 verified both halves — referencingRules covers planId AND chain[].planId, DELETE /plans/:id returns 409 {code:'plan_referenced',ruleIds} before stores.plans.delete, plan_delete tool throws naming rule ids before delete (only two plans.delete call sites in src, both guarded); plan fidelity — all 7 in-scope files touched, UC-MW-100/123 touched only for bidirectional related (checker-required); repo law — _check.py / check-ai-headers.py / check-type-mirror.py all exit 0, 'Showing lines' hits only in docs quoting the rule; test integrity — nothing deleted/skipped/weakened, new tests assert ruleIds named and plan survives (4 pass); report honesty — checker claims re-run true, diff touches zero agent/ files consistent with env go-test claim, 9 files +244/-16 matches, README has no version line as claimed (full-suite 610-pass NOT re-run per instructions); UNFIXED: none
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
EduarD3V/gotoi#87
No description provided.