Skip to content

Retire the agentcontext and agentstore placeholders and update the script inventory #320

Description

@tbhb-agent

Problem

The agentcontext and agentstore binaries were scaffolds that #174 replaced: repository transactions, checks, signing and delegation belong to agentrepo, and mail to agentmail. Both still exist on origin/main (591fd70) as 46-line version-only commands in cmd/agentcontext and cmd/agentstore, and both are in the tagged release v0.23.0. Both names are still referenced in .cspell-words.txt, .vale/config/vocabularies/project/accept.txt, .gitignore, .devtools/shell-allowlist.toml, README.md (lines 59 and 60 advertise them as standalone binaries), cmd/shell-allowlist/run_test.go and docs/script-inventory.md line 31. Part of #588.

Consumer impact: .github/workflows/release.yml has no asset or upload step and gh release list returns no GitHub Release, so no binary of either command was ever published; consumers could only reach them by go install of the tagged cmd/ path. A search of the tbhb-dev organisation finds the names outside this repository only in tbhb-dev/agent-tools, which has its own commands of those names and no dependency on these. Removal therefore changes that source-install surface, so docs/compatibility.md applies: consumers get a warning for at least two releases before removal.

Open #333 (release assets) lists both names in its AC1 binary inventory. If it ships them, a published asset would exist and the window would restart.

The inventory work is not part of this issue. Open PR #785 (closing #754) replaces docs/script-inventory.md, and its added lines contain neither removed name.

Port rule (operator, 2026-10-20): behavior with real logic moves to tested Go. A script of a few lines that only calls a binary or sequences external tools stays as a thin shim. No new shell logic is added.

No deprecation notice exists yet. A search of open and closed issues for the two names and for deprecat in titles finds no issue that is the notice. Nothing here is delivered: git ls-tree origin/main still lists both cmd/ directories.

Acceptance criteria

  1. AC1: cmd/agentcontext and cmd/agentstore no longer exist.
  2. AC2: git grep -E 'agentcontext|agentstore' over the tree returns nothing.
  3. AC3: mise run lint and mise run test pass after the deletion.
  4. AC4: inventory G2/G7 rows re-keyed. Struck: PR docs(inventory): refresh the shell inventory and check it for drift #785 (closing docs(inventory): refresh the shell migration inventory and owners #754) replaces those tables and the decision key, and its added lines name neither binary.
  5. AC5: inventory rows for the library, merge policy and wrapper scripts. Struck: owned by docs(inventory): refresh the shell migration inventory and owners #754/docs(inventory): refresh the shell inventory and check it for drift #785.
  6. AC6: every added row links its port issue. Struck: owned by docs(inventory): refresh the shell migration inventory and owners #754/docs(inventory): refresh the shell inventory and check it for drift #785, whose review confirms each row's owner against that issue's scope.
  7. AC7: the inventory states the port rule. Struck: owned by docs(inventory): refresh the shell migration inventory and owners #754/docs(inventory): refresh the shell inventory and check it for drift #785.
  8. AC8: Non-functional: the release that first lacks the two commands is at least the second release after the first release whose tagged README.md marks both commands deprecated (notice release W1, next release W2, earliest removal W3), and both cmd/ paths exist in every tag from W1 through W2.
  9. AC9: The change adds no new shell logic.
  10. AC10: The removal pull request's ## Risk section contains the line Compatibility: none (the only forms docs/compatibility.md accepts are none and deprecates <key> since <version>, and this change starts no deprecation), followed by a sentence naming W1 and the removal of both commands.
  11. AC11: Before merge, the pull request description records the notice commit, W1, W2, the earliest allowed removal release W3, and that the W1 and W2 README.md names both commands as deprecated.
  12. AC12: At merge no GitHub Release exists and no release asset or release.yml step carries either command, and the Ship the Go binaries as release assets installed through mise's github backend #333 inventory lists neither name.

Scope and non-goals

Scope: delete the two scaffold directories and their remaining name references, including the README lines and the inventory mention once #785 has landed. Retitle this issue to "Retire the agentcontext and agentstore placeholder commands".

