From dcff28b35ea3a12757931daa2dd3c72a84b7d426 Mon Sep 17 00:00:00 2001 From: SteveBot <1153461+unbraind@users.noreply.github.com> Date: Wed, 14 Oct 2026 00:22:43 +0200 Subject: [PATCH] Close tracker items delivered by merged pull requests - [pm-github-fmrf](https://github.com/unbraind/pm-github/blob/main/.agents/pm/features/pm-github-fmrf.toon): #115 (1315818) - [pm-github-6srd](https://github.com/unbraind/pm-github/blob/main/.agents/pm/features/pm-github-6srd.toon): #116 (2d52ed1) --- .agents/pm/features/pm-github-6srd.toon | 10 ++++++++-- .agents/pm/features/pm-github-fmrf.toon | 10 ++++++++-- .agents/pm/history/pm-github-6srd.jsonl | 1 + .agents/pm/history/pm-github-fmrf.jsonl | 1 + CHANGELOG.md | 7 +++++++ 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/.agents/pm/features/pm-github-6srd.toon b/.agents/pm/features/pm-github-6srd.toon index 85ebe336..6238a847 100644 --- a/.agents/pm/features/pm-github-6srd.toon +++ b/.agents/pm/features/pm-github-6srd.toon @@ -2,12 +2,17 @@ id: pm-github-6srd title: Select GitHub issue imports and cap list volume description: Fetch explicitly selected issue numbers through individual REST endpoints; validate conflicts and missing issues before writes; bound newest-updated list imports with truncation receipts. type: Feature -status: in_progress +status: closed priority: 1 tags: [] created_at: "2026-10-12T13:25:14.333Z" -updated_at: "2026-10-12T13:57:05.635Z" +updated_at: "2026-10-13T22:22:41.926Z" +closed_at: "2026-10-13T22:22:41.904Z" +completed_at: "2026-10-13T22:22:41.904Z" author: codex-sol +resolution: Implemented and merged in #116 (2d52ed1). +expected_result: The change described by this item is on main. +actual_result: "Merged in #116 as 2d52ed1; checks successful at head 85acd18: CodeQL, codeql, semgrep-cloud-platform/scan, test (22), test (26)." comments[7]{created_at,author,text}: "2026-10-12T13:25:56.037Z",codex-sol,"Plan: use individual REST issue endpoints for explicit selection, validate all numbers before tracker mutation, preserve the shared comment/dependency/atomic/gate pipeline and provenance idempotency. List limits request newest-updated order and stop after one extra eligible issue establishes truncation. Add recorded public fleet REST fixtures and real scratch-tracker regressions. Keep PR #115 blocker code outside this diff." "2026-10-12T13:34:57.011Z",codex-sol,"Implemented selection prefetch and missing-number/PR refusal before writes, conflict validation, and bounded newest-updated list fetches with limit/truncated receipts. Recorded public REST fixtures cover pm-web #189/#96/PR #175 and pm-slack-standup #113. Initial focused run passed 23/26; fixture assertions needed existing body trimming and native-comment reads, and CLI acceptance now installs a packed archive because directory installs hit the SDK source-scan ceiling. Type checking, documentation, lint, zero-duplication and privacy gates pass." @@ -29,4 +34,5 @@ tests[1]{command,scope,timeout_seconds,provenance{author,created_at,source_kind, docs[2]{path,scope}: README.md,project test/fixtures/import-selection/README.md,project +close_reason: "Delivered by #116 \"feat: select GitHub issue imports and cap list volume\" (merged as 2d52ed1). Checks successful at the PR head 85acd18: CodeQL, codeql, semgrep-cloud-platform/scan, test (22), test (26)." body: "" diff --git a/.agents/pm/features/pm-github-fmrf.toon b/.agents/pm/features/pm-github-fmrf.toon index a159ab8f..9f509835 100644 --- a/.agents/pm/features/pm-github-fmrf.toon +++ b/.agents/pm/features/pm-github-fmrf.toon @@ -2,12 +2,17 @@ id: pm-github-fmrf title: Revalidate blocked items against the live state of their GitHub blockers description: "Add `pm github blockers`: re-read every blocked item (plus non-terminal items whose blocked_by dependency targets an external GitHub reference), parse blocked_reason/description/comments for GitHub references (owner/repo#N, bare #N vs the item repo or --repo, full issue/PR URLs, GH-N), query their current state via batched GraphQL, and report a verdict (cleared / partially_cleared / still_blocked / unresolvable). Report-only: never auto-unblock; --comment appends one idempotent pm comment per cleared item. Exit 0 when nothing cleared, a documented non-zero code when something cleared so CI and the scheduled sync can alert." type: Feature -status: in_progress +status: closed priority: 2 tags: [] created_at: "2026-10-12T10:46:45.720Z" -updated_at: "2026-10-13T21:08:24.225Z" +updated_at: "2026-10-13T22:22:39.478Z" +closed_at: "2026-10-13T22:22:39.469Z" +completed_at: "2026-10-13T22:22:39.469Z" author: pi-gh-blockers +resolution: Implemented and merged in #115 (1315818). +expected_result: The change described by this item is on main. +actual_result: "Merged in #115 as 1315818; checks successful at head 9f019c8: CodeQL, codeql, semgrep-cloud-platform/scan, test (22), test (26)." comments[37]{created_at,author,text}: "2026-10-12T10:46:49.828Z",pi-gh-blockers,"Claimed and started. Companion item: https://github.com/unbraind/pm-cli-website/blob/main/.agents/pm/features/pm-cli-website-5o9j.toon — this implements the blocker-revalidation capability the companion item calls for, in pm-github where the GitHub client, auth handling and provenance model already live. Design summary: complete pm list read (same receipts as import), candidate selection = status blocked OR non-terminal with an external GitHub blocked_by dependency, reference parsing across blocked_reason/description/comments, batched GraphQL state queries, report-only verdicts, idempotent --comment, wired into the reusable scheduled sync workflow as a report-only step." "2026-10-12T10:55:14.500Z",pi-gh-blockers,"Implementation drafted in the package worktree: complete-read refactor (runCompletePmList shared by readPmItems and the new readBlockerPmItems), BlockerPmItem decoder validating blocked_reason/blocked_by/dependencies/comments on top of the existing complete-corpus receipts, reference parser (URL, owner/repo#N, GH-N, name#N, bare #N; gitlab/jira/linear locators masked, github: locator scheme unwrapped), hint resolution against the item's gh: provenance repo then --repo, batched GraphQL state query (issue+pullRequest per number, repos deduped+sorted so recorded fixtures stay stable), verdict function, idempotent --comment with per-item lock, report + exit codes (0 nothing cleared, 4 cleared, 2 usage/token, 1 total state failure). Real GraphQL fixtures recorded from api.github.com: unbraind/pm-cli#854 closed 2026-08-01 (the motivating blocker), #1246 open, PR #34 merged, #999999 not found, plus a repository-not-found and a data-null error response." @@ -101,4 +106,5 @@ docs[3]: note: README documents the corrected exit-code contract (1 takes precedence over 4); docstring and registration comment now match it - path: test/fixtures/blockers/README.md scope: project +close_reason: "Delivered by #115 \"feat: revalidate live GitHub blockers without unblocking items\" (merged as 1315818). Checks successful at the PR head 9f019c8: CodeQL, codeql, semgrep-cloud-platform/scan, test (22), test (26)." body: "" diff --git a/.agents/pm/history/pm-github-6srd.jsonl b/.agents/pm/history/pm-github-6srd.jsonl index a94fedee..51f8ba77 100644 --- a/.agents/pm/history/pm-github-6srd.jsonl +++ b/.agents/pm/history/pm-github-6srd.jsonl @@ -15,3 +15,4 @@ {"hash_algorithm":"sha256","ts":"2026-10-12T13:50:17.425Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"a50dada2dcd7f28358c36335","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"tests_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-10-12T13:50:17.425Z"},{"op":"add","path":"/metadata/tests","value":[{"command":"npm run build && node --test test/import-selection.test.ts","scope":"project","timeout_seconds":300,"provenance":{"author":"codex-sol","created_at":"2026-10-12T13:50:17.312Z","source_kind":"local_mutation","source_ref":"feat/import-issue-selection"}}]}],"before_hash":"ad66d61b245ba07d8c93cd4b533231a59fa321e406cfa8d35fcb1ac1f689f60d","after_hash":"d7a37fad8d8c10a4da05dbbc4e0d420f7dfb09108873c2a41aab9a8e44b31e73","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"a08163ac77eb65f6d9e5cbbb8659f98c242ed8ea6252a0b528156e868751fe72"} {"hash_algorithm":"sha256","ts":"2026-10-12T13:57:04.892Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"a50dada2dcd7f28358c36335","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/6","value":{"created_at":"2026-10-12T13:57:04.892Z","author":"codex-sol","text":"Final isolated-Git-identity bun run release:check passed: 546/546 tests, zero failures/cancellations/skips/todo; 12 authored modules with exact 100/100/100/100 coverage (8597/8597 lines and statements, 211/211 functions, 2315/2315 branches), unchanged thresholds and inventories. All release-chain checks passed, including zero production vulnerabilities, packing, changelog and publish attestation. Bun orchestrates the release chain; its coverage runner invokes Node. Implementation, docs, tests and fixture hashes match the source validated by the npm gate. Manual public selection, both assertion-based revert proofs, and PM-linked 26/26 acceptance are complete. No blocker code changed. Claims will be released; the item remains in progress for PR review."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-12T13:57:04.892Z"}],"before_hash":"d7a37fad8d8c10a4da05dbbc4e0d420f7dfb09108873c2a41aab9a8e44b31e73","after_hash":"ab3c76776132c7cf9b8f8eb13ad1b22c0eb7b4062b5772ee043704b105150fa4","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"0237b0135d617a4f601f98a2d1484de1baacd10a6ec608869a46289093d6a660"} {"hash_algorithm":"sha256","ts":"2026-10-12T13:57:05.635Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"a50dada2dcd7f28358c36335","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"release","patch":[{"op":"remove","path":"/metadata/claim_principal"},{"op":"remove","path":"/metadata/assignee"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-12T13:57:05.635Z"}],"before_hash":"ab3c76776132c7cf9b8f8eb13ad1b22c0eb7b4062b5772ee043704b105150fa4","after_hash":"82dc340afe1e9cd63408c75f5181c40cea1c652996e7dc814b5c055c5ba77b03","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"c742ab8ce87a919ebf11fef9207618916cb730ab5e491321bee487d796d9ce4d"} +{"hash_algorithm":"sha256","ts":"2026-10-13T22:22:41.926Z","author":"claude-hub","author_source":"asserted","agent_harness":"claude-code","agent_model":"claude-opus-5-5","agent_model_source":"probe","agent_instance":"12b63206ea84389d602b5075","agent_provenance":{"model":{"value":"claude-opus-5-5","source":"probe"},"effort":{"value":"xhigh","source":"environment"},"role":{"value":"implementer","source":"argv"},"topic":null,"version":{"value":"2.1.296","source":"probe"}},"op":"close","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-10-13T22:22:41.926Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-10-13T22:22:41.904Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-10-13T22:22:41.904Z"},{"op":"add","path":"/metadata/resolution","value":"Implemented and merged in #116 (2d52ed1)."},{"op":"add","path":"/metadata/expected_result","value":"The change described by this item is on main."},{"op":"add","path":"/metadata/actual_result","value":"Merged in #116 as 2d52ed1; checks successful at head 85acd18: CodeQL, codeql, semgrep-cloud-platform/scan, test (22), test (26)."},{"op":"add","path":"/metadata/close_reason","value":"Delivered by #116 \"feat: select GitHub issue imports and cap list volume\" (merged as 2d52ed1). Checks successful at the PR head 85acd18: CodeQL, codeql, semgrep-cloud-platform/scan, test (22), test (26)."}],"before_hash":"82dc340afe1e9cd63408c75f5181c40cea1c652996e7dc814b5c055c5ba77b03","after_hash":"fff6a4e56fc86678f1701fc43e1ca7b0dce6de912e1d1ae66526a2fa6c988263","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"},"version":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"e57cf6b4ed1cedffcc8e73b0f5d689a03bb92ccdcadf256fb05e180cc3fcd0c7"} diff --git a/.agents/pm/history/pm-github-fmrf.jsonl b/.agents/pm/history/pm-github-fmrf.jsonl index 04a07ffa..5603486b 100644 --- a/.agents/pm/history/pm-github-fmrf.jsonl +++ b/.agents/pm/history/pm-github-fmrf.jsonl @@ -62,3 +62,4 @@ {"hash_algorithm":"sha256","ts":"2026-10-13T21:08:19.596Z","author":"claude-hub","author_source":"asserted","agent_harness":"claude-code","agent_model":"claude-opus-5-5","agent_model_source":"probe","agent_instance":"12b63206ea84389d602b5075","agent_provenance":{"model":{"value":"claude-opus-5-5","source":"probe"},"effort":{"value":"xhigh","source":"environment"},"role":null,"topic":null,"version":{"value":"2.1.296","source":"probe"}},"op":"tests_update","patch":[{"op":"add","path":"/metadata/tests/2/timeout_seconds","value":1800},{"op":"add","path":"/metadata/tests/2/updated_by","value":"claude-hub"},{"op":"add","path":"/metadata/tests/2/updated_at","value":"2026-10-13T21:08:19.596Z"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-13T21:08:19.596Z"}],"before_hash":"6620afc9b67ada5ae54405a1581f7c56fdf422d7da22cdd7e50d5bd74014135f","after_hash":"de13653e3be8d7c4edafd24e75fb9316ca142c4ec604e5cd3ed544b5090ec15f","item_hash_version":3,"context":{"linked_test_update":{"index":3,"fields":["timeout_seconds"]},"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"},"version":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"86511bc5e5a5d3fd28929bbeca90e4ba6431482b7ef4501b7e7952f4a2e36ae5"} {"hash_algorithm":"sha256","ts":"2026-10-13T21:08:21.231Z","author":"claude-hub","author_source":"asserted","agent_harness":"claude-code","agent_model":"claude-opus-5-5","agent_model_source":"probe","agent_instance":"12b63206ea84389d602b5075","agent_provenance":{"model":{"value":"claude-opus-5-5","source":"probe"},"effort":{"value":"xhigh","source":"environment"},"role":null,"topic":null,"version":{"value":"2.1.296","source":"probe"}},"op":"docs_add","patch":[{"op":"remove","path":"/metadata/docs/3"},{"op":"remove","path":"/metadata/docs/2/note"},{"op":"replace","path":"/metadata/docs/2/path","value":"test/fixtures/blockers/README.md"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-13T21:08:21.231Z"}],"before_hash":"de13653e3be8d7c4edafd24e75fb9316ca142c4ec604e5cd3ed544b5090ec15f","after_hash":"5abd65ddc6b0268aeb0b0a2a38f7e6ce78e7374d53ed02f1100949fd4d97f321","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"},"version":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"d184e93b7deffd5d90f80ac4f0bad61489a80ee26575f9c931944aef1ea5249c"} {"hash_algorithm":"sha256","ts":"2026-10-13T21:08:24.225Z","author":"claude-hub","author_source":"asserted","agent_harness":"claude-code","agent_model":"claude-opus-5-5","agent_model_source":"probe","agent_instance":"12b63206ea84389d602b5075","agent_provenance":{"model":{"value":"claude-opus-5-5","source":"probe"},"effort":{"value":"xhigh","source":"environment"},"role":null,"topic":null,"version":{"value":"2.1.296","source":"probe"}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/36","value":{"created_at":"2026-10-13T21:08:24.225Z","author":"claude-hub","text":"Review round 4: linked test 3 (build + blockers suite, ~217 s) now carries timeout_seconds 1800 like test 1, so pm test --run no longer reports a false timeout; removed the duplicate README doc link whose #github-blockers anchor does not exist (the README.md entry already covers the section)."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-13T21:08:24.225Z"}],"before_hash":"5abd65ddc6b0268aeb0b0a2a38f7e6ce78e7374d53ed02f1100949fd4d97f321","after_hash":"b098a5c9eaa075c498992a21f47bfe64738f24f3789f47f145e2f341032a0cc3","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"},"version":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"e988567824921c164f98026b32b8d422b1ff9f1b3725bf99237f7655c42696e1"} +{"hash_algorithm":"sha256","ts":"2026-10-13T22:22:39.478Z","author":"claude-hub","author_source":"asserted","agent_harness":"claude-code","agent_model":"claude-opus-5-5","agent_model_source":"probe","agent_instance":"12b63206ea84389d602b5075","agent_provenance":{"model":{"value":"claude-opus-5-5","source":"probe"},"effort":{"value":"xhigh","source":"environment"},"role":{"value":"implementer","source":"argv"},"topic":null,"version":{"value":"2.1.296","source":"probe"}},"op":"close","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-10-13T22:22:39.478Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-10-13T22:22:39.469Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-10-13T22:22:39.469Z"},{"op":"add","path":"/metadata/resolution","value":"Implemented and merged in #115 (1315818)."},{"op":"add","path":"/metadata/expected_result","value":"The change described by this item is on main."},{"op":"add","path":"/metadata/actual_result","value":"Merged in #115 as 1315818; checks successful at head 9f019c8: CodeQL, codeql, semgrep-cloud-platform/scan, test (22), test (26)."},{"op":"add","path":"/metadata/close_reason","value":"Delivered by #115 \"feat: revalidate live GitHub blockers without unblocking items\" (merged as 1315818). Checks successful at the PR head 9f019c8: CodeQL, codeql, semgrep-cloud-platform/scan, test (22), test (26)."}],"before_hash":"b098a5c9eaa075c498992a21f47bfe64738f24f3789f47f145e2f341032a0cc3","after_hash":"22fecf03c98bbe71bb7864900b5021b4bb95c0bcb235763128152a8ae708e333","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"},"version":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"4bc47c23d46cfc4527b5b89285b3454f9a4723aa45441a0cef40bef944a0eeb7"} diff --git a/CHANGELOG.md b/CHANGELOG.md index 7edf7028..d2af8096 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## Unreleased + +### Added + +- Select GitHub issue imports and cap list volume ([pm-github-6srd](https://github.com/unbraind/pm-github/blob/main/.agents/pm/features/pm-github-6srd.toon)) +- Revalidate blocked items against the live state of their GitHub blockers ([pm-github-fmrf](https://github.com/unbraind/pm-github/blob/main/.agents/pm/features/pm-github-fmrf.toon)) + ## 2026.10.8 - 2026-10-08 ### Added