Skip to content

Claudinite growth: dedup local packs against the canon - #86

Merged
missingbulb merged 1 commit into
mainfrom
growth-dedup-k7q2m9
Jul 30, 2026
Merged

Claudinite growth: dedup local packs against the canon#86
missingbulb merged 1 commit into
mainfrom
growth-dedup-k7q2m9

Conversation

@missingbulb

Copy link
Copy Markdown
Owner

Growth-dedup run for #85. The dispatch carried no Context block, so the yardstick was the whole mounted canon (.claudinite/shared/** prose + the check_the_world.mjs --list rule catalog), and the prune surface was both local packs in full: laughcounter and on-device-privacy (README.md, RULES.md, pack.mjs, the three check .mjs, pack.test.mjs).

Two strips. Both are the twins of the two README lines PR #71's dedup run already pruned, left behind in the .mjs module headers that run didn't reach — the same portable rule, restated in the same pack.

1. laughcounter/pack.mjs — the local promotion-ladder clause

Removed: "— anything deterministic enough to check belongs in rules instead, and should move there when it appears". Residue kept: It carries prose only for now.

Covered by canon, chapter and verse:

  • packs/basics/RULES.md:11 — a durable rule lands "routed through the mechanism promotion ladder (platform setting → hook → check → skill → prose)".
  • packs/grow_with_claudinite/tasks/growth-extract/task.md:23 — the local form verbatim: "run the local promotion ladder: a deterministic rule becomes a check in that pack's rules … and only what neither can carry lands as terse prose in the pack's RULES.md."

The canon also owns the doing of it (prose-to-checks-sweep), so nothing depends on the local pack reminding itself. This is the exact sentence #71 pruned from this pack's README.md ("The promotion ladder still applies: anything deterministic enough to decide mechanically becomes a check in pack.mjs's rules…").

2. on-device-privacy/pack.test.mjs — the restated isolation rule

Removed: "because a consumer file outside .claudinite/ may not reference into it (the claudinite-isolation barrier)". Residue kept, in the convention #71 established for this pack's README: They live here rather than in tests/ (`claudinite-isolation`).

Covered by a canon check, which is stronger than prose — rule id claudinite-isolation (blocking): "Outside the wiring files (.claude/, .gitignore, .gitattributes, .github/workflows/, the settings file), nothing may reference .claudinite/ — CLAUDE.md included." The local wording is the general rule in local dress and is in fact looser than the check (it omits the wiring exceptions), so it says nothing the check leaves out. The pointer survives, so the reason the fixtures live in the pack is still one grep away. Same sentence #71 reduced to (claudinite-isolation) in README.md.

Kept, deliberately

  • laughcounter/RULES.md — "don't prune a .gitignore section while its artifacts are still in the worktree". No canon line touches ignore rules or untracked artifacts; the nearest canon items (repo-text-sweeps "deleting a file isn't done until you've grepped for inbound references", git-github-advanced "an automated commit-nag is not authorization to commit drift") make different points. Its tail — read git diff --cached --stat after a bulk git add -A, because a clean git status stops reporting staged additions — is stronger than the canon's "inspect git status / git diff".
  • All of on-device-privacy/RULES.md (metadata-not-audio, one deletable directory, no egress at all, no server/listener, usage strings stay true) and all three checks. The canon corpus and rule catalog carry nothing about audio, microphones, on-device inference, egress, or user-facing privacy disclosures — these assert narrower, stronger things with no canon counterpart.
  • The // Dependency-free by design (a local pack must load without the canon mount) comments in the three check modules. generate-project-instructions/SKILL.md:157 does state the rule, but these are at-site rationale for why the file hand-builds findings instead of importing the engine helper — removing them invites the next reader to "fix" it, and the canon endorses a site-local gotcha comment (extracting-lessons.md).

Verification

  • node --test .claudinite/local/packs/on-device-privacy/pack.test.mjs — 7/7 pass.
  • node .claudinite/shared/engine/checks/check_the_world.mjs — exit 0, no findings.
  • Both edits shrink their file; nothing under .claudinite/shared/** was touched.

Human approval gate — do not auto-merge (this task's outcome ceiling is open-pr). Either strip is cheap to reject independently.

🤖 Generated with Claude Code

https://claude.ai/code/session_0154hfoHbyLcKSqGpo3kKKc6


Generated by Claude Code

Strip two portable rule restatements from the local packs' module headers —
the twins of the two README lines PR #71's dedup run pruned, left behind in
the .mjs files it didn't reach.

- laughcounter/pack.mjs: drop the local promotion-ladder clause ("anything
  deterministic enough to check belongs in `rules` instead, and should move
  there when it appears"). Canon owns it: packs/basics/RULES.md:11 routes a
  rule "through the mechanism promotion ladder (platform setting -> hook ->
  check -> skill -> prose)", and growth-extract/task.md:23 spells the local
  form: "a deterministic rule becomes a check in that pack's `rules` ... and
  only what neither can carry lands as terse prose in the pack's RULES.md".
  Residue kept: this pack carries prose only for now.

- on-device-privacy/pack.test.mjs: drop the restated isolation rule ("because
  a consumer file outside .claudinite/ may not reference into it"), keeping the
  pointer in the pack's own `(claudinite-isolation)` convention. The canon
  check enforces it: rule id `claudinite-isolation` -- "Outside the wiring
  files ..., nothing may reference .claudinite/".

Refs #85
@missingbulb
missingbulb merged commit 763a0a6 into main Jul 30, 2026
@missingbulb
missingbulb deleted the growth-dedup-k7q2m9 branch July 30, 2026 17:38
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