Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
c541989
fix(changelog): derive the no-tag release date from the version, not …
unbraind Aug 24, 2026
7809f4f
test(changelog): prove the release-workflow path, which changelog:che…
unbraind Aug 24, 2026
8a5c91c
test(changelog): prove the release-workflow path, which changelog:che…
unbraind Aug 24, 2026
ae40661
fix(ci): check each generator invocation on its own, and fail when th…
unbraind Aug 27, 2026
056cfc7
chore(pm): drop a comment that a retried add had duplicated
unbraind Aug 27, 2026
6e3ac37
ci: run the changelog-date verifier instead of only shipping it
unbraind Aug 27, 2026
29fa88d
docs(pm): record the gate wiring and the review findings applied to t…
unbraind Aug 27, 2026
9fa31d9
fix(ci): find the release-time generator invocations the shell verifi…
unbraind Aug 27, 2026
72e4d09
test: execute the verifier's rules against fixtures, and close three …
unbraind Aug 27, 2026
b8405b3
fix(ci): stop three guards failing open, and stop one gate measuring …
unbraind Aug 27, 2026
80ea7d6
test: follow the verifier's own contract change, and drop a duplicate…
unbraind Aug 27, 2026
c006af6
fix: close a continuation bypass, stop a comment satisfying a flag check
unbraind Aug 27, 2026
38fac9a
fix: split on unspaced shell separators, and stop two guards at the r…
unbraind Aug 27, 2026
1691f8c
test: verify the rebased changelog date contract
unbraind Aug 30, 2026
a6d52f9
test: remove an unused verifier import
unbraind Aug 30, 2026
fa05f74
fix: preserve version-derived changelog generation after rebase
unbraind Aug 30, 2026
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
5 changes: 5 additions & 0 deletions .agents/pm/history/pm-context-91b3.jsonl
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{"ts":"2026-08-30T15:40:57.183Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"c099f1522ffea5016a460ccf","agent_provenance":{"model":{"value":"gpt-5.6-sol","source":"environment"},"effort":null,"role":{"value":"implementer","source":"argv"},"topic":null},"op":"create","patch":[{"op":"add","path":"/metadata/id","value":"pm-context-91b3"},{"op":"add","path":"/metadata/title","value":"Remove the unused changelog verifier test import"},{"op":"add","path":"/metadata/description","value":"DeepScan identified the unused main binding in the changelog verifier test; remove the dead import and re-run all gates."},{"op":"add","path":"/metadata/type","value":"Issue"},{"op":"add","path":"/metadata/status","value":"open"},{"op":"add","path":"/metadata/priority","value":2},{"op":"add","path":"/metadata/tags","value":[]},{"op":"add","path":"/metadata/created_at","value":"2026-08-30T15:40:57.183Z"},{"op":"add","path":"/metadata/updated_at","value":"2026-08-30T15:40:57.183Z"},{"op":"add","path":"/metadata/author","value":"pi-agent"}],"before_hash":"3cc22dff72be7b14824654a7a64ea62b04799939b2fee54c1b5f52ca60bf6df0","after_hash":"ac93c251d70aedd33f8084fe74531db175fb15e825ff15f060e98479fe3943dc","item_hash_version":2,"message":""}
{"ts":"2026-08-30T15:40:57.715Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"c099f1522ffea5016a460ccf","agent_provenance":{"model":{"value":"gpt-5.6-sol","source":"environment"},"effort":null,"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-08-30T15:40:57.715Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"},{"op":"add","path":"/metadata/files","value":[{"path":"test/verify-release-changelog-date.test.ts","scope":"project","note":"Remove the unused binding"}]},{"op":"add","path":"/metadata/tests","value":[{"command":"npm test","scope":"project","provenance":{"author":"pi-agent","created_at":"2026-08-30T15:40:57.689Z","source_kind":"local_mutation","source_ref":"fix/stabilise-changelog-date-from-version"}}]}],"before_hash":"ac93c251d70aedd33f8084fe74531db175fb15e825ff15f060e98479fe3943dc","after_hash":"2cff149f3042c8c2f5222e6c95f1b052446146d861656dff975ca6a27f2398c8","item_hash_version":2,"message":"Started the DeepScan cleanup."}
{"ts":"2026-08-30T15:40:58.258Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"c099f1522ffea5016a460ccf","agent_provenance":{"model":{"value":"gpt-5.6-sol","source":"environment"},"effort":null,"role":{"value":"implementer","source":"argv"},"topic":null},"op":"claim","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-08-30T15:40:58.258Z"},{"op":"add","path":"/metadata/assignee","value":"pi-agent"},{"op":"add","path":"/metadata/claim_principal","value":"pi-agent"}],"before_hash":"2cff149f3042c8c2f5222e6c95f1b052446146d861656dff975ca6a27f2398c8","after_hash":"48d4c61847f11677134fdf894d8dbdbc37fbb596055e80455ae5ff1147c5e1af","item_hash_version":2}
{"ts":"2026-08-30T15:41:11.551Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"c099f1522ffea5016a460ccf","agent_provenance":{"model":{"value":"gpt-5.6-sol","source":"environment"},"effort":null,"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-08-30T15:41:11.551Z"},{"op":"add","path":"/metadata/comments","value":[{"created_at":"2026-08-30T15:41:11.534Z","author":"pi-agent","text":"Removed the unused main import identified by DeepScan. npm test passes all 319 tests."}]}],"before_hash":"48d4c61847f11677134fdf894d8dbdbc37fbb596055e80455ae5ff1147c5e1af","after_hash":"cdc5f6a3f3e63a3f0c5b9334fdc4e8dba1f5011aaa85769a92877608e1e54e9c","item_hash_version":2}
{"ts":"2026-08-30T15:41:12.008Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"c099f1522ffea5016a460ccf","agent_provenance":{"model":{"value":"gpt-5.6-sol","source":"environment"},"effort":null,"role":{"value":"implementer","source":"argv"},"topic":null},"op":"close","patch":[{"op":"remove","path":"/metadata/assignee"},{"op":"replace","path":"/metadata/updated_at","value":"2026-08-30T15:41:12.008Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-08-30T15:41:11.992Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-08-30T15:41:11.992Z"},{"op":"add","path":"/metadata/close_reason","value":"The test imports only executed verifier symbols and the complete suite passes."}],"before_hash":"cdc5f6a3f3e63a3f0c5b9334fdc4e8dba1f5011aaa85769a92877608e1e54e9c","after_hash":"02b45c27617a534e2a99772b2e23262cc11f8fefd3dc17ab813757ff7ba21bd0","item_hash_version":2}
12 changes: 12 additions & 0 deletions .agents/pm/history/pm-context-a9iw.jsonl

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions .agents/pm/history/pm-context-o76d.jsonl
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{"ts":"2026-08-30T15:34:39.913Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"c099f1522ffea5016a460ccf","agent_provenance":{"model":{"value":"gpt-5.6-sol","source":"environment"},"effort":null,"role":{"value":"implementer","source":"argv"},"topic":null},"op":"create","patch":[{"op":"add","path":"/metadata/id","value":"pm-context-o76d"},{"op":"add","path":"/metadata/title","value":"Rebase the changelog date verifier onto the current release workflow"},{"op":"add","path":"/metadata/description","value":"Rebase PR 76 onto current main while preserving version-derived changelog dates, both release verifiers, and the current package and workflow behavior."},{"op":"add","path":"/metadata/type","value":"Issue"},{"op":"add","path":"/metadata/status","value":"open"},{"op":"add","path":"/metadata/priority","value":2},{"op":"add","path":"/metadata/tags","value":[]},{"op":"add","path":"/metadata/created_at","value":"2026-08-30T15:34:39.913Z"},{"op":"add","path":"/metadata/updated_at","value":"2026-08-30T15:34:39.913Z"},{"op":"add","path":"/metadata/author","value":"pi-agent"}],"before_hash":"3cc22dff72be7b14824654a7a64ea62b04799939b2fee54c1b5f52ca60bf6df0","after_hash":"d430f29467eb753a351acbed5680b485471f821facf9055d2f0351459a0142bf","item_hash_version":2,"message":""}
{"ts":"2026-08-30T15:34:48.879Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"c099f1522ffea5016a460ccf","agent_provenance":{"model":{"value":"gpt-5.6-sol","source":"environment"},"effort":null,"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-08-30T15:34:48.879Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"},{"op":"add","path":"/metadata/files","value":[{"path":".gitignore","scope":"project","note":"Retain current transaction-journal ignore policy"},{"path":".github/workflows/ci.yml","scope":"project","note":"Run both release verifiers"},{"path":"package.json","scope":"project","note":"Preserve current dependencies and both release gates"},{"path":"CHANGELOG.md","scope":"project","note":"Regenerate after closing the tracking item"},{"path":"scripts/verify-release-changelog-date.ts","scope":"project","note":"Substantive verifier"},{"path":"test/verify-release-changelog-date.test.ts","scope":"project","note":"Regression coverage"}]},{"op":"add","path":"/metadata/tests","value":[{"command":"npm test","scope":"project","provenance":{"author":"pi-agent","created_at":"2026-08-30T15:34:48.855Z","source_kind":"local_mutation","source_ref":"fix/stabilise-changelog-date-from-version"}},{"command":"npm run release:check","scope":"project","provenance":{"author":"pi-agent","created_at":"2026-08-30T15:34:48.855Z","source_kind":"local_mutation","source_ref":"fix/stabilise-changelog-date-from-version"}}]}],"before_hash":"d430f29467eb753a351acbed5680b485471f821facf9055d2f0351459a0142bf","after_hash":"e1de4f39a81c57cdc3b242632fdce9eeaf504874b9b96f72e05ad4f6ee6ad84b","item_hash_version":2,"message":"Started the rebase and conflict reconciliation."}
{"ts":"2026-08-30T15:34:49.306Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"c099f1522ffea5016a460ccf","agent_provenance":{"model":{"value":"gpt-5.6-sol","source":"environment"},"effort":null,"role":{"value":"implementer","source":"argv"},"topic":null},"op":"claim","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-08-30T15:34:49.306Z"},{"op":"add","path":"/metadata/assignee","value":"pi-agent"},{"op":"add","path":"/metadata/claim_principal","value":"pi-agent"}],"before_hash":"e1de4f39a81c57cdc3b242632fdce9eeaf504874b9b96f72e05ad4f6ee6ad84b","after_hash":"0814ae7ae5109ade773a2713d8410735e2600f71e476a83774fb0bcfa1aa79e0","item_hash_version":2}
{"ts":"2026-08-30T15:36:11.609Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"c099f1522ffea5016a460ccf","agent_provenance":{"model":{"value":"gpt-5.6-sol","source":"environment"},"effort":null,"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-08-30T15:36:11.609Z"},{"op":"add","path":"/metadata/comments","value":[{"created_at":"2026-08-30T15:36:11.581Z","author":"pi-agent","text":"Rebased onto origin/main. Resolved .gitignore by retaining main current transaction-journal policy; resolved .github/workflows/ci.yml by retaining both release verifiers; resolved package.json by retaining main current version/dependency/release-workflow gates plus the changelog-date verifier; resolved CHANGELOG.md by taking the requested rebase side and regenerating after close. Upgraded pm-changelog to 2026.8.29 and made the executable probe use 2026.1.2-2. npm run verify:release-changelog-date, npm test, and npm run release:check pass with 100% configured coverage. Regression proofs: removing --date-from-version made the verifier fail; installing pm-changelog 2026.8.17 while retaining the suffix probe also made it fail; both restored versions pass."}]}],"before_hash":"0814ae7ae5109ade773a2713d8410735e2600f71e476a83774fb0bcfa1aa79e0","after_hash":"fa95553acf22ed8f6f0dec59508699374dc0d542a6a3b2b9f991bf51cdda406b","item_hash_version":2}
{"ts":"2026-08-30T15:36:12.228Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"c099f1522ffea5016a460ccf","agent_provenance":{"model":{"value":"gpt-5.6-sol","source":"environment"},"effort":null,"role":{"value":"implementer","source":"argv"},"topic":null},"op":"close","patch":[{"op":"remove","path":"/metadata/assignee"},{"op":"replace","path":"/metadata/updated_at","value":"2026-08-30T15:36:12.228Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-08-30T15:36:12.212Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-08-30T15:36:12.212Z"},{"op":"add","path":"/metadata/close_reason","value":"Rebase conflicts are resolved and both unsuffixed and suffixed changelog date paths pass all gates."}],"before_hash":"fa95553acf22ed8f6f0dec59508699374dc0d542a6a3b2b9f991bf51cdda406b","after_hash":"0cd9df18d2ba4172499aae1eac466ef66b9e6e694c76c70faaaa55e328bcec35","item_hash_version":2}
21 changes: 21 additions & 0 deletions .agents/pm/issues/pm-context-91b3.toon
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
id: pm-context-91b3
title: Remove the unused changelog verifier test import
description: DeepScan identified the unused main binding in the changelog verifier test; remove the dead import and re-run all gates.
type: Issue
status: closed
priority: 2
tags: []
created_at: "2026-08-30T15:40:57.183Z"
updated_at: "2026-08-30T15:41:12.008Z"
closed_at: "2026-08-30T15:41:11.992Z"
completed_at: "2026-08-30T15:41:11.992Z"
claim_principal: pi-agent
author: pi-agent
comments[1]{created_at,author,text}:
"2026-08-30T15:41:11.534Z",pi-agent,Removed the unused main import identified by DeepScan. npm test passes all 319 tests.
files[1]{path,scope,note}:
test/verify-release-changelog-date.test.ts,project,Remove the unused binding
tests[1]{command,scope,provenance{author,created_at,source_kind,source_ref}}:
npm test,project,pi-agent,"2026-08-30T15:40:57.689Z",local_mutation,fix/stabilise-changelog-date-from-version
close_reason: The test imports only executed verifier symbols and the complete suite passes.
body: ""
36 changes: 36 additions & 0 deletions .agents/pm/issues/pm-context-a9iw.toon
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
id: pm-context-a9iw
title: "The changelog gate stamps an untagged version with the current date, so its verdict flips every midnight with no commit"
description: "pm-changelog synthesises a pending release window for a version that has no matching git tag and stamps it with the current UTC date rather than anything derived from the input. The release workflow tags only after npm publish succeeds, and publish has been failing fleet wide since 2026-08-21, so this package currently carries an untagged version and is on that clock dependent path. The exposure is masked today only by a coincidence, because the package version and today's date are the same calendar day, and it fails on any later day with no commit having changed. Verified on pm-ops where the version date and today's date differ, which makes the comparison decisive: an untagged 2026.8.22 generates heading 2026.8.22 - 2026-08-24 without the flag and 2026.8.22 - 2026-08-22 with it. The remedy needs no new code because pm-changelog 2026.8.17 already ships --date-from-version, and zero of twenty packages passed it. Applied to every invocation of the generator in this package rather than only to the scripts whose names begin with changelog, because the release workflow invokes it directly and generation and check must not disagree. Site audit: package.json sites 1 flagged 1; .github/workflows/release.yml sites 2 flagged 2;"
type: Issue
status: open
priority: 1
tags[3]: changelog,gates,release
created_at: "2026-08-24T09:39:49.769Z"
updated_at: "2026-08-27T17:19:03.018Z"
author: "harness:claude-code"
comments[2]{created_at,author,text}:
"2026-08-24T10:03:10.966Z","harness:claude-code","CodeRabbit was right that the linked test only covered the package.json invocation and never reached the direct pm-changelog commands in the release workflow. Added an executable check that does both halves. The static half enumerates every tracked file containing a generator invocation and asserts each file's flagged count is not below its site count, which fails when any single site loses the flag; verified by removing the flag from one of two release.yml sites and watching it report one of two and exit non-zero. The behavioural half runs the generator twice on the same probe version 2026.1.2, deliberately chosen so its calendar date cannot coincide with today, and asserts the heading is 2026.1.2 - 2026-01-02 with the flag and 2026.1.2 - 2026-08-24 without it, so the test states the defect rather than merely asserting the fix."
"2026-08-27T17:18:36.511Z",claude-agent,"The verifier this issue added was a file the repository shipped and nothing executed. It was absent from release:check and from every CI step, in thirteen of the fifteen repositories that carry it, so a later edit could have removed --date-from-version from the workflow and both generation and --check would have agreed on a clock-derived date without anything failing. It is now a named script, the last step of release:check, and its own CI step. Reported by CodeRabbit on unbraind/pm-graph#70.\n\nThe verifier itself gained two fixes in the same pass, also from CodeRabbit. Its static section now balances flags per line rather than per file, which closes two hiding places at once: a single line carrying several invocations where only one is flagged, and an unflagged invocation hiding behind a mention of the flag on a line that invokes nothing. Its behavioural section no longer runs the unflagged control under || true, so a control that fails to produce a heading now fails the gate instead of printing a note while the script exits zero. Both were confirmed by executing the old script against the defect and watching it exit zero."
files[4]{path,scope,note}:
.github/workflows/ci.yml,project,runs the changelog-date verifier as its own step
.github/workflows/release.yml,project,every pm-changelog invocation here now derives the no-tag release date from the calendar version
package.json,project,every pm-changelog invocation here now derives the no-tag release date from the calendar version
scripts/verify-release-changelog-date.sh,project,"executable proof for the release workflow invocations, which the package.json changelog check never reaches"
tests[3]:
- command: "npm run changelog:check"
path: package.json
scope: project
note: regenerates the changelog and compares it; without the flag the heading date is stamped from the clock and the comparison fails on any day after generation
- command: bash scripts/verify-release-changelog-date.sh
path: scripts/verify-release-changelog-date.sh
scope: project
note: "exercises the release workflow path that npm run changelog:check does not: asserts every generator invocation in every tracked file carries the flag, and shows the same probe version yielding its own calendar date with the flag and today's date without it"
- command: "npm run verify:release-changelog-date"
Comment thread
unbraind marked this conversation as resolved.
scope: project
timeout_seconds: 180
provenance:
author: claude-agent
created_at: "2026-08-27T17:19:02.988Z"
source_kind: local_mutation
source_ref: fix/stabilise-changelog-date-from-version
body: ""
27 changes: 27 additions & 0 deletions .agents/pm/issues/pm-context-o76d.toon
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
id: pm-context-o76d
title: Rebase the changelog date verifier onto the current release workflow
description: "Rebase PR 76 onto current main while preserving version-derived changelog dates, both release verifiers, and the current package and workflow behavior."
type: Issue
status: closed
priority: 2
tags: []
created_at: "2026-08-30T15:34:39.913Z"
updated_at: "2026-08-30T15:36:12.228Z"
closed_at: "2026-08-30T15:36:12.212Z"
completed_at: "2026-08-30T15:36:12.212Z"
claim_principal: pi-agent
author: pi-agent
comments[1]{created_at,author,text}:
"2026-08-30T15:36:11.581Z",pi-agent,"Rebased onto origin/main. Resolved .gitignore by retaining main current transaction-journal policy; resolved .github/workflows/ci.yml by retaining both release verifiers; resolved package.json by retaining main current version/dependency/release-workflow gates plus the changelog-date verifier; resolved CHANGELOG.md by taking the requested rebase side and regenerating after close. Upgraded pm-changelog to 2026.8.29 and made the executable probe use 2026.1.2-2. npm run verify:release-changelog-date, npm test, and npm run release:check pass with 100% configured coverage. Regression proofs: removing --date-from-version made the verifier fail; installing pm-changelog 2026.8.17 while retaining the suffix probe also made it fail; both restored versions pass."
files[6]{path,scope,note}:
.gitignore,project,Retain current transaction-journal ignore policy
.github/workflows/ci.yml,project,Run both release verifiers
package.json,project,Preserve current dependencies and both release gates
CHANGELOG.md,project,Regenerate after closing the tracking item
scripts/verify-release-changelog-date.ts,project,Substantive verifier
test/verify-release-changelog-date.test.ts,project,Regression coverage
tests[2]{command,scope,provenance{author,created_at,source_kind,source_ref}}:
npm test,project,pi-agent,"2026-08-30T15:34:48.855Z",local_mutation,fix/stabilise-changelog-date-from-version
"npm run release:check",project,pi-agent,"2026-08-30T15:34:48.855Z",local_mutation,fix/stabilise-changelog-date-from-version
close_reason: Rebase conflicts are resolved and both unsuffixed and suffixed changelog date paths pass all gates.
body: ""
Loading