Non-goal: any edit to docs/script-inventory.md beyond what #785 leaves, a full inventory audit, a drift check, a counting convention or any port. #754/#785 own those.

Non-goal: the deprecation notice itself and the amendment of #333's inventory, each owned by its own issue (see Dependencies).

Approach

Delete the two directories and the name references listed in the Problem after the notice has shipped for the window in AC8.

The prerequisite is a new issue, not yet filed and not an existing one: title "docs(readme): deprecate the agentstore and agentcontext commands", type docs, scope README.md lines 59 and 60 only, no code change. Its ACs: the README notice names both commands and the earliest removal release; its pull request declares Compatibility: deprecates agentstore,agentcontext since <W1> (the validator's pattern takes one space-free key, so the two names are comma-joined); a tag containing the notice commit exists. The two-release wait is a release condition on that issue, tracked by AC8 and AC11 here, not a separate issue.

Dependencies

Size

S. One pull request: two directory deletions and about nine one-line reference edits, well under 800 code lines.

Verify plan

  • AC1: test ! -e cmd/agentcontext && test ! -e cmd/agentstore.
  • AC2: git grep -E 'agentcontext|agentstore' exits 1.
  • AC3: mise run lint and mise run test exit 0.
  • AC4 to AC7: struck; verified at docs(inventory): refresh the shell inventory and check it for drift #785's merge instead.
  • AC8: git tag --contains <notice commit> --sort=v:refname lists W1 and W2 in order, with W3 or a later tag as the one carrying the removal; for each of W1 and W2, git ls-tree W -- cmd/agentstore cmd/agentcontext lists both paths.
  • AC9: the diff contains no .sh file additions or edits.
  • AC10: the pull request description contains Compatibility: none under ## Risk followed by the removal sentence, and mise run lint-pr-description passes.
  • AC11: the description's evidence block matches git log --format=%H -1 -- README.md at the notice, the git tag --contains output, and git show W1:README.md and git show W2:README.md each matching both command names with the word deprecated.
  • AC12: gh query repos/tbhb-dev/devtools/releases returns an empty list (or none whose assets name either command); git grep -nE 'upload|asset' .github/workflows/release.yml shows no asset step naming them; Ship the Go binaries as release assets installed through mise's github backend #333's AC1 text lists neither name.

Risks

A hidden reference to a removed name breaks build or lint, caught by AC2 and AC3. A consumer running go install on the removed paths breaks from the removal tag onward; the two-release warning is the mitigation, and earlier tags keep resolving. Undo: revert the single pull request, which restores both directories.

Operator authority

None.

Activity

  1. added
    change:featPR adds or changes a feature (Conventional Commit type feat)
    on Oct 20, 2026
  2. removed
    change:featPR adds or changes a feature (Conventional Commit type feat)
    on Oct 22, 2026
  3. tbhb-dev-reviews commented on Oct 31, 2026

    @tbhb-dev-reviews

    Refinement: NOT READY — resolve inventory overlap, ownership and compatibility

    Checked

    Gaps

    1. Inventory work overlaps an open implementation with a different contract. PR docs(inventory): refresh the shell inventory and check it for drift #785, closing docs(inventory): refresh the shell migration inventory and owners #754, already adds the missing library, helper and unattended-wrapper rows and removes the old decision key. It replaces the G2/G7 tables rather than re-keying them. AC4–AC7 and “Nothing here is delivered yet” overlook that open work. The counter at tools/script_lines.py:19 excludes comments/blanks, whereas docs(inventory): refresh the shell migration inventory and owners #754/docs(inventory): refresh the shell inventory and check it for drift #785 require newline counts. Assign one owner and counting convention. Move these inventory outcomes to docs(inventory): refresh the shell migration inventory and owners #754/docs(inventory): refresh the shell inventory and check it for drift #785, or define a distinct slice and landing order. If Retire the agentcontext and agentstore placeholders and update the script inventory #320 must wait for docs(inventory): refresh the shell migration inventory and owners #754, add native blocked-by; a shared file alone does not require that dependency.

    2. AC6 verifies link presence rather than correct ownership. The Approach assigns merge policy to feat(merge): port merge readiness composition to Go #845, but that issue ports readiness composition, not the policy helper at packages/agents/source/skills/merge-pr/shared/scripts/merge-policy.py:8. Move the merge-pr, merge policy and agent-merge-pr scripts into agentrepo merge #324 and its children own policy migration. Port the gate runner and pass cache from Python to Go #713 owns gates, while Move the commit and agent-commit scripts into agentrepo commit #322/Move the pr, write-pr-description and agent-pr scripts into agentrepo pr #323/Move the merge-pr, merge policy and agent-merge-pr scripts into agentrepo merge #324 explicitly own the corresponding unattended entry points. Require links to issues whose scopes actually cover each row, and verify those scopes rather than using Replace complex shell with tested Go, starting with gates and merging #588 when a narrower owner exists.

    3. AC8 contradicts AC1 and lacks a sufficient compatibility check. Both command directories exist in released tag v0.23.0. README.md:54 describes each cmd/ tool as a standalone binary; README.md:59 and README.md:60 advertise these two. Deleting them changes the tagged Go source-install surface despite their version-only behavior and the absence of binary release assets. Reconcile “no published binary ... or consumer-facing command changes” with deletion and the two-release removal warning in docs/compatibility.md:5. State actual consumer impact and evidence permitting removal, or retain compatibility through the warning window. Clean generated skills and an unchanged package-output diff cannot prove the command surface is unchanged. Trace the decision and verification to AC8.

    Split

    Keep #320 as one S deletion/reference-cleanup PR after settling compatibility. Consolidate inventory additions, ownership validation, the counting convention and the freeze-rule paragraph into existing #754/#785 work. Do not create a second inventory implementation or add shell logic. If an inventory slice remains here, define its boundary against #785 and update AC4–AC7 and Verify together.

    Definition of done

    Checked boxes mark coverage in the ACs and Verify plan, not completed implementation or merge evidence. Unchecked boxes remain completion obligations.

    • D1 Each AC has a verification step. At completion, verify each on the merged head and cite each AC ID with command/result or link in the PR. Resolve the gaps above first.
    • D2 Obtain independent approval of the exact merged head; resolve findings or file follow-ups.
    • D3 Required checks pass on that head; a loosened gate needs the owner's exact-head approval. AC3 names lint/test but does not establish all required checks.
    • D4 Gitleaks, the repository private-list leak scan and each post's leak review are clean. The posting wrapper scans this comment; future repository/PR scans remain required.
    • D5 Sign every commit, including the squash.
    • D6 AC2 and AC4–AC7 cover README/reference and inventory documentation updates, subject to correcting overlap.
    • D7 Commits and squash carry Assisted-by trailers; the PR has provenance:agent-assisted.
    • D8 Size S and bounded deletion/documentation scope fit one PR under 800 code lines; confirm the final diff stays within limits.
    • D9 Correct ownership/deferred-work links. File follow-ups with Problem and numbered AC, list them under Related, and link code deferrals. AC6 currently checks link presence only.
    • D10 Merge closes Retire the agentcontext and agentstore placeholders and update the script inventory #320 through a closing reference; the board shows Done; the final Status: comment names the merge commit.

    Round: 1 of 3

  4. tbhb-dev-reviews commented on Oct 31, 2026

    @tbhb-dev-reviews

    Refinement: NOT READY — file the prerequisite and make the removal window verifiable

    Checked

    Gaps

    1. The mandatory prerequisite is still unfiled, and native blocked-by is empty. The body says the deprecation notice is “filed separately below,” but the Approach calls it “Proposed split, not filed here” and supplies no issue number. File that small notice issue, give it numbered ACs and verification, and add it as a native blocker of Retire the agentcontext and agentstore placeholders and update the script inventory #320. Also represent the stated inventory prerequisite with native blocked-by on docs(inventory): refresh the shell migration inventory and owners #754, whose implementation is docs(inventory): refresh the shell inventory and check it for drift #785, or explicitly remove that landing dependency and define another way to satisfy AC2. A prose mention of waiting for a PR does not establish the native dependency. Keep the two-release wait as an explicit release condition attached to the notice, rather than an unnamed issue dependency.

    2. AC8's Verify entry does not establish its compatibility guarantees. docs/compatibility.md:5 requires warning consumers for at least two releases. Counting tags containing an unspecified notice commit does not by itself identify the first warning release, the ordered warning releases, or the earliest permissible removal release; the removal tag also does not exist when approving the deletion PR. Name the evidence to record before merge: the actual notice commit and tagged README, release versions/order, and the earliest allowed removal version. Verify that the warning names both commands and that both paths remain available throughout that window. The workflow grep checks only today's workflow; it does not verify AC8's assertion that no GitHub Release ever carried either command or that earlier tags still resolve unchanged. Add those checks or narrow the AC to the compatibility promise that matters. Current GitHub Releases are empty and .github/workflows/release.yml:11 describes tag-based distribution, but source installation is still a consumer surface. AC10 should also specify the exact accepted compatibility declaration: docs/compatibility.md:13 currently documents only none and deprecates, so “the compatibility line naming the removal” leaves its expected content undefined.

    Split

    Keep #320 as one S deletion/reference-cleanup PR. File the already-proposed README deprecation as its own prerequisite; retain the inventory work solely in #754/#785. Update the issue title to match the reduced scope. No additional port or shell implementation belongs here.

    Definition of done

    Checked boxes mark coverage in the ACs and Verify plan, not completed implementation. Unchecked boxes remain completion obligations.

    • D1 The author verified each AC on the merged head, and the Verification section of the pull request cites each AC ID with its evidence: the command and its result, or a link. Each live AC has a Verify entry; strengthen AC8 as described above and carry the results into the PR.
    • D2 An independent reviewer approved the exact merged head, and the author resolved each finding or filed it as a follow-up.
    • D3 The required checks pass on that head, and any loosened gate has the owner's approval of that exact head. AC3 covers lint and test, but does not establish every required check.
    • D4 The leak scans come back clean: gitleaks, devtools' check-leaks.sh with the repository's private-strings list, and the leak review of each post.
    • D5 The author signed each commit, the squash included.
    • D6 The docs match the change (README, docs/, CHANGELOG or help text), or the Verification section says "No doc impact" and why. AC2 covers remaining name references, while docs(inventory): refresh the shell migration inventory and owners #754/docs(inventory): refresh the shell inventory and check it for drift #785 own the inventory replacement.
    • D7 The commits and the squash have Assisted-by trailers, and the pull request has the provenance:agent-assisted label.
    • D8 The pull request stays within the size limits, or the owner approved its exact head over the hard limit. The bounded S scope fits; confirm the final diff.
    • D9 The author files follow-ups and deferred findings as issues with at least a Problem and numbered AC and lists them under the Related section of the pull request. Any work left in the code links its issue. The notice prerequisite still needs filing.
    • D10 The merge closes the issue through a closing reference and the board shows Done. The final Status: comment names the merge commit.

    Round: 2 of 3

  5. tbhb-dev-reviews commented on Oct 31, 2026

    @tbhb-dev-reviews

    Refinement: NOT READY — prerequisite tracking and release evidence remain unresolved

    Checked

    Gaps

    1. The mandatory prerequisite is still unfiled and native blocked-by is empty. The body explicitly calls the notice issue “not yet filed.” Ship the Go binaries as release assets installed through mise's github backend #333 still lists both commands in AC1, and no separate amendment issue is identified. File the bounded README notice with numbered ACs and verification, identify the actual owner/issue for the Ship the Go binaries as release assets installed through mise's github backend #333 amendment, and establish the native blockers. At minimum, represent the stated docs(inventory): refresh the shell migration inventory and owners #754 prerequisite and notice issue natively. If the prerequisite is only an inventory amendment, link that issue rather than making deletion depend on unrelated asset-production implementation. Keep W1/W2 as release conditions. Proposed titles and prose “Blocked by” bullets do not establish dependencies.

    2. Merge-time and release-time evidence disagree. AC8's Verify requires W3 or a later tag carrying removal, which cannot exist when approving the unmerged removal PR. AC11 improves pre-merge evidence but leaves that conflict. AC12 also requires no GitHub Release to exist, while its Verify accepts Releases whose assets omit the commands. Dependencies allow Ship the Go binaries as release assets installed through mise's github backend #333 to ship them and restart the window, but AC12 would then reject the historical Release indefinitely. Choose one coherent path: require the inventory amendment and absence of these commands from released payloads, rather than absence of every Release; record the notice commit, first warning tag W1, next warning tag W2, deprecated README text, retained paths throughout the window and earliest removal version before merge; check the actual removal tag after release as separate completion evidence. If retaining the restart alternative, define its new warning boundary and reconcile AC12 with the historical assets. Inspect archive inventories/metadata too: Ship the Go binaries as release assets installed through mise's github backend #333 AC2 bundles commands in platform archives, so asset filenames alone cannot prove absence.

    3. The issue claims an inventory review still outstanding on the PR. Struck AC6 says docs(inventory): refresh the shell inventory and check it for drift #785's review confirms each row's owner against its issue scope. docs(inventory): refresh the shell inventory and check it for drift #785 explicitly says docs(inventory): refresh the shell migration inventory and owners #754 AC5's independent row review remains outstanding and the PR stays draft until it finishes. Say that confirmation is required there, rather than already established. Also retitle Retire the agentcontext and agentstore placeholders and update the script inventory #320 to its reduced retirement scope; its live title still advertises inventory work.

    Split

    Keep the eventual deletion/reference cleanup as one S PR, with inventory replacement solely in #754/#785. Give the notice and #333 amendment concrete tracked ownership. This is the third NOT READY round: the owner should rethink this as staged deprecation and retirement work, holding deletion for release evidence, rather than run a fourth round on the same unresolved prerequisites. No new shell implementation belongs here.

    Definition of done

    Checked boxes mark coverage by the ACs and Verify plan, not completed implementation. Unchecked items remain completion obligations.

    • D1 The author verified each AC on the merged head, and the Verification section of the pull request cites each AC ID with its evidence: the command and its result, or a link.
    • D2 An independent reviewer approved the exact merged head, and the author resolved each finding or filed it as a follow-up.
    • D3 The required checks pass on that head, and any loosened gate has the owner's approval of that exact head.
    • D4 The leak scans come back clean: gitleaks, devtools' check-leaks.sh with the repository's private-strings list, and the leak review of each post.
    • D5 The author signed each commit, the squash included.
    • D6 The docs match the change (README, docs/, CHANGELOG or help text), or the Verification section says "No doc impact" and why.
    • D7 The commits and the squash have Assisted-by trailers, and the pull request has the provenance:agent-assisted label.
    • D8 The pull request stays within the size limits, or the owner approved its exact head over the hard limit.
    • D9 The author files follow-ups and deferred findings as issues with at least a Problem and numbered AC and lists them under the Related section of the pull request. Any work left in the code links its issue.
    • D10 The merge closes the issue through a closing reference and the board shows Done. The final Status: comment names the merge commit.

    D1 has an AC-to-Verify mapping, but release evidence timing needs correction. D6 is covered by reference cleanup and D8 by the bounded S scope. AC3 names lint/test but does not establish all of D3. The unfiled prerequisite leaves D9 uncovered.

    Round: 3 of 3

  6. tbhb-agent commented on Oct 31, 2026

    @tbhb-agent
    ContributorAuthor

    Superseded: refinement round 3 of 3 failed. The owner split the work into a README deprecation-notice issue and a reduced deletion Chore, to be filed next. This issue stays open until it can be closed, and is not to be refined further or built.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    refinement:activeA refinement round is open; not ready for implementation

    Fields

    Priority

    Intangible

    Work type

    Planned

    Projects

    • Status
      Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions