Repository navigation
Derive the changelog's no-tag release date from the version instead of the clock #70
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
16 commits
Select commit
Hold shift + click to select a range
9337693
fix(changelog): derive the no-tag release date from the version, not …
unbraind 6348f66
test(changelog): prove the release-workflow path, which changelog:che…
unbraind ebdfcd6
test(changelog): prove the release-workflow path, which changelog:che…
unbraind c133cf1
fix(ci): check each generator invocation on its own, and fail when th…
unbraind 07c0f0f
chore(pm): drop a comment that a retried add had duplicated
unbraind dfeccd6
chore(git): ignore SDK workspace-transaction journals
unbraind 8b26a0a
ci: run the changelog-date verifier instead of only shipping it
unbraind 4ad4e9c
docs(pm): record the gate wiring and the review findings applied to t…
unbraind 0718e35
fix(ci): find the release-time generator invocations the shell verifi…
unbraind 2ddd311
test: execute the verifier's rules against fixtures, and close three …
unbraind 1ee663a
fix(ci): stop three guards failing open, and stop one gate measuring …
unbraind d86ef02
test: follow the verifier's own contract change, and drop a duplicate…
unbraind fa11fd0
fix: close a continuation bypass, stop a comment satisfying a flag check
unbraind dd0d006
fix: split on unspaced shell separators, and stop two guards at the r…
unbraind 77db09d
fix(changelog): cover suffixed CalVer releases
unbraind 6b0ed0f
fix(changelog): preserve single-quoted backslashes
unbraind File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| {"ts":"2026-08-29T04:58:36.090Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"3b80ec0e6cc69afd5cadb09e","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-graph-gjpd"},{"op":"add","path":"/metadata/title","value":"Unblock PR 70 suffixed CalVer changelog gate"},{"op":"add","path":"/metadata/description","value":"Rebase PR 70 after PR 79, adopt the published suffix-safe pm-changelog release, and execute a same-day suffixed-version regression."},{"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-29T04:58:36.090Z"},{"op":"add","path":"/metadata/updated_at","value":"2026-08-29T04:58:36.090Z"},{"op":"add","path":"/metadata/author","value":"pi-agent"}],"before_hash":"3cc22dff72be7b14824654a7a64ea62b04799939b2fee54c1b5f52ca60bf6df0","after_hash":"9726954f68f1b235f9e4b962d9fe21c3b3424525a1458cde41e84e00d410c5b4","item_hash_version":2,"message":""} | ||
| {"ts":"2026-08-29T04:58:36.574Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"3b80ec0e6cc69afd5cadb09e","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-29T04:58:36.574Z"},{"op":"add","path":"/metadata/assignee","value":"pi-agent"},{"op":"add","path":"/metadata/claim_principal","value":"pi-agent"}],"before_hash":"9726954f68f1b235f9e4b962d9fe21c3b3424525a1458cde41e84e00d410c5b4","after_hash":"dcd9a4b38b34d247753444d159b4f69f47454573cd0d69f3d8d1d92eb14bfdb1","item_hash_version":2} | ||
| {"ts":"2026-08-29T04:58:37.062Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"3b80ec0e6cc69afd5cadb09e","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-29T04:58:37.062Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"}],"before_hash":"dcd9a4b38b34d247753444d159b4f69f47454573cd0d69f3d8d1d92eb14bfdb1","after_hash":"eec28beaf45a6f874220bb9ac6a2d483f05c6bdd5b61b0343572a1f2207d7dbd","item_hash_version":2} | ||
| {"ts":"2026-08-29T04:58:37.797Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"3b80ec0e6cc69afd5cadb09e","agent_provenance":{"model":{"value":"gpt-5.6-sol","source":"environment"},"effort":null,"role":null,"topic":null},"op":"files_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-08-29T04:58:37.797Z"},{"op":"add","path":"/metadata/files","value":[{"path":"package-lock.json","scope":"project"},{"path":"package.json","scope":"project"},{"path":"scripts/verify-release-changelog-date.ts","scope":"project"},{"path":"test/verify-release-changelog-date.test.ts","scope":"project"}]}],"before_hash":"eec28beaf45a6f874220bb9ac6a2d483f05c6bdd5b61b0343572a1f2207d7dbd","after_hash":"5da91d771e93ba2d02b1692d8028cc2ba7264da5d041569b5076237e8f6c957a","item_hash_version":2} | ||
| {"ts":"2026-08-29T04:58:38.384Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"3b80ec0e6cc69afd5cadb09e","agent_provenance":{"model":{"value":"gpt-5.6-sol","source":"environment"},"effort":null,"role":null,"topic":null},"op":"comment_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-08-29T04:58:38.384Z"},{"op":"add","path":"/metadata/comments","value":[{"created_at":"2026-08-29T04:58:38.384Z","author":"pi-agent","text":"Updated pm-changelog from 2026.8.17 to published 2026.8.22 and changed the behavioural gate to probe 2026.1.2-1, preserving the suffix while expecting date 2026-01-02."}]}],"before_hash":"5da91d771e93ba2d02b1692d8028cc2ba7264da5d041569b5076237e8f6c957a","after_hash":"0303b972bbcf421e10c9c16842dc044cc4153e205f32f822e507bb5c5e76e5d0","item_hash_version":2} | ||
| {"ts":"2026-08-29T04:58:39.086Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"3b80ec0e6cc69afd5cadb09e","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-29T04:58:39.086Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-08-29T04:58:39.070Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-08-29T04:58:39.070Z"},{"op":"add","path":"/metadata/close_reason","value":"Suffixed CalVer release path now executable and covered"}],"before_hash":"0303b972bbcf421e10c9c16842dc044cc4153e205f32f822e507bb5c5e76e5d0","after_hash":"8e522465a1ff24de60806c6d587fc87febff4be1f35181d4bb9bd412c0dd8926","item_hash_version":2} | ||
| {"ts":"2026-08-29T04:58:39.701Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"3b80ec0e6cc69afd5cadb09e","agent_provenance":{"model":{"value":"gpt-5.6-sol","source":"environment"},"effort":null,"role":{"value":"implementer","source":"argv"},"topic":null},"op":"release","patch":[{"op":"remove","path":"/metadata/claim_principal"},{"op":"replace","path":"/metadata/updated_at","value":"2026-08-29T04:58:39.701Z"}],"before_hash":"8e522465a1ff24de60806c6d587fc87febff4be1f35181d4bb9bd412c0dd8926","after_hash":"54604f9217fef400e847b350cbaa89377110ca4c0d848e75b685eb76222e7225","item_hash_version":2} | ||
| {"ts":"2026-08-29T05:19:01.093Z","author":"pi-agent","author_source":"asserted","agent_harness":"pi","agent_model":"gpt-5.6-sol","agent_model_source":"environment","agent_instance":"3b80ec0e6cc69afd5cadb09e","agent_provenance":{"model":{"value":"gpt-5.6-sol","source":"environment"},"effort":null,"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/1","value":{"created_at":"2026-08-29T05:19:01.093Z","author":"pi-agent","text":"Follow-up CodeRabbit round: stripComment now treats backslashes as escapes only outside single quotes; added a regression where a literal trailing backslash precedes the closing quote and a commented date flag."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-08-29T05:19:01.093Z"}],"before_hash":"54604f9217fef400e847b350cbaa89377110ca4c0d848e75b685eb76222e7225","after_hash":"7b1ff2e700c1866caa750e5ccaa07668a67343ecb44179684632ee0e019732c6","item_hash_version":2} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| id: pm-graph-4glq | ||
| 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 4 flagged 4; .github/workflows/release.yml sites 1 flagged 1;" | ||
| type: Issue | ||
| status: open | ||
| priority: 1 | ||
| tags[3]: changelog,gates,release | ||
| created_at: "2026-08-24T09:40:05.637Z" | ||
| updated_at: "2026-08-27T17:18:40.005Z" | ||
| author: "harness:claude-code" | ||
| comments[2]{created_at,author,text}: | ||
| "2026-08-24T10:03:39.234Z","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:39.579Z",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[2]{command,path,scope,note}: | ||
| "npm run changelog:check",package.json,project,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 | ||
| bash scripts/verify-release-changelog-date.sh,scripts/verify-release-changelog-date.sh,project,"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" | ||
| body: "" | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| id: pm-graph-gjpd | ||
| title: Unblock PR 70 suffixed CalVer changelog gate | ||
| description: "Rebase PR 70 after PR 79, adopt the published suffix-safe pm-changelog release, and execute a same-day suffixed-version regression." | ||
| type: Issue | ||
| status: closed | ||
| priority: 2 | ||
| tags: [] | ||
| created_at: "2026-08-29T04:58:36.090Z" | ||
| updated_at: "2026-08-29T05:19:01.093Z" | ||
| closed_at: "2026-08-29T04:58:39.070Z" | ||
| completed_at: "2026-08-29T04:58:39.070Z" | ||
| author: pi-agent | ||
| comments[2]{created_at,author,text}: | ||
| "2026-08-29T04:58:38.384Z",pi-agent,"Updated pm-changelog from 2026.8.17 to published 2026.8.22 and changed the behavioural gate to probe 2026.1.2-1, preserving the suffix while expecting date 2026-01-02." | ||
| "2026-08-29T05:19:01.093Z",pi-agent,"Follow-up CodeRabbit round: stripComment now treats backslashes as escapes only outside single quotes; added a regression where a literal trailing backslash precedes the closing quote and a commented date flag." | ||
| files[4]{path,scope}: | ||
| package-lock.json,project | ||
| package.json,project | ||
| scripts/verify-release-changelog-date.ts,project | ||
| test/verify-release-changelog-date.test.ts,project | ||
| close_reason: Suffixed CalVer release path now executable and covered | ||
| body: "" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.