• Status: phase 2 record, written after the plan was published and before any Storybook was built.
  • Method: the published pages were attacked, not reviewed for style. Each auditor had to open the cited source file and confirm the cited line says what the plan claims.
  • Inputs: plan as published (index, 10-topology-options, 20-fleet-evidence, 30-first-delivery, 40-runtime-and-hosting); the same five files frozen as a pre-reflection copy in the run evidence directory.

Audit shape

flowchart LR
  P["Published plan v1: five pages"] --> S["Scope audit: provenance, versions, ranges, deferrals"]
  P --> A["Architecture audit: renderer, refs, CSS, hosting"]
  S --> C["Corrections applied to four pages"]
  A --> C
  C --> V["Plan v2 republished"]
  V --> B["Build phase; acceptance matrix inherited from this audit"]
  • Scope slice: fleet evidence, story provenance, scope table. Verdict: plan needs corrections.
  • Architecture slice: topology options, composition mechanism, CSS regime, runtime and hosting, acceptance criteria. Verdict: plan needs corrections; no topology blocker.
  • Neither auditor could write to the vault; corrections were applied by the run owner from their verbatim replacement wording.

Corrections forced by the audits

  • Adaptation contract was incoherent (priority 1):
    • The bubble markup consumes derived blocks with sanitized html, defined only in the route as Rendered = Message & { blocks: ... }, not in the shared Message type.
    • The plan simultaneously passed only message: Message, promised free-form local editing, and forbade the Markdown pipeline that would refresh those blocks. A frozen block literal cannot re-render edited content.
    • Correction: the adaptation takes an explicit body union of recorded sanitized-fixture blocks or plain text; saving switches to escaped text rendering, which is observable and does not smuggle a converter into the project.
  • Extraction boundary disagreed across pages (priority 1):
    • The topology page cited the complete snippet range as the adaptation source while the evidence and delivery pages cited the body-only range with the footer excluded.
    • Correction: one boundary everywhere, with the full snippet named as context and the excluded footer range named explicitly.
  • Status cues were promised and then excluded (priority 2):
    • The excluded footer carries the edited marker, the nonempty-streaming and interrupted-reply text, and the continued-message timestamp. Only the assistant error class and the empty-streaming indicator stay in the retained body.
    • Correction: the omission is named in the story’s non-claims instead of a blanket cue-preservation promise.
  • Copied helper closure was invisible:
    • The selected snippets depend on route-local helpers for rendering shape, date and size formatting, initials, edit key handling, and an icon snippet.
    • Correction: those helper ranges are attributed separately, or their replacements are labelled as authored inside this project.
  • One citation endpoint was wrong:
    • A demo file was cited one line past its end. Corrected to the real range. No component or behavior claim depended on it.
  • Operational fence contradicted the mandated builder:
    • The plan forbade any change to the Quartz engine tree while mandating the shared build script, which temporarily stages a wiki config and stylesheet into that tree and restores them on exit, under a lock it takes itself.
    • Correction: the fence now forbids direct or persistent engine changes and explicitly permits the script’s locked, restoring staging.
  • Composition costs were described imprecisely:
    • The manager federates local and referenced indexes into one search dataset, and story args have ref-aware routing; globals updates target only the local preview and nonlocal global events are rejected.
    • Correction: native federated search and ref-aware args are stated as given; a shared cross-instance theme toolbar is stated as not given.
  • A theme-token trap was found in the replication recipe:
    • The source declares the Flow connection-line stroke width on the unqualified root and on the light theme, while the dark theme block omits it by inheritance. Relocating only the literal blocks would silently drop it and fall back to the renderer default width.
    • Correction: the contract is now effective token values per theme, with that property required under both native themes.

Claims that survived attack

  • Version integrity: every framework, bundler, styling, and TypeScript version in the fleet matrix resolves to the cited declaration or lock entry, with manifest ranges kept distinct from resolutions.
  • Zero Storybook installations across the inspected trees, and a real Histoire explorer in the Vue project whose story files resolve to real exported components.
  • The chat project genuinely has four route component files and no reusable component library; the three cited snippet ranges are exact.
  • Every enumerated icon name exists in the source icon component, with the unknown-name fallback and default prop values as described.
  • The three selected upstream demos import only their primitive package and an icon package, and each described interactive state exists in the file.
  • The custom-node component’s graph import is type-only; its handle topology per node kind is as described; the renderer’s handle and store context requirements are real, so a genuine graph fixture is required rather than a bare mount.
  • The class collision behind the two-instance decision is real: the ink skin defines its own button utility and the component library defines the same class with different geometry, and both are used by selected stories.
  • Sub-path hosting is supported without invention: the builder defaults to a relative base and the manager emits relative assets, so one server can host the root instance and the referenced instance as a subtree.
  • The chosen version combination is inside the declared peer ranges of the framework package and the Svelte Vite plugin, on the retained runtime.

Risks carried into the build

  • Standalone compilation must be owned here: the framework guard rejects a detected application framework plugin, so the preview configuration is authored in this project rather than inherited from a sibling application.
  • Direct imports must resolve one runtime instance from this project, not silently borrow a sibling’s dependency tree.
  • Demo-local state is not an args API: stale copy feedback or a retained selection must be reset or remounted between reported cases.
  • Portalled overlays leave the story subtree, and one demo uses a fixed element id, so interaction checks must query the owning preview document and count executed cases.
  • Composition navigation caches frames; leaving and returning between instances must be exercised rather than assumed to unmount fixtures.
  • A blanket zero-404 network gate would fail on optional composition probes; the gate must require the real index, preview, and chunk requests instead.

Acceptance inherited from this reflection

  • A manifest of every required story and state with expected versus executed counts; missing, skipped, or zero-assertion cases fail.
  • Component identity and post-interaction state verified inside the active owning preview, including portalled content.
  • Cold load and refresh of both a local and a referenced deep link, direct browsing of the referenced instance, and root search reaching one story of each kind.
  • Effective theme tokens and representative rendered states compared against source, with intentional neutral-base differences disclosed and accidental regressions failing.