Skip to content

chore(agents): delete lib.sh after the Go port; cutover 1 under #588 #997

Open

Description

@tbhb-agent

Problem

packages/agents/source/lib/lib.sh and its 20 generated scripts/lib.sh copies stay in the tree after #321 ports the shared skill library to Go. Epic #321 lists this deletion as the first of two cutover issues under #588, and no issue tracks it. Five skills still source the library today, and no open issue removes the final shell caller of commit, pr, merge-pr or watch-pr (#322–#325 leave deleting the frozen shell to later cutovers; #1003 owns analyze-session): commit, pr, merge-pr, watch-pr and analyze-session (for example commit.sh:51, create-pr.sh:63, squash-merge.sh:49, watch-checks.sh:47 and preflight.sh:32), so deleting it before those callers migrate breaks their workflows. lib.sh is an owner path, so the deletion needs the owner's exact-head approval at merge.

Acceptance criteria

  1. AC1: Given every Port the shared skill library (lib.sh, agent.sh, signing.sh, gates.py) to Go #321 child that ports a lib.sh function has merged and every caller-removal issue listed under Dependencies is closed by a merged pull request whose merge commit is on origin/main, so that no skill script sources lib.sh, packages/agents/source/lib/lib.sh is deleted. The pull request cites release evidence for the N-2 rule in docs/compatibility.md: the release whose notes start the file-removal warning, the two releases that elapsed since, the minimum binary release that carries every command the migrated callers need (the floor The configuration parity tests are retired after N-2 #935 records), and the consumer migration steps in docs/agent-skills-migration.md.
  2. AC2: Every generated scripts/lib.sh copy under the claude and codex packages and the deployed .claude/skills and .agents/skills trees is deleted, and mise run generate-skills leaves no lib.sh output.
  3. AC3: No executable dependency on lib.sh remains: no script, skill manifest, task, workflow or test sources, invokes or generates it. The only remaining mentions are the absence test's literals, historical documentation, and the unchanged protected-path patterns in .agents/agent-skills.conf, which stay.
  4. AC4: Generation stops emitting only lib.sh, and every other helper the post-prerequisite generator still ships keeps its emission and deployment. The change is tested Go, with no new shell logic. A skill whose script mentions lib.sh gets no scripts/lib.sh, and the frozen shell generator fallback no longer copies the library or fails for its absence.
  5. AC5: The lib.sh suites under tests/skills/source/lib/ and the lib.sh references in other tests are removed with the file, consuming the retirement ledgers of The residual Bats cases for the resolver and readiness groups are retired #933, The residual Bats cases for the review and policy groups are retired #934 and The configuration parity tests are retired after N-2 #935. Each residual case that depends on the removed file maps to a Go test, and that test runs and passes rather than only existing.
  6. AC6: Non-functional: the pull request stays under 800 changed code lines of source and tests, excluding generated copies, with a size report in Verification. Otherwise the pull request is split before review.
  7. AC7: Non-functional: mise run check, mise run lint, mise run test, mise run cover-go-check and mise run cover-py-check pass at the head, no gate is loosened, and the generated output is committed in the order mise run generate-skills, mise run skill-tokens, apm install.
  8. AC8: Non-functional: the pull request declares its consumer impact under Risk with a Compatibility: line in the form docs/compatibility.md accepts (none or deprecates <key> since <version>), and a separate line in Risk names the release the deletion ships in.

Scope and non-goals

In scope: deleting lib.sh, its generated copies, the lib.sh emission rule, its suites and its references. Non-goals: porting any behavior (the #321 children own that), migrating callers (the Dependencies issues own that), retiring cases that #933, #934 and #935 own, deleting agent.sh or signing.sh (#998), deleting the frozen shell callers (their removal issues own that), and removing the protected-path patterns, and shortening any N-2 window.

Approach

Delete after the last blocker merges and the window closes. Remove lib.sh from the helper trigger in internal/skills/generate.go (around line 206) and from the frozen generator fallback. Name the file where that fallback lives at implementation time: tools/generate-skills.sh:111-112 today, or its relocated copy if #940 has moved it. Leave the helpers that remain shipped at that baseline (gates.py is gone once #713 merges). Keep any shim a thin exec forwarder. Then regenerate in the AC7 order and run the checks. Test literals naming lib.sh (for example internal/skills/generate_internal_test.go:149) are the intended absence test. The mechanism is the implementer's choice within those outcomes.

Dependencies

Part of #588. Prerequisites, each a native blocked-by link (#940 is not one; see the Blocked on: line below):

Blocked on: #940 (the generator fallback's location). Read #940's mergedAt (non-null) and merge commit; git merge-base --is-ancestor <merge commit> origin/main exits 0. If another deliverable supersedes #940, name it and require the same proof. Closing #940 unmerged does not satisfy the prerequisite.

A blocker counts as done when its issue is closed by a merged pull request and that merge commit is on origin/main.

Blocks #998.

Size

S, if the AC6 size report shows under 800 changed code lines. At baseline, tests/skills/source/lib/lib.bats alone is 1,060 code lines, so the report must say which of its cases #933 and #934 retire first.

Verify plan

  • AC1: for each blocker issue, read the issue state and the closing pull request's mergedAt (for example gh issue view <N> --json state,closedByPullRequestsReferences, then gh pr view <PR> --json mergedAt,mergeCommit) and confirm git merge-base --is-ancestor <merge commit> origin/main; issue state alone does not count; Read feat(tools): connect skill generation to the Go command #940's mergedAt (non-null) and merge commit; git merge-base --is-ancestor <merge commit> origin/main exits 0. If another deliverable supersedes feat(tools): connect skill generation to the Go command #940, name it and require the same proof. Closing feat(tools): connect skill generation to the Go command #940 unmerged does not satisfy the prerequisite.; git grep -n 'lib\.sh' -- 'packages/agents/source/skills' prints nothing; the pull request cites the removal-warning release, the two elapsed releases, the The configuration parity tests are retired after N-2 #935 floor and the migration-note section.
  • AC2: git ls-files | grep '/lib\.sh$' prints nothing, and mise run generate-skills then git status --porcelain is empty.
  • AC3: git grep -nE 'lib(\\)?\.sh' over the tracked tree prints only the allowed classes: the absence test, historical docs and the .agents/agent-skills.conf patterns; the pull request lists each remaining hit under one class.
  • AC4: a Go test in internal/skills asserts that a skill mentioning lib.sh gets no scripts/lib.sh while the other shipped helpers still deploy; a run of the frozen fallback generator on a tree without lib.sh exits 0; the regenerated claude, codex, .claude/skills and .agents/skills trees are listed in the pull request.
  • AC5: list each deleted suite and case with the The residual Bats cases for the resolver and readiness groups are retired #933, The residual Bats cases for the review and policy groups are retired #934 or The configuration parity tests are retired after N-2 #935 ledger entry that retired it or the Go test that replaces it; run go test -run <name> -v for each mapped test and cite the passing result.
  • AC6: the size report counts non-blank, non-comment lines added and removed outside generated copies, and shows a total under 800.
  • AC7: run each named task and assert exit 0; mise run check-generated-skills passes.
  • AC8: read the pull request's Risk section and confirm the validator accepts the line.

Risks

An installed consumer that still sources lib.sh breaks when the file disappears, which is why the callers must migrate and the window must close first. A generator change that drops the other helpers would break every skill that sources them, which AC4 tests. Reverting the commit restores the file, its copies and the emission rule.

Operator authority

A standing rule names the operator: lib.sh is an owner path, so the merge needs the owner's exact-head approval.

Activity

  1. added theissue type on Oct 31, 2026
  2. 9 remaining items

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

    @tbhb-dev-reviews

    Refinement: NOT READY — caller cutover dependencies and compatibility proof are incomplete

    Checked

    Gaps

    1. The blockers cover shared-library ports but omit caller migrations. Port the shared skill library (lib.sh, agent.sh, signing.sh, gates.py) to Go #321 excludes the transaction ports; The binary resolver, permanent launcher and configuration bridges are resolved in Go #932 preserves unported callers. For example, packages/agents/source/skills/commit/shared/scripts/commit.sh:51, packages/agents/source/skills/pr/shared/scripts/create-pr.sh:63, packages/agents/source/skills/merge-pr/shared/scripts/squash-merge.sh:49, packages/agents/source/skills/watch-pr/shared/scripts/watch-checks.sh:47, and packages/agents/source/skills/analyze-session/shared/scripts/preflight.sh:32 still source the library. Add native blockers for the issues retiring every remaining caller (including the relevant Move the commit and agent-commit scripts into agentrepo commit #322–Move watch-pr and fix-pr scripts into agentrepo checks #325 and Port analyze-session's shell scripts to Python #331 children), and make AC1 require caller migration as well as function ports. All currently named ports can otherwise finish while deletion still breaks workflows. The parent lookup also returned no parent: attach this cutover under Replace complex shell with tested Go, starting with gates and merging #588 as intended.
    2. AC1's Verify entry proves file absence, not N-2 eligibility. Require release evidence for the file-removal warning, the two-release period, the minimum binary supplying all required commands, and consumer migration instructions. Tie this to The configuration parity tests are retired after N-2 #935's ledger and floor evidence. docs/compatibility.md:5 requires warnings before removing a file. AC6 must preserve the accepted declaration grammar at docs/compatibility.md:13 while recording the deletion release separately; naming only the shipping release does not establish the warning start or elapsed window.
    3. Bound generator changes to tested Go and make independent retirement observable. internal/skills/generate.go:206 groups lib.sh, gates.py, agent.sh and signing.sh behind one trigger; tools/generate-skills.sh:111 has the shell rule, and feat(tools): connect skill generation to the Go command #940 introduces a frozen fallback. Require removal of only lib.sh emission, preservation of helpers still owned by other issues, and regeneration/deployment evidence. Explicitly retain Replace complex shell with tested Go, starting with gates and merging #588's freeze: no new shell logic, with behavior changes in tested Go and only thin exec shims. The current wording leaves generator/fallback treatment unspecified.
    4. AC4 overlaps The residual Bats cases for the resolver and readiness groups are retired #933/The residual Bats cases for the review and policy groups are retired #934, which own case-by-case Bats retirement and may retain real-shell cases. Consume their retirement ledger, identify only residual cases that depend on the removed file, and verify each mapped Go test executes rather than merely naming a replacement suite. Bound residual source/test changes below 800 code lines with a size report; the S label alone does not prove that bound. Add the repository's generation order, coverage-floor checks, and consumer documentation evidence to Verify.

    Split

    Keep one final deletion PR after correcting prerequisites. Keep behavior ports and allocated Bats retirements in their existing issues. No new split is needed if the remaining measured change fits the limit.

    Definition of done

    Ticks mean the current ACs and Verify plan cover the obligation, not that implementation has passed it. 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.
    • devtools-1 mise run check is green, and so are the coverage floors mise run cover-go-check and mise run cover-py-check, which check doesn't run.
    • devtools-2 A change to skill sources under packages/agents/source/ commits what mise run generate-skills, then mise run skill-tokens, then apm install rewrite, in that order, and check-generated-skills (part of lint) passes.
    • devtools-3 A consumer-visible change (the vendored payload, a skill, a reusable workflow, a task or a pin) has its consumer steps in docs/agent-skills-migration.md or the adoption docs, or the PR's Verification says "No consumer impact" and why.

    D3 coverage: AC5 and its checks require success at the head with no gate loosened. D1 lacks the AC1 prerequisite proof and AC4 coverage proof. D2 identifies owner approval but not all independent-review and finding-disposition obligations.

    Round: 1 of 3

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

    @tbhb-dev-reviews

    Refinement: NOT READY — caller-retirement dependencies and generator outcomes still conflict

    Checked

    Gaps

    1. The dependency graph still does not represent caller retirement. The native parent is still null, and the 21 native blockers still omit the newly named Move the commit and agent-commit scripts into agentrepo commit #322–Move watch-pr and fix-pr scripts into agentrepo checks #325 and Port analyze-session's shell scripts to Python #331. Attach chore(agents): delete lib.sh after the Go port; cutover 1 under #588 #997 to Replace complex shell with tested Go, starting with gates and merging #588 and add native blockers for the actual issues that remove the final library-dependent callers after their warning windows. Merely adding these area epics is insufficient: Move the commit and agent-commit scripts into agentrepo commit #322 and Move the pr, write-pr-description and agent-pr scripts into agentrepo pr #323 explicitly leave frozen-shell deletion to later cutovers, Move watch-pr and fix-pr scripts into agentrepo checks #325 excludes fallback retirement, and Port analyze-session's shell scripts to Python #331 only adds a dormant command and leaves both shell callers unchanged. Remove the analyze-session shell scripts after the N-2 window #1003 now owns analyze-session's final removal and should be represented in this prerequisite chain. Current callers still source the file at packages/agents/source/skills/commit/shared/scripts/commit.sh:51, packages/agents/source/skills/pr/shared/scripts/create-pr.sh:63, packages/agents/source/skills/merge-pr/shared/scripts/squash-merge.sh:49, packages/agents/source/skills/watch-pr/shared/scripts/watch-checks.sh:47 and packages/agents/source/skills/analyze-session/shared/scripts/preflight.sh:32. Name who retires each final caller and make the native graph and AC1 Verify agree; do not leave this deletion waiting on an unowned migration.
    2. AC4's helper-preservation requirement conflicts with a prerequisite, and the generator transition is incomplete. Port the shared skill library (lib.sh, agent.sh, signing.sh, gates.py) to Go #321 includes Port the gate runner and pass cache from Python to Go #713, whose AC7 and Approach delete gates.py and its generator copy step. Therefore chore(agents): delete lib.sh after the Go port; cutover 1 under #588 #997 cannot require that helper to keep emitting after all prerequisite ports merge. Require removal of only lib.sh relative to the post-prerequisite baseline, preserving only helpers still shipped there. The current coupling is at internal/skills/generate.go:206 and tools/generate-skills.sh:111. Open PR feat(tools): connect skill generation to the Go command #940 moves the shell implementation to tools/compat/generate-skills.sh and leaves the original path as a capability shim. Specify the prerequisite/retirement owner for that frozen generator so it cannot attempt to copy a deleted library. AC4's Verify instruction that the shim diff show only a removed emission also conflicts with requiring a thin shim: the present script contains the whole generator. Keep observable helper and fallback outcomes in ACs, put paths/mechanics in Approach, and preserve Replace complex shell with tested Go, starting with gates and merging #588's rule that new behavior is tested Go with no new shell logic.
    3. The AC3 search result is incompatible with the required absence test and unchanged protection rules. Its Verify entry permits only history files, while AC4 explicitly requires a Go test using the lib.sh name. Existing helper fixtures also name it at internal/skills/generate_internal_test.go:149, internal/skills/generate_internal_test.go:152 and internal/skills/generate_internal_test.go:159; the protected-path expressions deliberately retain the filename at .agents/agent-skills.conf:4, .agents/agent-skills.conf:5 and .agents/agent-skills.conf:9, including escaped spellings a simple literal grep misses. Define the outcome as no executable dependency or emission, use a search that accounts for escaped policy spellings, and classify a narrow allowlist for absence-test literals, historical documentation and unchanged protection patterns. Do not remove protection patterns merely to satisfy the search.

    Split

    Keep #997 as one final deletion PR after its actual caller and generator retirement prerequisites. Keep behavior ports and allocated Bats retirements with their existing owners. The measured under-800-code-line bound is suitable; split any newly discovered port or generator-fallback retirement into its own issue rather than expanding this cutover.

    Definition of done

    Ticks mean the current ACs and Verify plan cover the obligation, not that implementation has passed. 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.
    • devtools-1 mise run check is green, and so are the coverage floors mise run cover-go-check and mise run cover-py-check, which check doesn't run.
    • devtools-2 A change to skill sources under packages/agents/source/ commits what mise run generate-skills, then mise run skill-tokens, then apm install rewrite, in that order, and check-generated-skills (part of lint) passes.
    • devtools-3 A consumer-visible change (the vendored payload, a skill, a reusable workflow, a task or a pin) has its consumer steps in docs/agent-skills-migration.md or the adoption docs, or the PR's Verification says "No consumer impact" and why.

    Coverage: AC7 covers D3 and devtools-1/2; AC6 covers D8; AC1 covers devtools-3. D1 has AC traceability but still needs the prerequisite and search contradictions above resolved and explicit evidence for every AC on the head. Owner approval alone does not cover all of D2.

    Round: 2 of 3

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

    @tbhb-dev-reviews

    Refinement: NOT READY — the native prerequisite graph still omits analyze-session retirement

    Checked

    Gaps

    1. Finish the actual native relationships. GraphQL reports 25 open native blockers. The four new blockers Remove the frozen commit shell callers after the N-2 window #1004–Remove the frozen watch-pr shell callers after the N-2 window #1007 are present, but Remove the analyze-session shell scripts after the N-2 window #1003 is absent. Remove the analyze-session shell scripts after the N-2 window #1003 owns final analyze-session caller retirement and is itself natively blocked by Switch analyze-session to the Go retro command with the frozen scripts as fallback #1002. Until retirement, the skill can still source the library at packages/agents/source/skills/analyze-session/shared/scripts/preflight.sh:32. Add Remove the analyze-session shell scripts after the N-2 window #1003 as a native blocker. The parent endpoint still returns no parent, and Replace complex shell with tested Go, starting with gates and merging #588's native child list omits chore(agents): delete lib.sh after the Go port; cutover 1 under #588 #997: attach this cutover to Replace complex shell with tested Go, starting with gates and merging #588 as intended. Prerequisites represented transitively through caller-retirement issues can remain a chain; redundant direct links to every area epic are unnecessary.
    2. Represent the generator PR as a PR prerequisite. Dependencies says each prerequisite is a native blocked-by link, then includes feat(tools): connect skill generation to the Go command #940. feat(tools): connect skill generation to the Go command #940 is an open pull request, not an issue, so it cannot be such a link. Record Blocked on: https://github.com/tbhb-dev/devtools/pull/940 separately, or link its owning issue refactor(tools): move skill generation to Go #807 and state the required merged deliverable. AC1's Verify entry must check that the prerequisite deliverables actually merged as well as checking issue blockers; closing a PR without merging or an issue as not planned does not establish the required baseline.

    Split

    Keep this as the final deletion PR; leave behavior ports, caller retirement and allocated Bats retirement with their existing owners. This is the third NOT READY round. The owner must rethink the prerequisite model before another review cycle: correct native relationships and separate issue blockers, PR deliverables and release-window evidence. If the frozen generator needs new behavior, give that behavior a separately refined Go migration.

    Definition of done

    Ticks mean the current ACs and Verify plan cover the obligation, not that implementation has passed. 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.
    • devtools-1 mise run check is green, and so are the coverage floors mise run cover-go-check and mise run cover-py-check, which check doesn't run.
    • devtools-2 A change to skill sources under packages/agents/source/ commits what mise run generate-skills, then mise run skill-tokens, then apm install rewrite, in that order, and check-generated-skills (part of lint) passes.
    • devtools-3 A consumer-visible change (the vendored payload, a skill, a reusable workflow, a task or a pin) has its consumer steps in docs/agent-skills-migration.md or the adoption docs, or the PR's Verification says "No consumer impact" and why.

    Coverage: AC7 covers D3 and devtools-1/2; AC6 covers D8; AC1 covers devtools-3. D1 has AC traceability but needs prerequisite-proof corrections and explicit PR evidence for every AC on the head. Owner approval alone does not cover all of D2. Unticked base duties still apply at completion.

    Round: 3 of 3

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

    @tbhb-dev-reviews

    Refinement: NOT READY — the generator PR still lacks merged-deliverable verification

    Checked

    Gaps

    1. Complete the PR prerequisite proof. AC1's Verify entry checks “each blocker issue,” and Dependencies defines completion through “its issue” and a closing merged PR. Neither covers feat(tools): connect skill generation to the Go command #940 itself: it is a PR, has no closing PR of its own, and is excluded from the native issue blockers. It is currently OPEN with null mergedAt and mergeCommit. Add an explicit prerequisite check for feat(tools): connect skill generation to the Go command #940: require a non-null mergedAt, obtain its mergeCommit, and require git merge-base --is-ancestor <merge commit> origin/main to succeed before deletion. If another deliverable supersedes it, name that deliverable and require the same proof. This does not require feat(tools): connect skill generation to the Go command #940 to merge before refinement; it makes its required baseline verifiable and prevents closing it unmerged from satisfying the prerequisite. The fallback currently lives at tools/generate-skills.sh:111; feat(tools): connect skill generation to the Go command #940 relocates it. This is the remaining part of the previous prerequisite-verification finding.

    Editorial cleanup: move AC4's instruction to name the fallback implementation file into Approach or Verify. Keep the AC focused on observable generation and fallback outcomes.

    Split

    Keep one final deletion PR after the merged prerequisites and release windows. Leave behavior ports, caller retirement and allocated Bats retirement with their existing owners. No additional split is needed now; apply AC6 if the measured residual exceeds the limit.

    Definition of done

    Ticks mean the ACs and Verify plan cover the obligation, not that implementation has passed. Unticked base duties still apply at completion.

    • 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.
    • devtools-1 mise run check is green, and so are the coverage floors mise run cover-go-check and mise run cover-py-check, which check doesn't run.
    • devtools-2 A change to skill sources under packages/agents/source/ commits what mise run generate-skills, then mise run skill-tokens, then apm install rewrite, in that order, and check-generated-skills (part of lint) passes.
    • devtools-3 A consumer-visible change (the vendored payload, a skill, a reusable workflow, a task or a pin) has its consumer steps in docs/agent-skills-migration.md or the adoption docs, or the PR's Verification says "No consumer impact" and why.

    Coverage: AC7 covers D3 and devtools-1/2; AC6 covers D8; AC1 covers devtools-3. D1 has AC traceability but retains the PR-prerequisite proof gap above; owner approval alone does not cover all of D2.

    Round: 1 of 3

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

    @tbhb-dev-reviews

    Refinement: READY — the final library deletion has verifiable prerequisites and a bounded scope

    Checked

    Gaps

    None in readiness. The open prerequisites, release-window evidence and owner approval remain implementation/merge conditions; READY does not assert that those conditions have already passed.

    Split

    Keep one final deletion PR after the prerequisites and warning windows. Leave behavior ports, caller retirement and allocated Bats retirement with their existing issues. AC6 requires splitting before review if the residual non-generated source/test delta reaches 800 code lines.

    Definition of done

    Ticks mean the ACs and Verify plan cover the obligation, not that implementation has passed it. Unticked base duties still apply at completion.

    • 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.
    • devtools-1 mise run check is green, and so are the coverage floors mise run cover-go-check and mise run cover-py-check, which check doesn't run.
    • devtools-2 A change to skill sources under packages/agents/source/ commits what mise run generate-skills, then mise run skill-tokens, then apm install rewrite, in that order, and check-generated-skills (part of lint) passes.
    • devtools-3 A consumer-visible change (the vendored payload, a skill, a reusable workflow, a task or a pin) has its consumer steps in docs/agent-skills-migration.md or the adoption docs, or the PR's Verification says "No consumer impact" and why.

    Coverage: AC7 covers D3 and devtools-1/2; AC6 covers D8; AC1 covers devtools-3. D1 has complete AC-to-check traceability, while its full PR evidence and merged-head reporting remain completion duties. Owner approval covers part of D2, rather than its entire independent-review and finding-disposition obligation.

    Round: 1 of 3

  8. added
    refinement:readyPassed the Definition of Ready; may be picked up
    and removed
    refinement:activeA refinement round is open; not ready for implementation
    on Oct 31, 2026
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:readyPassed the Definition of Ready; may be picked up

    Type

    Fields

    Priority

    None yet

    Work type

    None yet

    Projects

    • Status
      Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions