Repository navigation
fix(vibe): Judge Storybook stories by the lifecycle scheme of the session's base - #301
Merged
Merged
Conversation
…sion's base symphony-alpha #8867 (ISS-12610) made the plain roots current and moved the old ones to <Level> v1.0 with a deprecated tag. The handoff inventory read every plain-root story as frozen v1.0, so a synced session was blocked. - Read the scheme from the base's story-group-order.ts: the lifecycle scheme takes its frozen tag and v1.0 root suffix from StorybookLifecycle and storybookBaselineVersion; an older base keeps the v1.0/v2.0 rules. - Keep the freeze, the compile-only repair, the retitle check against the synced base and the Start Here exemption on both schemes. - Translate the placement rules in guardrails, the decomposer, the writer, the reviewer, design pass, handoff and README.
Changelog entry for the Storybook lifecycle scheme fix, and the base-scheme contract test reads agent text through flat() after the shared helpers from #299 started returning raw text.
…fecycle # Conflicts: # CHANGELOG.md # plugins/vibe/evals/codex/README.md # plugins/vibe/evals/codex/test_run.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose
symphony-alpha #8867 (ISS-12610, Storybook 3.0.0) replaced the v1.0/v2.0 Storybook scheme with lifecycle tags: the
<Level> v2.0roots became the plain roots, the old plain roots became<Level> v1.0, and every story file now carries one ofstable,preview,experimentalordeprecated. The handoff inventory still read every plain-root title as frozen v1.0. Thegrouped-list-sectionssession synced main, moved its own new entries toComposites/...withstable, and handoff blocked them as frozen stories. On a post-#8867 base, 1.0.49 also left an edit of aSurfaces v1.0/file unclassified.What changed
skills/handoff/scripts/storybook-taxonomy.mjsworks out the scheme from the session base's ownapps/storybook/story-group-order.ts. If that file exportsStorybookLifecycle, the base uses the lifecycle scheme: the frozen tag is theDeprecatedvalue, and a frozen root is any title root ending in${storybookBaselineVersion}. That is the same test symphony-alpha'svalidate:catalogapplies, so the next rename there carries over without a plugin change. A base without the export uses the version scheme, whose patterns stay hardcoded because that scheme is closed history. If the export can't be read, a session that changed a story file is blocked (storybookSchemeRecognized: false); the inventory does not guess. The story meta parsers moved into this module.handoff-inventory.mjsreportsstorybookSchemeand judgesv1StoriesandcompileOnlyV1Repairsby that scheme. The freeze, the compile-only repair (same meta title, tags and exports as the base), the retitle check against the main the session last synced, and the Start Here exemption are unchanged on both schemes. The output keys are unchanged too.guardrails.md("Storybook taxonomy" and Missing primitives step 3), the Storybook decomposer, the change and primitive workers, guardrails reviewer check 10,design-pass.md, handoff section 4 and the README. New work goes in the plain current roots with one lifecycle tag:stablefor shipped work,previewunder Labs,experimentalfor design-only or not-in-the-app work. New states of a deprecated component go in a new entry in the current root, with a permanent name and no version number. An existing non-deprecated file keeps its title and tag. A session on a pre-#8867 base follows that base'sv2.0rules until it syncs.storybook(the Codex runner picks them up automatically).Commands run
handoff-inventory-storybook-scheme.test.mjshas 5 cases, and 4 of them fail against the 1.0.47 inventory (unchanged through 1.0.49). The 1.0.47 failing shape: a post-#8867 base with edits toComposites/Artifacts/Grid GroupsandPrimitives/Actions/Button, both taggedstable, givesv1Storiesboth with reasonfrozenandstoriesInV2Taxonomy: false. The sync case uses a base with the version scheme, has the session add a story to av2.0file and a newv2.0entry, then lands a #8867-shaped main commit and merges it. After that it asserts no retitles and no frozen files, that the own entry can move to the plain root, and that an edit of the now-deprecated file is still frozen.Real repo check, in a scratch branch of symphony-alpha at
afc38408c3, later deleted. After merging main into the stranded branch commitcdce00a741and moving its three new entries to plain roots withstable, 1.0.47 blocks all three with reasontitle. This branch passes them and lists theSurfaces v1.0/Documents/Listingedit undercompileOnlyV1Repairs.Evals, one run each. Claude (
claude plugin eval, Opus): 2 of 2 here; on 1.0.48 it failed the deprecated-component case (score 0.2) and passed the sync case. Codex (evals/codex/run.py): 2 of 2 here and 0 of 2 on 1.0.48. On 1.0.48 Codex answeredComposites v2.0/...withv2.0for the first case and ashippedtag for the second.