From bcd497bf9e565b7f96ebc856d245a3d0c47b680d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Topi=20J=C3=A4rvinen?= Date: Fri, 11 Sep 2026 18:42:46 +0300 Subject: [PATCH 1/2] fix: validate upgrade refresh before writes and preserve pytest status --- CHANGELOG.md | 10 + docs/agentic-dev-kit/workflows/upgrade.md | 102 +++++++--- kit-manifest.json | 10 +- .../approval.json | 8 + .../approved-scope.md | 101 ++++++++++ .../original-review.json.gz | Bin 0 -> 106182 bytes ...item5-b-source-review-repair_2026-09-11.md | 49 +++++ scripts/conftest.py | 3 +- scripts/tests/test_init_sh.py | 185 +++++++++++++----- scripts/tests/test_portability.py | 39 ++++ scripts/tests/test_state_guard.py | 72 ++++++- 11 files changed, 490 insertions(+), 89 deletions(-) create mode 100644 saved_plans/phase5-item5-b-source-review-repair-evidence_2026-09-11/approval.json create mode 100644 saved_plans/phase5-item5-b-source-review-repair-evidence_2026-09-11/approved-scope.md create mode 100644 saved_plans/phase5-item5-b-source-review-repair-evidence_2026-09-11/original-review.json.gz create mode 100644 saved_plans/phase5-item5-b-source-review-repair_2026-09-11.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 282e1235..5df5d162 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,16 @@ starts. --- +## Pending PR identifier — 2026-09-11 + +- **CHANGED** — Refresh the shared `upgrade.md` workflow and the shipped test files + together. Upgrade now refuses invalid refresh destinations or unreadable manifest + scope before replacing the installer, preserves template declines, and stops after + a failed required command. Correct the named path or input before retrying. +- **CHANGED** — CI interpreting the state-leak guard's exit status must retain + pytest's interruption/internal-error handling; leaks still fail an otherwise + successful session. Refresh `scripts/conftest.py` and its state-guard tests together. + ## #731 — 2026-09-10 - **CHANGED — state-write detection:** refresh the installed engine-root diff --git a/docs/agentic-dev-kit/workflows/upgrade.md b/docs/agentic-dev-kit/workflows/upgrade.md index bb11f8e9..3e1444d8 100644 --- a/docs/agentic-dev-kit/workflows/upgrade.md +++ b/docs/agentic-dev-kit/workflows/upgrade.md @@ -1,10 +1,10 @@ # Upgrade -Upgrade this repo's agentic-dev-kit installation. Runs on a branch. Two of its file -replacements are unconditional and named here rather than implied — Step 2 overwrites -`init.sh` and `docs/templates/*.tmpl` with the fetched kit's copies, because refreshing the -installer is the point of the step. **Everything else is gated**: `init.sh --no-clobber` for -the seeded docs, and your per-file decision in Step 3 for the engines. +Upgrade this repo's agentic-dev-kit installation. Runs on a branch. After preflight, +Step 2 replaces `init.sh` with the fetched kit's copy to refresh the installer. +Template refresh respects the baseline's recorded `not_installed` decisions; +a partial record skips template copies. Seeded docs use `init.sh --no-clobber`, +and Step 3 requires your per-file decision for engines. **Do not simplify that back to a blanket "non-destructive".** It said "never replaces a file without knowing it is safe to replace" for as long as Step 2 ran `init.sh` bare, which @@ -20,8 +20,8 @@ instruction it produced was *don't bother looking*, which is the opposite of wha was closed to make possible. So: **run Step 1's `kit_doctor` before Step 2 overwrites anything** — a locally-edited installer shows up there as `LOCALLY EDITED` and an out-of-date one as `STALE`, which is the difference between an edit you are about to lose -and a version you are meant to take. The unconditional `cp` itself is unchanged and -`#339` stays open for it. +and a version you are meant to take. Installer refresh still replaces local edits +after preflight. > **The invariant this rests on.** Engines are **kit-owned**; config is **adopter-owned**. > Everything project-specific — paths, tracker, review-bot markers, CI policy, model @@ -35,7 +35,8 @@ and a version you are meant to take. The unconditional `cp` itself is unchanged Four shapes exist in the wild and they need different handling. Determine which: ```bash -ls config/dev-model.yaml 2>/dev/null && echo "has config" || echo "NO CONFIG" +REPO="$(git rev-parse --show-toplevel)" || exit 1 +test -f "$REPO/config/dev-model.yaml" && echo "has config" || echo "NO CONFIG" ``` - **No `config/dev-model.yaml`** → this repo predates the config surface entirely (a kit @@ -55,7 +56,7 @@ from here every write must name which one.** Bind both roots now, before the fir write, and use them for the rest of the workflow: ```bash -REPO="$(git rev-parse --show-toplevel)" # the repo being upgraded +REPO="${REPO:?REPO is not set — re-run the config check}" # the repo being upgraded KIT=/tmp/agentic-dev-kit # the kit you are upgrading TO echo "REPO=$REPO"; echo "KIT=$KIT"; echo "pwd=$(pwd)" ``` @@ -360,10 +361,9 @@ Take the fetched kit's copy first: ```bash cd "$REPO" || exit 1 # every write below lands here, not in $KIT -cp "${KIT:?KIT is not set — re-run Step 0}/init.sh" "${REPO:?REPO is not set — re-run Step 0}/init.sh" -chmod +x "${REPO:?REPO is not set — re-run Step 0}/init.sh" # the kit ships it 100755; a copy can lose the bit -mkdir -p "${REPO:?REPO is not set — re-run Step 0}/docs/templates" -_gate_failed=0 +# Collect the permitted copies without changing the destination. +set -- +_partial=0 for _tmpl in "${KIT:?KIT is not set — re-run Step 0}"/docs/templates/*.tmpl; do _rel="docs/templates/$(basename "$_tmpl")" python3 -c 'import json,pathlib,sys @@ -395,10 +395,10 @@ sys.exit(0 if sys.argv[2] in declared else 1)' \ "${REPO:?REPO is not set — re-run Step 0}" "$_rel" && _verdict=0 || _verdict=$? case "$_verdict" in 0) echo "declined (recorded in not_installed) — not copied: $_rel" ;; - 1) cp "$_tmpl" "${REPO:?REPO is not set — re-run Step 0}/$_rel" ;; + 1) set -- "$@" "$_tmpl" ;; 3) echo "no declared scope recorded — not copied: $_rel"; _partial=1 ;; *) echo "STOP: $REPO/kit-manifest.json is not a readable manifest, so the declared set is unknown. Copied nothing." >&2 - _gate_failed=1; break ;; + exit 1 ;; esac done if [ "${_partial:-0}" -ne 0 ]; then @@ -409,11 +409,46 @@ if [ "${_partial:-0}" -ne 0 ]; then echo " whole key (see Step 5, and kit #388). Reconcile the paths Step 4 named and" >&2 echo " re-run this block if you want the templates refreshed." >&2 fi -if [ "$_gate_failed" -ne 0 ]; then - echo "Not running init.sh. Fix kit-manifest.json, then re-run this block." >&2 -else - "${REPO:?REPO is not set — re-run Step 0}/init.sh" --no-clobber -fi +# Check every refresh destination before the first write. No concurrent writer +# may alter these paths between preflight and the copies. +python3 -B - "${REPO:?REPO is not set — re-run Step 0}" "$@" <<'PYREFRESH' || exit 1 +import os +from pathlib import Path +import stat +import sys + +repo = Path(sys.argv[1]) +try: + if not repo.is_absolute() or repo.resolve() != repo or not repo.is_dir(): + raise ValueError(f"repository is not an absolute, unaliased directory: {repo}") + targets = [(repo / "init.sh", False), (repo / "docs", True), + (repo / "docs/templates", True)] + targets.extend((repo / "docs/templates" / Path(source).name, False) + for source in sys.argv[2:]) + for target, directory in targets: + for path in [*reversed(target.relative_to(repo).parents)][1:]: + parent = repo / path + if os.path.lexists(parent): + mode = parent.lstat().st_mode + if not stat.S_ISDIR(mode): + raise ValueError(f"refresh parent is not a real directory: {parent}") + if os.path.lexists(target): + info = target.lstat() + valid = stat.S_ISDIR(info.st_mode) if directory else ( + stat.S_ISREG(info.st_mode) and info.st_nlink == 1) + if not valid: + raise ValueError(f"refresh destination has an unexpected kind or alias: {target}") +except (OSError, ValueError) as exc: + print(f"STOP: {exc}. Copied nothing.", file=sys.stderr) + sys.exit(1) +PYREFRESH +cp "${KIT:?KIT is not set — re-run Step 0}/init.sh" "${REPO:?REPO is not set — re-run Step 0}/init.sh" || exit 1 +chmod +x "${REPO:?REPO is not set — re-run Step 0}/init.sh" || exit 1 +mkdir -p "${REPO:?REPO is not set — re-run Step 0}/docs/templates" || exit 1 +for _tmpl in "$@"; do + cp "$_tmpl" "${REPO:?REPO is not set — re-run Step 0}/docs/templates/$(basename "$_tmpl")" || exit 1 +done +"${REPO:?REPO is not set — re-run Step 0}/init.sh" --no-clobber || exit 1 ``` The refreshed migrator also owns the additive `parallel:` launcher block. It preserves @@ -525,8 +560,8 @@ implementation rather than continuing to invent one: worse half; - the refusal has to stop **the workflow**, not just the loop. `break` leaves the `for` loop and the next line still runs `init.sh` — printing "Copied nothing" and then - proceeding past the point the prose calls a hard stop. `_gate_failed` is what makes the - stop real; + proceeding past the point the prose calls a hard stop. `exit 1` stops before any + refresh write or initialization; - a well-formed object is not a readable scope. `{"kit_commit": …, "not_installed": 5}` raised `TypeError` on the membership test and exited 1 (copy); a **string** there was worse than that, because `in` on a string is a SUBSTRING test — no error, and a @@ -742,8 +777,9 @@ entries are exactly where the risk is. workflow, then take the rendered binding. Stop for irreconcilable local behavior rather than retaining an adapter that bypasses the new gate. PR `#595`'s `post-merge-systemize` entry is the worked instance. -- **Templates** (`docs/templates/`) — refresh freely; the *rendered* docs are yours and - are never touched. +- **Templates** (`docs/templates/`) — refresh only within the recorded install set, + using Step 2's gate. Preserve `not_installed` declines and skip refresh when the + baseline is partial. The *rendered* docs are yours and are never touched. - **`.claude/settings.json`** — if this repo has its own, **merge** the kit's hooks and permissions into it rather than replacing; it likely carries project-specific entries. @@ -781,13 +817,14 @@ Commit the rewritten `kit-manifest.json` with the rest of the upgrade. ## Step 5 — Verify ```bash -uv run "${REPO:?REPO is not set — re-run Step 0}"//kit_doctor.py --manifest /tmp/agentic-dev-kit/kit-manifest.json -tmp="$(mktemp -d)" && DEVKIT_STATE_ROOT="$tmp" uv run --with pytest --with pyyaml python "${REPO:?REPO is not set — re-run Step 0}"//run_installed_tests.py --root "${REPO:?REPO is not set — re-run Step 0}" -uv run "${REPO:?REPO is not set — re-run Step 0}"//check_doc_budget.py +uv run "${REPO:?REPO is not set — re-run Step 0}"//kit_doctor.py --manifest /tmp/agentic-dev-kit/kit-manifest.json || exit 1 +tmp="$(mktemp -d)" || exit 1 +DEVKIT_STATE_ROOT="$tmp" uv run --with pytest --with pyyaml python "${REPO:?REPO is not set — re-run Step 0}"//run_installed_tests.py --root "${REPO:?REPO is not set — re-run Step 0}" || exit 1 +uv run "${REPO:?REPO is not set — re-run Step 0}"//check_doc_budget.py || exit 1 ``` -**`DEVKIT_STATE_ROOT` is not optional here, and the `&&` is what makes it -fail closed.** `/pr_watch.py` computes its persistence root once, at import +**`DEVKIT_STATE_ROOT` is not optional here. Each command must succeed before +the next runs, including creation of the temporary root.** `/pr_watch.py` computes its persistence root once, at import time — the only engine that reaches `state/` at all, and it resolves at import rather than per call, so an override has to be in the environment before the process starts. The resolution has three branches, not two: @@ -813,13 +850,14 @@ declined directory to pytest and stopping before an installed test can run. That current form of the case `#40`/`#132` first exposed. -Write it as the two-step `tmp="$(mktemp -d)" && …`, not as an inline +Keep the separate assignment and its `|| exit 1` check before the test command, +not an inline `DEVKIT_STATE_ROOT=$(mktemp -d) …`. The inline form fails **open**: a failed `mktemp -d` prints nothing to stdout, so the var is set to the empty string, and `_resolve_state_root` treats an empty value as *no override at all* and falls back to the repo default — landing the whole suite in live `state/`, -which is the one outcome this line exists to prevent. The `&&` makes the -assignment's exit status gate the run, so a failed `mktemp` skips the tests +which is the one outcome this line exists to prevent. The explicit refusal makes +the assignment's exit status gate the run, so a failed `mktemp` skips the tests instead of silently redirecting them at the thing they would damage. `kit_doctor` should now report zero mismatches of every kind — `differs`, `STALE`, diff --git a/kit-manifest.json b/kit-manifest.json index b49e91b5..bd9d30b2 100644 --- a/kit-manifest.json +++ b/kit-manifest.json @@ -72,7 +72,7 @@ }, "docs/agentic-dev-kit/workflows/upgrade.md": { "role": "workflow", - "sha256": "c29baa57bc48b2d74e5e553745028f84bd2e8d400e88d891c9336d8496724cf6" + "sha256": "ef328af59f53a619e373c8f9bead1daf20b1f58715fa27c1e583b66ee0513623" }, "docs/agentic-dev-kit/workflows/wrap-up.md": { "role": "workflow", @@ -120,7 +120,7 @@ }, "scripts/conftest.py": { "role": "engine", - "sha256": "ecebbbc42cd6a8960e187abda41c5917e39aa1623b438ad932c7102cdf3ab03c" + "sha256": "b43fc728bbb1a5a71e6f91afcd37a07940014cceb34f073a0617fe2047a75e16" }, "scripts/dev_session.sh": { "role": "engine", @@ -265,7 +265,7 @@ }, "scripts/tests/test_init_sh.py": { "role": "test", - "sha256": "87cca005542d8dfc3ff923f5706ae77a63a4068b8c852499c2ac05718db323bc" + "sha256": "41ad37977dad41e6ec739bef369138d93e1f4ad9ff7036172ee8e61cb36c49a4" }, "scripts/tests/test_kit_doctor.py": { "role": "test", @@ -297,7 +297,7 @@ }, "scripts/tests/test_portability.py": { "role": "test", - "sha256": "6d889025b72306a4dfe96fcf3eefa8b7c75d7f08112003e49ecec6c3f4f27e0b" + "sha256": "0bc0e8fc7deb7a10b580c21a10670b3a04b802518d486ebcf062cb894cd8c1ec" }, "scripts/tests/test_pr_followup_hook.py": { "role": "test", @@ -321,7 +321,7 @@ }, "scripts/tests/test_state_guard.py": { "role": "test", - "sha256": "9420de32bcba5232f13e9d8258de6f5c08ccb0a398513ff83e01cd731f377613" + "sha256": "e4a4c5614250ac46509e706507317d1cb40338b1bba51699c902b7269bc84433" }, "scripts/verify_live_validation_bundle.py": { "role": "repo-only", diff --git a/saved_plans/phase5-item5-b-source-review-repair-evidence_2026-09-11/approval.json b/saved_plans/phase5-item5-b-source-review-repair-evidence_2026-09-11/approval.json new file mode 100644 index 00000000..54e11b6b --- /dev/null +++ b/saved_plans/phase5-item5-b-source-review-repair-evidence_2026-09-11/approval.json @@ -0,0 +1,8 @@ +{ + "date": "2026-09-11", + "operator_text": "I approve that repair, its tests and release metadata, review and merge when clean, then preparation of a revised retained-update packet", + "scope_record": "saved_plans/phase5-item5-b-update02-review-triage_2026-09-11.md", + "scope_record_sha256": "88a76c174ee597c219773db799d393d704bf173002e1238fd70d3da69e19ee3a", + "retained_writes_approved": false, + "preceding_head": "57b697f7d93951ba3a1b1bd0c106e155a6ae89ca" +} diff --git a/saved_plans/phase5-item5-b-source-review-repair-evidence_2026-09-11/approved-scope.md b/saved_plans/phase5-item5-b-source-review-repair-evidence_2026-09-11/approved-scope.md new file mode 100644 index 00000000..062fe074 --- /dev/null +++ b/saved_plans/phase5-item5-b-source-review-repair-evidence_2026-09-11/approved-scope.md @@ -0,0 +1,101 @@ +# ITEM5-B-UPDATE-02 — current review triage + +**Source-scope decision pending; retained execution remains unapproved.** The +prepared source remains `e6d6e77d118454349f8e8bb046e99ef3009c5f5c`. Do not edit its +frozen payload copies to satisfy a review or obtain UPDATE-02 approval while the +source findings below lack an operator disposition. This record proposes a separate +kit-only repair; it does not approve that repair, a deferral or a new retained source. + +## Receipt and verification + +The complete [CodeRabbit review](https://github.com/topij/agentic-dev-kit/pull/733#pullrequestreview-5178085353) +of `cf373efd3a4d00b36987f73574d567eef004594a` was read with paginated `gh api` +review, inline-comment and issue-comment requests from +`/Users/topi/Coding/agentic-dev-kit` on 2026-09-11. The +[raw receipt and source comparison](phase5-item5-b-update02-evidence_2026-09-11/coderabbit-current-review.json.gz) +preserve complete bodies, including the combined inline findings and top-level +nitpick, before any following fix. The bot excluded compressed evidence; its review +is not a claim that it inspected those archives. + +`git show` and `git diff 60fe0dc7ad68922d064c0cf401cff2c4c6d607ac e6d6e77d118454349f8e8bb046e99ef3009c5f5c -- ` +in that directory at `cf373efd3a4d00b36987f73574d567eef004594a` on 2026-09-11 +established that the supplied workflow, conftest and state-guard test payloads equal +the selected source and cockpit files. The cited workflow sections and session-finish +hook predate #731; these findings are not newly introduced #731 regressions. +The evidence retains each payload digest, source blob and actual source diff. + +The documented config-check command, run from the cockpit root and then its `docs` +subdirectory at that same revision/date, found the root config but printed +`NO CONFIG` from `docs`. An isolated invocation of the extracted session-finish +hook, with a synthetic leak snapshot and session, replaced interruption and +internal-error statuses with the test-failure status. That is a bounded hook probe, +not a nested pytest session or retained-fixture test. No generic upgrade mutation, +symlink reproduction, initialization or retained writes ran during this triage. + +## Findings and proposed disposition + +| Review finding | Assessment and boundary | +|---|---| +| [Template contract](https://github.com/topij/agentic-dev-kit/pull/733#discussion_r3988648287) | Valid inherited contradiction: the opening and later free-refresh instruction conflict with `not_installed`. A source repair must preserve recorded template declines. | +| [Config path](https://github.com/topij/agentic-dev-kit/pull/733#discussion_r3988648291) | Reproduced inherited working-directory error. Resolve the intended repo before the config probe and use its absolute path. | +| [Manifest preflight](https://github.com/topij/agentic-dev-kit/pull/733#discussion_r3988648298) | Valid inherited ordering problem: init is overwritten before the manifest refusal. Preserve the distinction the bot's generated prompt conflates: corrupt/dangling manifests stop before mutation and initialization; a valid partial record skips template refresh but retains its existing initialization route. | +| [Destination aliases and failed mutations](https://github.com/topij/agentic-dev-kit/pull/733#discussion_r3988648306) | The combined comment identifies inherited destination-validation and unchecked-command gaps in generic upgrade. Static source inspection supports them; this triage did not reproduce writes through aliases. The local UPDATE-02 procedure does not execute generic upgrade or init and already requires destination checks. Repairing the shipped workflow is separate scope. | +| [Verification command status](https://github.com/topij/agentic-dev-kit/pull/733#discussion_r3988648314) | Valid inherited shell-block gap: later successful commands can mask earlier failures. The source workflow must stop on an unsuccessful required check. UPDATE-02 separately records each command's result. | +| [Pytest exit status](https://github.com/topij/agentic-dev-kit/pull/733#discussion_r3988648316) | The bounded hook probe confirms the inherited overwrite. A source repair must retain non-OK statuses and preserve the leak message; nested-session coverage is required before delivery. | +| [Validator Git environment](https://github.com/topij/agentic-dev-kit/pull/733#discussion_r3988648327) | Disputed: refusal before Git is the declared safety contract, not an accidental availability failure. The audit refuses inherited controls before Git reads; `check=True` prevents the revision command after refusal. The parent environment is unchanged between that check and the revision read. Silently sanitizing only validation would cease checking the environment later commands use. Keep refusal and require the operator to correct the invoking environment explicitly. | +| [Nested pytest timeout](https://github.com/topij/agentic-dev-kit/pull/733#pullrequestreview-5178085353) | Valid inherited harness limitation: `_run_pytest` lacks a timeout. A bounded source follow-up can report timeout with captured output. This does not extend the accepted state-root special-file detection scope. | + +The [existing environment proof](phase5-item5-b-update02-evidence_2026-09-11/runtime-guard-proof.json.gz) +records actual refusal and mutation/restoration evidence. It is preserved historical +evidence; no security probe or failed reviewer was rerun to answer the bot. + +These source findings remain open pending a scope decision. Recording them here +is not operator acceptance or a tracker deferral. No tracker payload is authorized. +The [incomplete adversarial receipt](https://github.com/topij/agentic-dev-kit/pull/733#issuecomment-5633204702) +also remains incomplete. CodeRabbit's delivered review does not retrospectively +complete that lens or review compressed evidence it excluded. + +## Proposed bounded kit-only follow-up + +After explicit approval, repair the active kit source in a separate branch/ready PR: + +- `docs/agentic-dev-kit/workflows/upgrade.md`: correct the template contract and + initial config-root lookup; perform read-only scope and destination validation + before mutation; stop on failed writes or required verification. Preserve absent, + partial, corrupt/dangling and recorded-decline distinctions. +- `scripts/conftest.py`: preserve incoming non-OK pytest exit status when reporting + a leak; retain the ordinary successful-session-to-failure transition and message. +- `scripts/tests/test_init_sh.py`, `scripts/tests/test_portability.py` and + `scripts/tests/test_state_guard.py`: use the existing workflow/hook harnesses for + the changed paths; cover preflight-before-write, command failure, declared scope, + alias refusal, config lookup from a subdirectory and interrupted/internal-error + nested sessions. Bound the nested child pytest helper and retain timeout output. +- `CHANGELOG.md` and the generated source `kit-manifest.json`: record the observable + contract changes and publish matching source hashes through the existing process. +- Scoped kit execution/handoff/sprint records: retain full review receipts before + fixes, full `make test` output, separate #561 shell parses, and #393 disclosure. + Finish required independent review and pr-watch before the kit repair's merge. + +This does not authorize editing UPDATE-02's frozen source or payloads in place. +After the separate repair is delivered, prepare a new exact source selection, +payload hashes, destination ledger, predicted baseline, verification and approval +question against fresh read-only retained checkpoints. Preserve the old packet, +questions, ledgers and evidence. The source revision for that replacement is not +known before delivery and must not be invented now. + +**Scope question:** Do you approve this separate kit-only follow-up for the source +findings above, including its listed tests, release metadata and scoped kit records, +with a ready PR, required review and merge when clean, followed by preparation of a +revised retained-update packet, while retained fixture/source writes and all existing +fixture/client/settings/tracker exclusions remain prohibited? + +This question approves no retained execution. The original exact UPDATE-02 +[approval question](phase5-item5-b-update02-decision_2026-09-11.md#exact-decision-and-next-session) +remains preserved and unanswered. Source-scope disposition and required kit review +must precede asking it or its replacement. + +**Next session:** obtain the source-scope decision above, then follow that decision; +resolve required-review availability without bypassing the recorded restriction. +Phase 5 item 5 remains incomplete. Item 6 and its replay remain complete, #723's +approved deferral and #585's earlier placement remain, and #724 delivered the #722 +batch. The friction sweep stays parked; no exercise is repeated or re-credited. diff --git a/saved_plans/phase5-item5-b-source-review-repair-evidence_2026-09-11/original-review.json.gz b/saved_plans/phase5-item5-b-source-review-repair-evidence_2026-09-11/original-review.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..c8735f008694177a61473bc6c1c6e46d78ff1201 GIT binary patch literal 106182 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%0AB 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

(e?yqPRX1wAkAy`ON5_v&>LQCCk%zgmXyj4T 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 W53VEm@c;7eFaIAGJ$#4{tVp! literal 0 HcmV?d00001 diff --git a/saved_plans/phase5-item5-b-source-review-repair_2026-09-11.md b/saved_plans/phase5-item5-b-source-review-repair_2026-09-11.md new file mode 100644 index 00000000..ba5428df --- /dev/null +++ b/saved_plans/phase5-item5-b-source-review-repair_2026-09-11.md @@ -0,0 +1,49 @@ +# ITEM5-B source-review repair + +The operator approved the [bounded kit-only scope](phase5-item5-b-source-review-repair-evidence_2026-09-11/approved-scope.md) +on 2026-09-11: “I approve that repair, its tests and release metadata, review and +merge when clean, then preparation of a revised retained-update packet”. The +[approval record](phase5-item5-b-source-review-repair-evidence_2026-09-11/approval.json) +binds the scope bytes. This authorization covers the separate source repair, +its tests/release metadata, required review and merge when clean, followed by +preparation. It grants no retained fixture/source write or retained execution. + +The [complete original review](phase5-item5-b-source-review-repair-evidence_2026-09-11/original-review.json.gz) +was preserved and read before source fixes. It retains the complete CodeRabbit +review at `cf373efd3a4d00b36987f73574d567eef004594a` and the prior source comparison. +The approved changes repair inherited upgrade and test-harness behavior; they do +not change #731's delivered history or the original UPDATE-02 payloads and ledgers. + +The source branch starts at `bc0c33a3af93d78545050612649f49fa72107a40`, the #732 +merge read back from `origin/main` with `git fetch --no-tags origin main` and +`git rev-parse origin/main` in `/Users/topi/Coding/agentic-dev-kit` on 2026-09-11. +Kit #731 remains the earlier repair at `e6d6e77d118454349f8e8bb046e99ef3009c5f5c`. +PR #733 retains the unapproved packet and its incomplete independent-review receipts. +The new source review cannot retrospectively complete those receipts. + +The implementation moves manifest/scope decisions and refresh-destination checks +before the first copy, preserves recorded template declines and partial-record +handling, anchors the initial config probe, and stops on failed required commands. +Refresh preflight rejects existing destination aliases and unexpected file kinds; +its stated operating condition forbids concurrent writes between check and copy. +The pytest leak hook retains non-OK exit statuses, and the nested helper reports +timeouts with captured output. The inherited special-file-root detector limitation +remains accepted and unextended; ownership acceptance does not verify functionality +or field exit. + +Validation and complete source-review/delivery receipts will be appended after the +actual commands finish. Preserve #393 as a separate known test failure and cover +#561's recipe gap with individual shell parses. Do not infer source coverage from +installed-fixture results or from an incomplete reviewer. + +**Next:** finish source verification and required review, then merge under the +operator's scoped authority. Prepare a replacement retained-update packet against +the delivered immutable source with a fresh read-only checkpoint comparison, new +hash-bound payloads/ledger/baseline prediction, preservation/verification/rollback +and exact approval question. Preserve UPDATE-01's consumed decision and historical +UPDATE-02 records. No retained update follows without its separate exact approval. + +Phase 5 item 5 remains incomplete; item 6 and replay evidence remain complete. +Do not repeat or re-credit cs-toolkit #2222/#2223/#2255. #723 remains the approved +upstream deferral; #585 remains earlier outside Phase 6; #724 delivered #722's batch. +The friction sweep stays parked pending its exact operator decision. diff --git a/scripts/conftest.py b/scripts/conftest.py index f72f3ae7..c0623376 100644 --- a/scripts/conftest.py +++ b/scripts/conftest.py @@ -375,4 +375,5 @@ def pytest_sessionfinish(session: pytest.Session, exitstatus: int) -> None: # The verdict must survive the message having nowhere to go. print(detail, file=sys.stderr) session.shouldfail = summary - session.exitstatus = pytest.ExitCode.TESTS_FAILED + if exitstatus == pytest.ExitCode.OK: + session.exitstatus = pytest.ExitCode.TESTS_FAILED diff --git a/scripts/tests/test_init_sh.py b/scripts/tests/test_init_sh.py index 20a120a9..dfa567c0 100644 --- a/scripts/tests/test_init_sh.py +++ b/scripts/tests/test_init_sh.py @@ -4794,7 +4794,7 @@ def _upgrade_init_argv() -> list[str]: assert len(lines) == 1, f"expected one init.sh invocation, found {lines!r}" argv = shlex.split(lines[0].split("#")[0]) assert argv[0].endswith("init.sh"), argv - return argv[1:] + return argv[1:argv.index("||")] if "||" in argv else argv[1:] @pytest.mark.kit_repo_only("docs/templates", "docs/agentic-dev-kit/workflows/upgrade.md") @@ -4869,51 +4869,19 @@ def test_upgrade_workflows_init_invocation_adds_the_triage_config( def _upgrade_template_copy_block() -> str: - """The Step 2 refresh block from upgrade.md, minus the two lines that need a - real kit checkout and a real installer. + """Execute the refresh block, retaining its preflight and mutation ordering. - Anchored on the `cp` of `init.sh` like `_upgrade_init_argv`, so a future code - block elsewhere in the document cannot be picked up instead. + Only the owning-directory change is omitted so the wrong-cwd regression can + check absolute destinations independently. The initializer is stubbed by the + caller; its copy and chmod now stay in the block being exercised. """ - # The `init.sh` INVOCATION is kept and stubbed by `_run_template_copy`, not - # stripped. Stripping it is how a HIGH went uncaught: the gate's refusal used - # `break`, which leaves the `for` loop while the next line runs the installer - # anyway — "Copied nothing" followed by the workflow proceeding past its own - # hard stop. No test could see it while the interaction was cut out of the - # extract (review panel, adversarial lens). - # - # `cd` still goes, and for the opposite reason: keeping it would make - # `..._writes_into_repo_even_when_the_shell_sits_in_the_kit_clone` vacuous, - # since the block would put itself in the right tree before writing. Its - # presence in the SHIPPED block is asserted separately below. - kept = [ - line - for line in _step2_refresh_block().splitlines() - # `cd "$REPO"` specifically, not any `cd `. An over-broad strip is how - # the round-2 HIGH stayed invisible: whatever the extract removes, no - # test can see. If Step 2 ever gains a second `cd`, this must fail - # loudly rather than quietly review a block that is not what ships. - if not re.match( - r'^\s*(cd "\$REPO"|cp "(\$KIT|\$\{KIT:\?[^}]*\})/init\.sh"|chmod \+x)', - line, - ) - ] - body = "\n".join(kept) - # Asserted against the SHIPPED block, not the stripped one, and that is the - # point. The `cd` has to be stripped for the extracted body to run against a - # fixture, which left it pinned by nothing: delete `cd "$REPO"` from - # upgrade.md and every test in this section still passes, while `init.sh` - # resolves the config and `docs/templates/*.tmpl` against the KIT clone — - # #399's exact failure, one line over from the one being guarded. Found by - # the review bot on PR #401. - assert re.search(r'^\s*cd "\$REPO"', _step2_refresh_block(), re.M), ( - "Step 2 no longer cds into $REPO before running init.sh — the installer " - "resolves config and templates against the working directory (#399)" - ) - assert "not_installed" in body, ( - "the Step 2 code block no longer consults `not_installed` — the gate moved " - "into prose, or was removed (#398)" + block = _step2_refresh_block() + assert re.search(r'^\s*cd "\$REPO"', block, re.M) + body = "\n".join( + line for line in block.splitlines() + if not re.match(r'^\s*cd "\$REPO"', line) ) + assert "not_installed" in body return body @@ -4922,6 +4890,7 @@ def _fake_kit_templates(tmp_path: Path) -> Path: source path is hardcoded (that hardcoding is #343, not this test's subject).""" src = tmp_path / "kit" / "docs" / "templates" src.mkdir(parents=True) + (src.parent.parent / "init.sh").write_text("#!/bin/sh\nexit 0\n") for name in ("handoff.md.tmpl", "friction-log.md.tmpl", "AGENTS.md.tmpl"): (src / name).write_text(f"# {name}\n", encoding="utf-8") return src @@ -4942,7 +4911,7 @@ def _run_template_copy( # a fixture and tell us nothing about the guard. block = _upgrade_template_copy_block() stubbed = re.sub( - r'^(\s*)"(?:\$REPO|\$\{REPO:\?[^}]*\})/init\.sh" --no-clobber\s*$', + r'^(\s*)"(?:\$REPO|\$\{REPO:\?[^}]*\})/init\.sh" --no-clobber(?: \|\| exit 1)?\s*$', r'\1: > "$REPO/INIT_SH_RAN"', block, flags=re.M, @@ -6072,3 +6041,131 @@ def test_the_permissions_advisory_says_it_is_optional(tmp_path: Path) -> None: flowed = " ".join(block.split()) assert "optional" in flowed assert "skip this entirely if you would rather approve each command" in flowed + + +@pytest.mark.kit_repo_only("docs/agentic-dev-kit/workflows/upgrade.md") +@pytest.mark.parametrize("manifest_kind", ["corrupt", "dangling", "partial"]) +def test_refresh_manifest_preflight_precedes_installer_overwrite( + tmp_path: Path, manifest_kind: str +) -> None: + repo = tmp_path / "adopter" + repo.mkdir() + src = _fake_kit_templates(tmp_path) + installer = repo / "init.sh" + installer.write_text("old installer\n") + installer.chmod(0o644) + baseline = repo / "kit-manifest.json" + if manifest_kind == "dangling": + baseline.symlink_to(repo / "absent-baseline") + else: + baseline.write_text( + '{"kit_commit":"source","files":{}}' + if manifest_kind == "partial" else "{broken" + ) + result = _run_template_copy(repo, src, check=False) + if manifest_kind == "partial": + assert result.returncode == 0, result.stderr + assert installer.read_bytes() == (src.parent.parent / "init.sh").read_bytes() + assert (repo / "INIT_SH_RAN").exists() + assert not list((repo / "docs/templates").glob("*.tmpl")) + else: + assert result.returncode != 0 + assert installer.read_text() == "old installer\n" + assert installer.stat().st_mode & 0o777 == 0o644 + assert not (repo / "docs").exists() + _assert_gate_refused(repo, result, manifest_kind) + + +@pytest.mark.kit_repo_only("docs/agentic-dev-kit/workflows/upgrade.md") +@pytest.mark.parametrize( + "relative,kind", + [ + ("init.sh", "symlink"), + ("docs", "symlink-directory"), + ("docs/templates", "symlink-directory"), + ("docs/templates/AGENTS.md.tmpl", "symlink"), + ("init.sh", "fifo"), + ("docs/templates/AGENTS.md.tmpl", "hardlink"), + ], +) +def test_refresh_refuses_destination_aliases_before_any_copy( + tmp_path: Path, relative: str, kind: str +) -> None: + repo = tmp_path / "adopter" + repo.mkdir() + src = _fake_kit_templates(tmp_path) + outside = tmp_path / "outside" + outside.mkdir() + external = outside / "sentinel" + external.write_text("preserve external bytes\n") + target = repo / relative + target.parent.mkdir(parents=True, exist_ok=True) + if kind == "symlink-directory": + target.symlink_to(outside, target_is_directory=True) + elif kind == "symlink": + target.symlink_to(external) + elif kind == "hardlink": + os.link(external, target) + else: + os.mkfifo(target) + if relative != "init.sh": + (repo / "init.sh").write_text("old installer\n") + result = _run_template_copy(repo, src, check=False) + assert result.returncode != 0 + assert "STOP" in result.stderr + assert not (repo / "INIT_SH_RAN").exists() + assert external.read_text() == "preserve external bytes\n" + assert sorted(p.name for p in outside.iterdir()) == ["sentinel"] + if relative != "init.sh": + assert (repo / "init.sh").read_text() == "old installer\n" + + +@pytest.mark.kit_repo_only("docs/agentic-dev-kit/workflows/upgrade.md") +@pytest.mark.parametrize("failure", ["cp-init", "chmod", "mkdir", "cp-template"]) +def test_refresh_stops_after_a_failed_mutation( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch, failure: str +) -> None: + repo = tmp_path / "adopter" + repo.mkdir() + src = _fake_kit_templates(tmp_path) + bins = tmp_path / "bin" + bins.mkdir() + trace = tmp_path / "calls" + for command in ("cp", "chmod", "mkdir"): + shim = bins / command + shim.write_text( + '#!/bin/sh\n' + f'kind={command}\n' + 'if [ "$kind" = cp ]; then\n' + ' case "$1" in */init.sh) kind=cp-init ;; *) kind=cp-template ;; esac\n' + 'fi\n' + 'echo "$kind" >> "$REFRESH_TRACE"\n' + '[ "$kind" != "$REFRESH_FAIL" ] || exit 23\n' + f'exec /bin/{command} "$@"\n' + ) + shim.chmod(0o755) + monkeypatch.setenv("PATH", str(bins) + os.pathsep + os.environ["PATH"]) + monkeypatch.setenv("REFRESH_TRACE", str(trace)) + monkeypatch.setenv("REFRESH_FAIL", failure) + result = _run_template_copy(repo, src, check=False) + assert result.returncode != 0 + calls = trace.read_text().splitlines() + order = ["cp-init", "chmod", "mkdir", "cp-template"] + assert calls == order[:order.index(failure) + 1] + assert not (repo / "INIT_SH_RAN").exists() + + +@pytest.mark.kit_repo_only("docs/agentic-dev-kit/workflows/upgrade.md") +def test_upgrade_config_probe_resolves_the_repo_from_a_subdirectory(tmp_path: Path) -> None: + repo = tmp_path / "adopter" + (repo / "config").mkdir(parents=True) + (repo / "config/dev-model.yaml").write_text("kit: {}\n") + (repo / "docs").mkdir() + subprocess.run(["git", "init", "-q", str(repo)], check=True) + text = (REPO_ROOT / "docs/agentic-dev-kit/workflows/upgrade.md").read_text() + block = text.split("## Step 0", 1)[1].split("```bash\n", 1)[1].split("```", 1)[0] + result = subprocess.run( + ["sh", "-c", block], cwd=repo / "docs", capture_output=True, text=True + ) + assert result.returncode == 0, result.stderr + assert result.stdout == "has config\n" diff --git a/scripts/tests/test_portability.py b/scripts/tests/test_portability.py index d9fd2be0..b48f87af 100644 --- a/scripts/tests/test_portability.py +++ b/scripts/tests/test_portability.py @@ -17327,3 +17327,42 @@ def test_parallel_adapters_carry_no_approval_policy_and_the_shared_workflow_does # family; a spelled-out flag is a directive it must not carry (a mutation that # injects one fails this — panel rounds 6, 8, 11). assert "--dangerously-skip-permissions" not in shared + + +@pytest.mark.kit_repo_only("docs/agentic-dev-kit/workflows/upgrade.md") +@pytest.mark.parametrize("failure", ["doctor", "mktemp", "suite", "budget", "none"]) +def test_upgrade_verification_stops_at_the_failed_command( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch, failure: str +) -> None: + repo = tmp_path / "adopter" + repo.mkdir() + bins = tmp_path / "bin" + bins.mkdir() + calls = tmp_path / "calls" + for name in ("uv", "mktemp"): + script = bins / name + script.write_text( + '#!/bin/sh\n' + f'kind={name}\n' + 'if [ "$kind" = uv ]; then\n' + ' case "$*" in *kit_doctor.py*) kind=doctor ;; ' + '*run_installed_tests.py*) kind=suite ;; *) kind=budget ;; esac\n' + 'fi\n' + 'echo "$kind" >> "$VERIFY_CALLS"\n' + '[ "$kind" != "$VERIFY_FAIL" ] || exit 17\n' + 'if [ "$kind" = mktemp ]; then echo "$VERIFY_ROOT"; fi\n' + ) + script.chmod(0o755) + monkeypatch.setenv("PATH", str(bins) + os.pathsep + os.environ["PATH"]) + monkeypatch.setenv("VERIFY_CALLS", str(calls)) + monkeypatch.setenv("VERIFY_FAIL", failure) + monkeypatch.setenv("VERIFY_ROOT", str(tmp_path / "state")) + monkeypatch.setenv("REPO", str(repo)) + workflow = (REPO_ROOT / "docs/agentic-dev-kit/workflows/upgrade.md").read_text() + block = workflow.split("## Step 5 — Verify", 1)[1].split("```bash\n", 1)[1].split("```", 1)[0] + block = block.replace("", "scripts") + result = subprocess.run(["sh", "-c", block], cwd=repo, capture_output=True, text=True) + order = ["doctor", "mktemp", "suite", "budget"] + expected = order if failure == "none" else order[:order.index(failure) + 1] + assert calls.read_text().splitlines() == expected + assert (result.returncode == 0) == (failure == "none") diff --git a/scripts/tests/test_state_guard.py b/scripts/tests/test_state_guard.py index 10ecd54e..135749d5 100644 --- a/scripts/tests/test_state_guard.py +++ b/scripts/tests/test_state_guard.py @@ -266,13 +266,19 @@ def _run_pytest( other than what ships. """ env = {k: v for k, v in os.environ.items() if not k.startswith("DEVKIT_")} - return subprocess.run( - [sys.executable, "-m", "pytest", *args, "-q", "-p", "no:cacheprovider"], - cwd=cwd or root, - env=env, - capture_output=True, - text=True, - ) + try: + return subprocess.run( + [sys.executable, "-m", "pytest", *args, "-q", "-p", "no:cacheprovider"], + cwd=cwd or root, + env=env, + capture_output=True, + text=True, + timeout=60, + ) + except subprocess.TimeoutExpired as exc: + pytest.fail( + f"nested pytest timed out: stdout={exc.stdout!r}; stderr={exc.stderr!r}" + ) def _assert_guard_fired( @@ -777,3 +783,55 @@ def test_guard_leaves_root_file_symlinks_outside_snapshot( assert target.read_text() == ("before" if case == "new-link" else "after") assert result.returncode == 0, result.stdout + result.stderr assert _BANNER not in result.stdout + result.stderr + + +@pytest.mark.parametrize("exit_kind", ["interrupt", "internal-error"]) +def test_leak_report_preserves_non_ok_session_exit_status( + tmp_path: Path, exit_kind: str +) -> None: + _build_tree(tmp_path, leak_in=None) + tests = tmp_path / "scripts/tests" + if exit_kind == "interrupt": + (tests / "test_tests_probe.py").write_text( + "from pathlib import Path\n" + "def test_interrupt():\n" + f" (Path({str(tmp_path)!r}) / 'state').write_text('leak')\n" + " raise KeyboardInterrupt\n" + ) + expected = pytest.ExitCode.INTERRUPTED + else: + (tests / "conftest.py").write_text( + "from pathlib import Path\n" + "def pytest_collection_modifyitems(session, config, items):\n" + f" (Path({str(tmp_path)!r}) / 'state').write_text('leak')\n" + " raise RuntimeError('deliberate internal error')\n" + ) + expected = pytest.ExitCode.INTERNAL_ERROR + result = _run_pytest(tmp_path, _SHAPES["tests-only"]) + assert result.returncode == expected, result.stdout + result.stderr + assert _BANNER in result.stdout + assert _SUMMARY in result.stdout + assert (tmp_path / "state").read_text() == "leak" + + +def test_nested_pytest_timeout_reports_captured_output( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + actual_run = subprocess.run + def bounded_run(*args, **kwargs): + assert kwargs["timeout"] == 60 + kwargs["timeout"] = 3 + return actual_run(*args, **kwargs) + monkeypatch.setattr(subprocess, "run", bounded_run) + _build_tree(tmp_path, leak_in=None) + (tmp_path / "scripts/tests/test_tests_probe.py").write_text( + "import sys, time\n" + "def test_wait():\n" + " print('child stdout', flush=True)\n" + " print('child stderr', file=sys.stderr, flush=True)\n" + " time.sleep(30)\n" + ) + with pytest.raises(pytest.fail.Exception, match="nested pytest timed out") as caught: + _run_pytest(tmp_path, [*_SHAPES["tests-only"], "-s"]) + assert "child stdout" in str(caught.value) + assert "child stderr" in str(caught.value) From 7224547da0c766a4fd9ee5791e53ddb3f7db6cdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Topi=20J=C3=A4rvinen?= Date: Fri, 11 Sep 2026 18:53:42 +0300 Subject: [PATCH 2/2] docs: bind repair release and verification to assigned PR --- CHANGELOG.md | 2 +- docs/kit-handoff-history.md | 47 +++++++++++ docs/kit-handoff.md | 77 +++++------------- saved_plans/codex-parity-plan_2026-08-23.md | 7 +- .../author-verification.json.gz | Bin 0 -> 3266 bytes ...item5-b-source-review-repair_2026-09-11.md | 22 +++-- 6 files changed, 92 insertions(+), 63 deletions(-) create mode 100644 saved_plans/phase5-item5-b-source-review-repair-evidence_2026-09-11/author-verification.json.gz diff --git a/CHANGELOG.md b/CHANGELOG.md index 5df5d162..7d666f0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,7 +42,7 @@ starts. --- -## Pending PR identifier — 2026-09-11 +## #734 — 2026-09-11 - **CHANGED** — Refresh the shared `upgrade.md` workflow and the shipped test files together. Upgrade now refuses invalid refresh destinations or unreadable manifest diff --git a/docs/kit-handoff-history.md b/docs/kit-handoff-history.md index 3f8846c3..55efdddb 100644 --- a/docs/kit-handoff-history.md +++ b/docs/kit-handoff-history.md @@ -5,6 +5,53 @@ and the next step there; this file is append-only history. ## Session log +## Session — 2026-09-07 (#534 residual repairs, in Claude Code) + +**Theme —** Repair what `#534` still carried, and field-verify the item that merged +without ever being checked in an adopter. + +- [PR #705](https://github.com/topij/agentic-dev-kit/pull/705) merged as `7cb0868`. + Item 1 (`_repo_layout` engine-dir resolution) was **not** re-done: it merged in + PR #545, and `kit-handoff-history.md`'s 2026-08-21 block records the residual — those + issues stayed open because nothing verified their acceptance criteria in the field. + That verification is what this session did. +- **The proposed kit-repo-only marker cannot carry cause 1, and the reason generalises.** + It skips on a *missing path*, and the question these tests need answered is whether the + file at that path is the kit's copy. `conftest.py` gains the predicate it cannot + express, derived from `kit_commit` being written only by `--record-install`. + `test_shipped_manifest_covers_every_kit_owned_file` is restated rather than skipped, so + an adopter gains coverage where they had a permanent red. +- **`.codex/hooks.json` and `.claude/settings.json` are the sharp case** — the kit prints + both and writes neither (`#303`), so in an adopter those paths hold hand-written + registrations and a path check accepts them. Reference copies now ship, engine-relative + and `KIT_OWNED`, with a drift guard pinning reference to live. +- **Field-verified in disposable copies of the adopter fixture**, the original asserted + equal to `fixture-inventory-after-reg01.json` before and unchanged after each run. + Item 1 resolves there; a cause-1 test went from failing to passing, and others from + failing to skipping. The silent false pass was proven fixed **by mutation, not by a passing run** — + a pass is what that defect looks like — and that mutation is what caught a read site an + edit had missed. +- **What the panel found is where the risk sat.** Its rounds are enumerated with their + heads and fixes in the [disposition](https://github.com/topij/agentic-dev-kit/pull/705#issuecomment-5574151329). + Every finding was in a claim the author made — a predicate said to be safe, an accessor + said to decline gracefully, a test said to guard a fix, a docstring describing a step + its function does not perform — and none was in a mechanism. Rounds whose CI was green + still carried them. +- **`#534` stays open.** The typed decline reasons are deliberately out of scope; the + disposition also carries the follow-up candidates the panel raised and this PR did not + take. +- An occurrence on [`#393`](https://github.com/topij/agentic-dev-kit/issues/393#issuecomment-5573705268) + records that the interpreter `uv run` resolves locally and the version + `.github/workflows/test.yml` pins are not the same, so a suite failure reproducible on + `main` is invisible to CI. That issue stays open. + +- **Session friction routed at close-out.** [`#706`](https://github.com/topij/agentic-dev-kit/issues/706) + files the manifest going stale between `--generate-manifest` and the commit, caught only + by the full suite. The guard is not broken — it caught every instance — so the finding is + about when it reports, and the proposed fix moves that to `scripts/hooks/pre-push`. + +The later replay decision and next action are in the latest session block. + ## Session — 2026-09-07 (live Codex hooks batch) **Theme —** Complete the parked Codex observations and preserve their scope. diff --git a/docs/kit-handoff.md b/docs/kit-handoff.md index db369767..5275c23a 100644 --- a/docs/kit-handoff.md +++ b/docs/kit-handoff.md @@ -14,10 +14,29 @@ > Older session blocks graduate to [`kit-handoff-history.md`](kit-handoff-history.md) once > this file crosses its line budget (`scripts/check_doc_budget.py`). -Last updated: 2026-09-11 — ITEM5-B kit repair merged; retained-update decision remains separate. +Last updated: 2026-09-11 — ITEM5-B source follow-up approved; retained update remains separate. Phase 5 delivery item 5 remains incomplete; item 6's replay remains complete. -## Latest session — 2026-09-11 (ITEM5-B repair delivery, in Codex) +## Latest session — 2026-09-11 (ITEM5-B source-review follow-up, in Codex) + +The operator approved the kit-only source repair, tests/release metadata, required +review and merge when clean, followed by preparation of a revised retained-update +packet. The [source repair record](../saved_plans/phase5-item5-b-source-review-repair_2026-09-11.md) +retains the exact approval, complete pre-fix review receipt and author verification. +[PR #734](https://github.com/topij/agentic-dev-kit/pull/734) carries that work; #733 +preserves the earlier unapproved packet and incomplete review history. + +No retained fixture/source update is approved. The special-file-root limitation, +ownership/function/field-exit distinctions, item 6/replay completion, #723 deferral, +#585 placement and delivered #724/#722 batch remain. The friction sweep stays parked. + +▶ Next: complete PR #734's required review and pr-watch, merge under the explicit +operator authority, then prepare the revised packet against the delivered source. +Obtain its exact retained-update approval before execution. Fixture merge stays excluded. + +______________________________________________________________________ + +## Session — 2026-09-11 (ITEM5-B repair delivery, in Codex) The operator approved ITEM5-B-KIT-REVIEW-02 and subsequently said “merge when ready.” [PR #731](https://github.com/topij/agentic-dev-kit/pull/731) merged as @@ -40,10 +59,7 @@ Ownership acceptance does not establish functionality or field exit. The repair not update the retained installation. Item 6's replay, #723's deferral, #585's earlier placement and #724's delivered #722 batch are preserved. The friction sweep stays parked. -▶ Next: prepare the exact retained-update decision packet for the merged #731 repair, -starting from the post-acceptance checkpoint linked in the execution record. Preparation -is authorized; execution needs its own exact decision. Do not repeat UPDATE-01 or the -completed replay, refresh the baseline, exercise clients/profiles/trackers, or merge the fixture PR. +The latest session block owns the subsequent source follow-up and next decision. ______________________________________________________________________ @@ -343,55 +359,6 @@ the later ITEM5-B execution, retained baseline and next action. ______________________________________________________________________ -## Session — 2026-09-07 (#534 residual repairs, in Claude Code) - -**Theme —** Repair what `#534` still carried, and field-verify the item that merged -without ever being checked in an adopter. - -- [PR #705](https://github.com/topij/agentic-dev-kit/pull/705) merged as `7cb0868`. - Item 1 (`_repo_layout` engine-dir resolution) was **not** re-done: it merged in - PR #545, and `kit-handoff-history.md`'s 2026-08-21 block records the residual — those - issues stayed open because nothing verified their acceptance criteria in the field. - That verification is what this session did. -- **The proposed kit-repo-only marker cannot carry cause 1, and the reason generalises.** - It skips on a *missing path*, and the question these tests need answered is whether the - file at that path is the kit's copy. `conftest.py` gains the predicate it cannot - express, derived from `kit_commit` being written only by `--record-install`. - `test_shipped_manifest_covers_every_kit_owned_file` is restated rather than skipped, so - an adopter gains coverage where they had a permanent red. -- **`.codex/hooks.json` and `.claude/settings.json` are the sharp case** — the kit prints - both and writes neither (`#303`), so in an adopter those paths hold hand-written - registrations and a path check accepts them. Reference copies now ship, engine-relative - and `KIT_OWNED`, with a drift guard pinning reference to live. -- **Field-verified in disposable copies of the adopter fixture**, the original asserted - equal to `fixture-inventory-after-reg01.json` before and unchanged after each run. - Item 1 resolves there; a cause-1 test went from failing to passing, and others from - failing to skipping. The silent false pass was proven fixed **by mutation, not by a passing run** — - a pass is what that defect looks like — and that mutation is what caught a read site an - edit had missed. -- **What the panel found is where the risk sat.** Its rounds are enumerated with their - heads and fixes in the [disposition](https://github.com/topij/agentic-dev-kit/pull/705#issuecomment-5574151329). - Every finding was in a claim the author made — a predicate said to be safe, an accessor - said to decline gracefully, a test said to guard a fix, a docstring describing a step - its function does not perform — and none was in a mechanism. Rounds whose CI was green - still carried them. -- **`#534` stays open.** The typed decline reasons are deliberately out of scope; the - disposition also carries the follow-up candidates the panel raised and this PR did not - take. -- An occurrence on [`#393`](https://github.com/topij/agentic-dev-kit/issues/393#issuecomment-5573705268) - records that the interpreter `uv run` resolves locally and the version - `.github/workflows/test.yml` pins are not the same, so a suite failure reproducible on - `main` is invisible to CI. That issue stays open. - -- **Session friction routed at close-out.** [`#706`](https://github.com/topij/agentic-dev-kit/issues/706) - files the manifest going stale between `--generate-manifest` and the commit, caught only - by the full suite. The guard is not broken — it caught every instance — so the finding is - about when it reports, and the proposed fix moves that to `scripts/hooks/pre-push`. - -The later replay decision and next action are in the latest session block. - -______________________________________________________________________ - > Older session entries (below the live blocks above) live in [`kit-handoff-history.md`](kit-handoff-history.md). > Active open items from them are folded into the "Open for next session" lists above. diff --git a/saved_plans/codex-parity-plan_2026-08-23.md b/saved_plans/codex-parity-plan_2026-08-23.md index 8c6d67a3..d95ca827 100644 --- a/saved_plans/codex-parity-plan_2026-08-23.md +++ b/saved_plans/codex-parity-plan_2026-08-23.md @@ -451,8 +451,11 @@ historical observation it was and is not silently refreshed. inherited FIFO-root gap and P3 root-symlink coverage gap; the [follow-up packet](phase5-item5-b-review-followup-decision_2026-09-10.md) was approved as ITEM5-B-KIT-REVIEW-02 on 2026-09-11. The [follow-up execution](phase5-item5-b-review-followup-execution_2026-09-11.md) records the applied scope, final panel and separately authorized merge of kit #731 as - `e6d6e77d118454349f8e8bb046e99ef3009c5f5c`. Prepare the next exact retained-update - decision packet; neither repair approval nor kit merge authorizes its execution. + `e6d6e77d118454349f8e8bb046e99ef3009c5f5c`. The subsequent UPDATE-02 preparation + in #733 led to the separately approved [source-review repair](phase5-item5-b-source-review-repair_2026-09-11.md) + in #734. Complete its required review and merge when clean, then prepare the + revised exact retained-update packet. Neither repair approval nor kit merge + authorizes retained execution. Preserve the old packet and review receipts. Fixture merge remains excluded; the nonfunctional custom wrap-up carries ownership acceptance only. No original continuity or prior field credit was recreated. diff --git a/saved_plans/phase5-item5-b-source-review-repair-evidence_2026-09-11/author-verification.json.gz b/saved_plans/phase5-item5-b-source-review-repair-evidence_2026-09-11/author-verification.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..8f794ae9c1d9c9cd85b426a16849948156ddc276 GIT binary patch literal 3266 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 Aw*UYD literal 0 HcmV?d00001 diff --git a/saved_plans/phase5-item5-b-source-review-repair_2026-09-11.md b/saved_plans/phase5-item5-b-source-review-repair_2026-09-11.md index ba5428df..a8ad05ce 100644 --- a/saved_plans/phase5-item5-b-source-review-repair_2026-09-11.md +++ b/saved_plans/phase5-item5-b-source-review-repair_2026-09-11.md @@ -31,12 +31,24 @@ timeouts with captured output. The inherited special-file-root detector limitati remains accepted and unextended; ownership acceptance does not verify functionality or field exit. -Validation and complete source-review/delivery receipts will be appended after the -actual commands finish. Preserve #393 as a separate known test failure and cover -#561's recipe gap with individual shell parses. Do not infer source coverage from -installed-fixture results or from an incomplete reviewer. +[PR #734](https://github.com/topij/agentic-dev-kit/pull/734) carries this source repair. +The [author verification record](phase5-item5-b-source-review-repair-evidence_2026-09-11/author-verification.json.gz) +retains complete argv, working directory, revision, date, status and output. +`make test` in `/Users/topi/Coding/agentic-dev-kit` at +`bcd497bf9e565b7f96ebc856d245a3d0c47b680d` on 2026-09-11 printed +`2 failed, 2528 passed, 1 skipped in 390.50s (0:06:30)`. The failures were the +known #393 deep-JSON case and the temporary changelog heading awaiting the forge's +PR identifier. After creation assigned #734, the exact changelog extraction test +named in the record printed `1 passed in 6.61s` at that revision/date/directory +with the assigned heading in the working tree. This targeted correction does not +turn the earlier full run into a passing one. The focused workflow/hook run and +individual shell parses covering #561 are retained alongside it. -**Next:** finish source verification and required review, then merge under the +Required independent review and delivery receipts belong to PR #734. Do not infer +source coverage from retained-fixture results or incomplete reviewers. The repair +preserves #393 and #561 as separate limitations; it changes neither implementation. + +**Next:** complete PR #734's required review and pr-watch, then merge under the operator's scoped authority. Prepare a replacement retained-update packet against the delivered immutable source with a fresh read-only checkpoint comparison, new hash-bound payloads/ledger/baseline prediction, preservation/verification/rollback