Skip to content

Claudinite growth: extract lessons - #123

Merged
missingbulb merged 1 commit into
mainfrom
growth-extract-20260802
Aug 7, 2026
Merged

Claudinite growth: extract lessons#123
missingbulb merged 1 commit into
mainfrom
growth-extract-20260802

Conversation

@missingbulb

Copy link
Copy Markdown
Owner

Refs #113.

Three lessons from the window (commits 9130883…03b9bd0; PRs #108, #101, #100, #99, #84, #87, #78, #69, #77, #75, #73, #59, #55, #56, #34, #32; issues #23, #25), all into .claudinite/local/packs/laughcounter/ as prose. Nothing under .claudinite/shared/ was touched.

1 — Ship a version the running app can state, and bump it per distinguishable build (#74/#75). Diagnosing the installTap crash (#61) stalled on "which binary is installed?" and was answered by grepping a crash report's symbol names. The menu said only "LaughCounter", and several genuinely different builds all reported 0.2.1 — the release workflow keys its Release on v<version> from Info.plist, so a merge that leaves CFBundleShortVersionString alone refreshes the same Release and the DMG behind latest/download changes identity without changing its name. Render version and build from Bundle.main, never a source constant that could disagree with the DMG it shipped in.

2 — A scheduled job that skips its work still exits 0 (#56). The scheduler ran green every night while silently skipping baselining, logging "no vendored mount (no stamp)" about a repo whose config carried one, because the vendored loadConfig dropped the claudinite key it had just validated. A job whose success and whose no-op look identical from outside is telling you nothing — read the skip line. And a bug inside the mechanism that updates itself makes the ordinary route unreachable, so it has to be pushed in out of band.

3 — Delete the flagged coupling before reaching for an accept (#34). claudinite-isolation fired on CLAUDE.md's vendored-mount path, which carried nothing a reader could act on; rewording kept both facts and lost only the coupling. An accept is for a crossing that must exist.

Deduped out. The whole mac window (#59, #73, #77, #78, #87, #100, #101, #108) is already carried in full by dev/procedures/mac-audio-lifecycle.md; #55, #69, #84 and #99 by this pack's existing prose and the on-device-privacy checks; #32's "prove the check is live" by the canon's see-it-fail discipline. #23/#25 yielded no repo-level lesson. The conversation-logs 2026-08-01 logs are the #108 session (covered above) plus unattended task runs — no new friction lesson. No retention_days configured, so no prune was done and no log was deleted.

Promotion ladder. None of the three is deterministically checkable (a version constant has no reliable static shape; the other two are judgments about a log line and about what text a reader can act on), so all three land as prose rather than as a check that couldn't ship confident.

Verification. check_the_world.mjs exits 0 (it caught the 20-word ruleRoutingGuidance.belongs cap on the way, which was fixed); node --test .claudinite/local/packs/on-device-privacy/pack.test.mjs passes 14/14. The repo has no Python suite any more.

🤖 Generated with Claude Code

https://claude.ai/code/session_01G52dxZvLCxyZJJnvLrYcQs


Generated by Claude Code

Three lessons from the 2026-07-26..08-02 window, into the laughcounter local
pack as prose.

#74/#75: diagnosing the installTap crash stalled on "which binary is
installed?" — the menu said only "LaughCounter", and several distinct builds
all reported 0.2.1, because the release workflow keys its Release on
v<version> from Info.plist, so a merge that leaves CFBundleShortVersionString
alone refreshes the same Release behind the latest/download link. Durable
part: show version and build from Bundle.main (not a source constant that
could disagree with the DMG), and bump per distinguishable build.

#56: the scheduler ran green nightly while silently skipping baselining ("no
vendored mount (no stamp)") because the vendored loadConfig dropped the
`claudinite` key it had just validated. Durable part: a job whose success and
whose no-op look identical from outside is telling you nothing — read the skip
line; and a bug inside the mechanism that updates itself has to be fixed out
of band.

#34: claudinite-isolation fired on CLAUDE.md's mount path, which carried
nothing a reader could act on. Durable part: before adding an `accept`, delete
the flagged text and see whether anything actionable went with it — an accept
is for a crossing that must exist.

Nothing new from the mac window (#59, #73, #77, #78, #87, #100, #101, #108):
dev/procedures/mac-audio-lifecycle.md already records the engine-per-start
rule, the inputFormat-vs-outputFormat trap, the aggregate churn, the
three-state health reporting, the witnessed-arrival settle rule and the
observation-gap rule in full. #55, #69, #84 and #99 are already carried by
this pack's existing prose and the on-device-privacy checks. #32's
"prove the check is live" is the see-it-fail discipline the canon owns.
Conversation-logs half: the 2026-08-01 logs are the #108 session (fully
covered above) and unattended task runs; no new friction lesson. No
retention_days configured, so no prune.

Refs #113.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G52dxZvLCxyZJJnvLrYcQs
@missingbulb
missingbulb merged commit bf20ec0 into main Aug 7, 2026
@missingbulb
missingbulb deleted the growth-extract-20260802 branch August 7, 2026 09:48
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