Skip to content

docs(changelog): credit the shipped --link-deps feature to release 2026.7.23 - #12

Merged
unbraind merged 1 commit into
mainfrom
fix/changelog-missing-link-deps-entry
Jul 24, 2026
Merged

unbraind merged 1 commit into
mainfrom
fix/changelog-missing-link-deps-entry

Conversation

@unbraind

@unbraind unbraind commented Jul 24, 2026 •

Copy link
Copy Markdown
Owner

Problem

The published CHANGELOG.md never listed --link-deps — mapping issue-body Blocked by / Depends on / Blocks #N references into pm dependency edges — even though it shipped in npm 2026.7.23. pm-github-wpit was mis-sectioned the same way.

Cause: the last regeneration ran with stale local tags and before pm-github-hdai was closed, so the item was invisible to the generator and the v2026.07.23 boundary did not exist yet.

Both items closed before that tag, so both belong under ## 2026.7.23:

item closed_at vs tag v2026.07.23 (2026-07-23T06:12:30Z)
pm-github-hdai — --link-deps 2026-07-22T23:10:49Z before ✅
pm-github-wpit — merge-reconcile docs 2026-07-22T19:41:58Z before ✅

A user reading the changelog to find out when dependency linking became available currently finds nothing at all.

Change

Regenerated with complete tag history (git fetch --tags --force first):

  • adds the missing ### Added entry for --link-deps under ## 2026.7.23 - 2026-07-23
  • moves pm-github-wpit out of ## Unreleased into the same release
  • new ## Unreleased entry for pm-github-px45, the tracker for this fix

No source changes.

Verification

  • npm run changelog:check → "Changelog is up to date"
  • full test suite → green (0 failures)
  • Not a pm-changelog defect: the local (unreleased) build and the installed published build produce byte-identical output for this repo, which is how the gap was found — a fleet-wide parity audit across all 17 sibling packages.

pm items

item status
pm-github-px45 — CHANGELOG omits the shipped --link-deps feature and mislabels 2026.7.23 work as Unreleased closed

🤖 Generated with Claude Code


Summary by cubic

Fix CHANGELOG.md: credit the shipped --link-deps feature to release 2026.7.23 and move pm-github-wpit into that release. Add an Unreleased entry for pm-github-px45; docs-only.

Written for commit b453416. Summary will update on new commits.

Review in cubic

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @unbraind, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@unbraind

Copy link
Copy Markdown
Owner Author

@greptileai review

/gemini review

@coderabbitai full review

@sourcery-ai review

@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

1 similar comment
@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@coderabbitai

coderabbitai Bot commented Jul 24, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

@unbraind, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 52 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: c23a791e-7470-4fc6-ac0e-59e48f622f9b

📥 Commits

Reviewing files that changed from the base of the PR and between 70269a5 and b453416.

📒 Files selected for processing (3)
  • .agents/pm/history/pm-github-px45.jsonl
  • .agents/pm/issues/pm-github-px45.toon
  • CHANGELOG.md
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/changelog-missing-link-deps-entry

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai

coderabbitai Bot commented Jul 24, 2026 •

Copy link
Copy Markdown

@unbraind I’ll perform a full review of #12, including the regenerated changelog changes.

✅ Action performed

Full review finished.


Your included review limit is currently reached under our Fair Usage Limits Policy. This review may still proceed through usage-based billing if eligible. Your next included review will be available in 58 minutes.

@unbraind

Copy link
Copy Markdown
Owner Author

Bot-feedback triage — round 1

@sourcery-ai — review blocked by the weekly 500,000 diff-character rate limit, not by a finding; downvoted the limit notice as non-actionable. This PR is a two-file docs/tracker change, so it consumed budget without producing signal — if the org config can deprioritize CHANGELOG.md-only PRs, the weekly budget would go further on real code review.

@gemini-code-assist — sunset notice ×2, no review performed; both downvoted as non-actionable.

@coderabbitai — upvoted the walkthrough and the trigger receipt. Extra context for reviewing this repo:

  • CHANGELOG.md here is generated by pm-changelog from the pm tracker in .agents/pm/, never hand-written. A changelog diff that cannot be reproduced by npm run changelog:full is a real finding.
  • The substantive point of this PR is that a shipped feature was missing entirely from the published changelog: --link-deps went out in npm 2026.7.23, but the item (pm-github-hdai) was closed after the last regeneration, so no entry was ever emitted. A user searching the changelog for when dependency linking became available currently finds nothing.
  • Both re-sectioned items closed before the v2026.07.23 tag committer date (2026-07-22T23:10:49Z and 2026-07-22T19:41:58Z vs 2026-07-23T06:12:30Z), which is why ## 2026.7.23 is the correct heading rather than ## Unreleased.
  • Root cause was stale local tags at regeneration time. Worth flagging on any future changelog-regenerating PR in this repo that does not git fetch --tags --force first.

