Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions .agents/pm/features/pm-github-6srd.toon
Original file line number Diff line number Diff line change
Expand Up @@ -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."
Expand All @@ -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: ""
10 changes: 8 additions & 2 deletions .agents/pm/features/pm-github-fmrf.toon
Original file line number Diff line number Diff line change
Expand Up @@ -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."
Expand Down Expand Up @@ -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: ""
1 change: 1 addition & 0 deletions .agents/pm/history/pm-github-6srd.jsonl
Original file line number Diff line number Diff line change
Expand Up @@ -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"}
1 change: 1 addition & 0 deletions .agents/pm/history/pm-github-fmrf.jsonl
Original file line number Diff line number Diff line change
Expand Up @@ -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"}
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Loading