The graph migration is done in the sense that matters — all 12 surfaces mount GraphComponent unconditionally, no toggle, no fall-back-to-file. But half of them render source that nothing has ever checked.
The split
graphParity.test.ts import.meta.glob("@data/components/app/**/*.json") <- the SEED
GraphComponent.tsx useAppStore((s) => s.components.find(...))?.srcText <- the STORE
Those are the same document only for a record in the reconcile path. For one that is not, the guard verifies a file the app never mounts.
Measured on develop today
| page |
store |
seed |
delta |
builtin |
| consolepage |
18462 |
18462 |
same |
true |
| planningpage |
54336 |
54336 |
same |
true |
| algorithmspage |
8697 |
8697 |
same |
true |
| soundspage |
4384 |
4384 |
same |
true |
| glancepage |
58854 |
58854 |
same |
true |
| projectspage |
30876 |
30876 |
same |
true |
| skillspage |
16806 |
25943 |
−9137 |
(none) |
| mcppage |
14767 |
19431 |
−4664 |
(none) |
| fleetpage |
9186 |
14141 |
−4955 |
(none) |
| automationspage |
8662 |
4071 |
+4591 |
(none) |
| securitypage |
13702 |
12922 |
+780 |
(none) |
| githubpage |
6523 |
6880 |
−357 |
(none) |
The six that match are exactly the six stamped builtin. The six that differ are exactly the six unstamped — and exactly the six #4207 deferred. The drift runs both ways, so this is not simply "the store is stale".
skillspage renders 9137 characters of source no test has compared against anything, and #4179 already suspects that page of holding half its content in each copy.
Why the existing guards cannot see it
Three guards, none of them looking at the thing that renders.
Why this is not just "run #4207's restamp on them"
Stamping a role: page record arms seedAuthoritative (#3723), which forces the seed over the store before any content comparison. On this data that means replacing the rendering skillspage with one a third larger. #4207 deferred them for exactly this reason; the deferral was right and the question it deferred is still open.
What to work out
Related: #4207 (deferred these six), #4216 (made the state visible), #4179 (skillspage specifically), #4235/#4239 (the seed-side guard this complements).
The graph migration is done in the sense that matters — all 12 surfaces mount
GraphComponentunconditionally, no toggle, no fall-back-to-file. But half of them render source that nothing has ever checked.The split
Those are the same document only for a record in the reconcile path. For one that is not, the guard verifies a file the app never mounts.
Measured on
developtodaybuiltintruetruetruetruetruetrueThe six that match are exactly the six stamped
builtin. The six that differ are exactly the six unstamped — and exactly the six #4207 deferred. The drift runs both ways, so this is not simply "the store is stale".skillspagerenders 9137 characters of source no test has compared against anything, and #4179 already suspects that page of holding half its content in each copy.Why the existing guards cannot see it
reconcileSeedwould reconcile store ↔ seed — but its first branch returns early for a record with nobuiltin, which is precisely these six (Store-stamping drift: most page records lack , so reconcileSeed can never retire them and deleted seeds leave permanent orphans #4207/The app renders the STORE copy, every guard checks the SEED — 44 app records have diverged unchecked since before #4107 #4216).Three guards, none of them looking at the thing that renders.
Why this is not just "run #4207's restamp on them"
Stamping a
role: pagerecord armsseedAuthoritative(#3723), which forces the seed over the store before any content comparison. On this data that means replacing the renderingskillspagewith one a third larger. #4207 deferred them for exactly this reason; the deferral was right and the question it deferred is still open.What to work out
skillspage). Needs a diff surface, not a rule.seedAuthoritativeis still the right policy once store↔file is guarded — it exists because a diverged page copy silently shadowed the real page (Migrate Settings page into the base-studio-code components graph (#3604) #3658 → Studio sessions shadow migrated page records with 'self-contained for preview' copies — breaks runtime fidelity #3723), which a store-side guard would now catch directly.Related: #4207 (deferred these six), #4216 (made the state visible), #4179 (
skillspagespecifically), #4235/#4239 (the seed-side guard this complements).