Separately, and not part of this PR: real-data testing during this session found two genuine defects in this package's import path, both now being tracked and fixed in follow-up PRs — (1) readPmItems() calls spawnSync without maxBuffer, so on any tracker whose full JSON dump exceeds Node's 1 MiB default the import dies with a bare pm list-all failed and no diagnosis (reproduced against a real 443-item workspace: status: null, error.code: ENOBUFS, empty stderr); (2) the non-atomic --dry-run branch counts every issue as an import and never consults the already-computed match, so it previews "Would import 29, skip 0" where a real run would perform updates — while --atomic --dry-run reports imports/updates/skips correctly. Flagging here so the two paths' asymmetry is on record.

@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown

Your plan includes PR reviews subject to rate limits. More reviews will be available in 55 minutes.

…26.7.23

The published CHANGELOG.md never listed `--link-deps` (issue-body Blocked-by /
Depends-on / Blocks references mapped into pm dependency edges), even though it
shipped in npm 2026.7.23: the last regeneration ran with stale local tags and
before pm-github-hdai was closed. pm-github-wpit was mis-sectioned the same way.

Both items closed before the v2026.07.23 tag boundary (hdai 2026-07-22T23:10:49Z,
wpit 2026-07-22T19:41:58Z vs the tag's 2026-07-23T06:12:30Z committer date), so
both belong under `## 2026.7.23`. Regenerated with complete tag history
(`git fetch --tags --force` first).

Not a pm-changelog defect: verified the local build and the installed published
build produce byte-identical output for this repo.

changelog:check green, full test suite green.

Item: pm-github-px45 (closed)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@unbraind
unbraind force-pushed the fix/changelog-missing-link-deps-entry branch from 55ae9ab to b453416 Compare July 24, 2026 20:03
@unbraind

Copy link
Copy Markdown
Owner Author

Force-pushed: rebased onto origin/main. My local clone was one commit behind — the daily release job had pushed a Release v2026.07.23 commit (package.json version bump) that my branch was missing, so --release-version-from-package resolved a stale version and CI's changelog:check failed on the merge commit even though it passed locally. Rebased and regenerated; changelog:check and the full test suite are green on the new head.

@greptileai review

/gemini review

@coderabbitai full review

@sourcery-ai review

@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@coderabbitai

coderabbitai Bot commented Jul 24, 2026 •

Copy link
Copy Markdown

@unbraind Thanks for the updated context. I’ll re-review #12 from the rebased head, with particular attention to whether the regenerated changelog is reproducible against the release-version state now present in origin/main.


✏️ Learnings added
Learnt from: unbraind
URL: https://github.com/unbraind/pm-github/pull/12

Timestamp: 2026-07-24T20:04:06.756Z
Learning: In the pm-github repository, changelog regeneration depends on the package version when using --release-version-from-package. Before regenerating after a release, rebase onto origin/main so the daily release job’s package.json version bump is present; otherwise npm run changelog:check can pass locally but fail on the merge commit.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

✅ Action performed

Full review finished.


Your included review limit is currently reached under our Fair Usage Limits Policy. This review may still proceed through usage-based billing if eligible. Your next included review will be available in 52 minutes.

@unbraind
unbraind merged commit ca23a7d into main Jul 24, 2026
5 checks passed
@unbraind
unbraind deleted the fix/changelog-missing-link-deps-entry branch July 24, 2026 20:26
unbraind added a commit that referenced this pull request Jul 24, 2026
CHANGELOG.md is generated, so the rebase conflict against the merged
changelog-hygiene PR is resolved by regeneration rather than by hand-picking
hunks.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
unbraind added a commit that referenced this pull request Jul 24, 2026
…in non-atomic --dry-run (#13)

* fix(import): raise the pm read buffer past 1 MiB and make --dry-run preview updates

Two defects found by running the importer against a real 443-item workspace
rather than fixtures. Both make the integration fail or mislead exactly when a
tracker is mature enough to matter.

1. `readPmItems()` spawned `pm list-all --full --include-body` without a
   `maxBuffer`, so Node's 1 MiB default applied. That workspace's dump is
   1,052,859 bytes — 4 KiB over the cap — so the child was killed with
   `status: null`, `error.code: ENOBUFS` and EMPTY stderr, and the code reported
   a bare `pm list-all failed` with nothing to diagnose. Every import, atomic
   plan and sync against such a workspace was dead with no actionable message.

   Now capped at 64 MiB (matching pm-changelog / pm-context / pm-brief, which
   already learned this), applied to `readPmItems()`, the central `pmRun()`
   spawner and the `afterCommand` hook's `pm show`. A buffer overrun is now
   named explicitly — the message says the output exceeded the read buffer and
   suggests narrowing the import (`--labels`, `--since`) — instead of being
   reported as an unexplained failure.

2. The non-atomic `--dry-run` path deliberately skipped building the provenance
   index (`shouldMatchExisting = !dryRun || atomic`), so every issue was
   previewed as a create: "Would import 29, skip 0" where the real run performs
   updates for already-linked issues. A preview that overstates creates reads as
   "this will duplicate my whole tracker" — the single thing `--dry-run` exists
   to rule out. `--atomic --dry-run` reported the split correctly, so the two
   paths disagreed about the same plan.

   The index is now built for dry runs too, and the non-atomic preview labels
   each issue `import`/`update` and reports "Would import X, update Y, skip Z",
   returning `wouldUpdate` alongside `wouldImport`/`wouldSkip` like the atomic
   path. Note this also means dry runs now read the tracker — which is why (1)
   had to be fixed in the same change, or previews would newly hit ENOBUFS.

Verified against the same real workspace: non-atomic reports
"Would import 24, update 5, skip 0"; `--atomic --dry-run`, which previously died
with ENOBUFS, now completes and agrees exactly (24/5/0). 168/168 tests pass,
including two new tests covering the preview split and the two paths' agreement.

Items: pm-github-<pending> (see PR)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* track(tn92): file and close the import maxBuffer + dry-run preview defects

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix: make the read-buffer cap overridable and stop silent read failures

Greptile review findings, all confirmed:

- **P2 — the ENOBUFS diagnostic prescribed an impossible remedy.** It told the
  reader to raise the cap, but the cap was a module-private compile-time
  constant with no override, so a published-package consumer could only follow
  that advice by patching and rebuilding. The cap now reads an env var
  (`PM_JSON_MAX_BUFFER` / `PM_LIST_MAX_BUFFER`, in bytes), falling back to the
  default on any invalid or non-positive value so the guard cannot be silently
  disabled.
- **P2 (pm-starter) — inserting the constant between the existing JSDoc and
  `readPmItems` orphaned the doc comment**, dropping the "never throws / safe
  read pattern" contract from the consumer-facing `dist/index.d.ts`. Verified in
  the generated output, then moved the block above the JSDoc; the contract is
  back in `dist/index.d.ts`.
- **P1 (starters) — a genuine nonzero `pm` exit was still silent.** Only the
  `result.error` branch was hardened, so an unreadable or invalid workspace still
  returned an empty result with stderr discarded — leaving exactly the failure
  mode this change set out to remove: silence that looks like "no items" /
  "no matches". Both never-throw paths now log the exit code and stderr while
  keeping their empty-result contract.

Typecheck and full test suite green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix: resolve the read-buffer cap per call and cover the overrun contract

Follow-up to the Greptile round-2 findings.

- The cap was resolved once at module load, so the `PM_JSON_MAX_BUFFER` override
  only applied if the env var was set before the module was imported — an
  import-order dependency that also made the branch untestable. Now resolved per
  call (one integer parse against a process spawn: free), and the ENOBUFS message
  reports the limit actually in effect rather than a constant's name.
- Added coverage for the failure contract in the starter packages: a real pm
  workspace read with the cap forced to 64 bytes must return the documented empty
  result AND report the overrun on stderr. Without a test, "a read failure must
  not look like an empty workspace" was an assertion in a commit message rather
  than something the suite enforces.

Typecheck and the full test suite green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix: reject malformed read-buffer overrides instead of trusting a numeric prefix

Greptile P1: `Number.parseInt("64MiB", 10)` returns 64, so that value silently
imposed a **64-BYTE** cap — breaking every ordinary read while appearing to honor
the documented invalid-value fallback. The plausible-looking typo was the worst
case: it turned a safety guard into a guaranteed failure.

Switched to `Number()`, which rejects the whole string, plus
`Number.isSafeInteger(raw) && raw > 0`. Covered in the starter suite across
"64MiB", "64 MB", "abc", "-1", "0", "6.5" and "", each of which must fall back to
the default, while a valid explicit value is still honored.

Also narrowed the starters' overrun message: those reads are always the full
workspace, so "narrow the operation" was a dead instruction — the message now
names only the lever the reader has.

Typecheck and full test suites green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* docs(changelog): regenerate after rebasing onto the merged #12

CHANGELOG.md is generated, so the rebase conflict against the merged
changelog-hygiene PR is resolved by regeneration rather than by hand-picking
hunks.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: SteveBot <1153461+unbraind@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant