Skip to content

fix(update): keep re-checking a KEPT (frozen) capability on every run (PHARN-13) - #207

Merged
PrzemekGalarowicz merged 1 commit into
mainfrom
claude/bold-archimedes-5czyyn
Sep 24, 2026
Merged

PrzemekGalarowicz merged 1 commit into
mainfrom
claude/bold-archimedes-5czyyn

Conversation

@PrzemekGalarowicz

Copy link
Copy Markdown
Contributor

Problem

When update kept an unparseable ("frozen") capability, it still bumped skillsVersion. The next run at the same version then hit "Already up to date" without fetching, which broke the docs' promise in docs/commands/update.md:

  • the KEPT report did not repeat;
  • the capability's files stayed stale, even after upgrading pharn.

Fix

  • New optional frozenCapabilities field in the config (existing configs still load). It holds the sorted role:name of each installed capability that update kept unparsed, and is left out when there are none.
  • While that field is non-empty, update skips the same-version early return, so every run fetches and re-checks.
  • On load, a malformed value is dropped whole, so update returns early as before.
  • The version bump is unchanged, so add stays unblocked.

Tests

11 new tests fail on the old code and pass now:

  • 8 ingest cases that drop a malformed value;
  • only KEPT capabilities are written;
  • the second run fetches again and re-reports KEPT;
  • once the capability parses, its files are refreshed and the field is cleared.

One more test checks that the early return still fires when no capability is frozen. The pipeline artifacts are in .dev/features/frozen-capability-recheck/.

Local gates, run as a non-root user on node 22: all green. 1384/1384 tests pass and statement coverage is 97.18%.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TvcuVhk8hTeDskp5pAJhnc


Generated by Claude Code

… (PHARN-13)

After an update kept an unparseable capability and bumped skillsVersion, the
next run at the same version returned "Already up to date" before fetching, so
the KEPT report never repeated and the capability's bytes stayed stale even
after a pharn upgrade that could parse it.

`update` now records the KEPT `role:name` keys in an additive
`frozenCapabilities` config field (sorted, omitted when empty) and skips the
same-version early return while it is non-empty. Ingest drops a malformed
value whole, which restores the previous behavior.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TvcuVhk8hTeDskp5pAJhnc
@coderabbitai

coderabbitai Bot commented Sep 24, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 59385b74-4619-4704-be9d-5bc334610930


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.

@PrzemekGalarowicz
PrzemekGalarowicz merged commit aec6d3e into main Sep 24, 2026
14 checks passed
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.

2 participants