Skip to content

docs: correct two header claims the last two merges falsified - #77

Merged
os-sam merged 1 commit into
mainfrom
claude/issue-72-73-false-headers
Sep 7, 2026
Merged

docs: correct two header claims the last two merges falsified#77
os-sam merged 1 commit into
mainfrom
claude/issue-72-73-false-headers

Conversation

@os-sam

@os-sam os-sam commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator

Closes #72
Closes #73

Two living statements in source that are now demonstrably false. Both are the kind that stop the next person from finding a bug, not merely the kind that misinform — which is why they are worth a PR rather than a backlog entry.

Comment-only. No metadata, behaviour or translatable string changes.

#72src/data/shared/build.ts was wrong in a more interesting way than the card says

The header read:

because a seed row does not go through the stamp hooks (skipTriggers), and a seed that leaned on them would break silently the day a hook changed

The card that filed this reported the flag as unfounded — "skipTriggers appears only in that comment" — which is true of this repository but not of the platform. The flag is real, the seed loader does carry it, and it is the reason the sentence is false rather than evidence that it is:

@objectstack/metadata-protocol, src/seed-loader.ts, the SEED_OPTIONS docblock:

skipTriggers suppresses record-change AUTOMATION (autolaunched flow triggers) for seed writes: a package's seed is pre-existing END-STATE reference/sample data, not a stream of user events … Lifecycle HOOKS (derived/default fields, validation) still run.

So the loader documents exactly the distinction this comment collapsed, one sentence later, and the answer is the opposite of what the comment asserted. Every stamp hook in src/hooks/ fires on seeded rows.

That is how #65 happened. An unconditional last_activity_at assignment overwrote the authored value on all 200 applications, and a header stating that hooks cannot reach a seed row is precisely what would have stopped someone from looking there. A false comment that closes off a line of enquiry costs more than one that merely misleads.

The rewrite states what the loader actually does, keeps the real reason the seed denormalises explicitly (it should state the facts it means rather than inherit whatever a hook computes today), and records the neighbouring flag while it is in view: seedReplay skips the object's state_machine entry and transition checks, which is why an ats_offer can be seeded straight into its terminal accepted state — the thing #53 relies on and #64's review verified empirically (818 inserted, errored: 0) without knowing the mechanism.

#73 — F4's header, falsified by #65 four hours later

src/flows/application-stage-notify.flow.ts read:

stamps last_activity_at = now() on every application update, unconditionally (stamp.hook.ts, last line of the handler)

True when written; false since #65. The hook now stamps on any update whose payload names a field of the application.

The paragraph's conclusion is unchanged — a stage change is such a payload, so the value is already correct by the time this record-after-update flow starts, and the flow still deliberately has no second writer. Only the reason moved, and it now points at the rule rather than at a line that no longer exists.

Gates

validate=0   lint=0   typecheck=0
i18n source parity: 512 keys · 512 compared · ✓ every bundle key restates the label its metadata declares

🤖 Generated with Claude Code

https://claude.ai/code/session_01PbJ5Cy9KDAzeQHo8bsMadG


Generated by Claude Code

Both are living statements in source that are now demonstrably false, and
both are the kind that stop the next person from finding a bug rather
than merely misinforming them.

#72 — src/data/shared/build.ts said a seed row "does not go through the
stamp hooks (`skipTriggers`)". The flag it cites is real and the seed
loader does carry it, but the loader's own docblock says what it
suppresses — record-change AUTOMATION, i.e. autolaunched flow triggers —
and then says the opposite of this comment in its next sentence:
"Lifecycle HOOKS (derived/default fields, validation) still run." So
every stamp hook does fire on seeded rows. That is precisely how #65
happened, and a comment asserting hooks cannot reach a seed row is what
would have stopped someone looking. Also records `seedReplay`, which is
why an ats_offer can be seeded straight into its terminal accepted state.

#73 — F4's header said ApplicationStampHook stamps last_activity_at "on
every application update, unconditionally". True until #65; now it stamps
on any update whose payload names a field of the application. The
paragraph's conclusion is unchanged — a stage change is such a payload,
so the flow still needs no second writer — but its reason was wrong.

Comment-only. No metadata, behaviour or translatable string changes;
validate, lint and typecheck all exit 0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PbJ5Cy9KDAzeQHo8bsMadG
@os-sam
os-sam marked this pull request as ready for review September 7, 2026 19:56
@os-sam
os-sam merged commit abf2e36 into main Sep 7, 2026
1 check 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

1 participant