diff --git a/internal/vibe-tests/README.md b/internal/vibe-tests/README.md index c90ceccd3c00a..d9ea60b930788 100644 --- a/internal/vibe-tests/README.md +++ b/internal/vibe-tests/README.md @@ -153,6 +153,8 @@ internal/vibe-tests/ ├── setup-test/ # Setup evaluation over the canonical fixture matrix │ ├── PLAN.md # controls, pilot stages, measures, decision rule │ ├── matrix.json # fixtures × controls × prompts × bundles × reps +│ ├── conditions.json # controls plus the opt-in established-app strategies +│ ├── guidance/ # one document per patch, including both strategies │ ├── run-setup.mjs # sandbox + task + provenance preparation only │ ├── setup-interactions.mjs # marker-driven dialog and nested-overlay opener │ ├── setup-measure.mjs # build + exact style, geometry, and overlay probes diff --git a/internal/vibe-tests/setup-test/PLAN.md b/internal/vibe-tests/setup-test/PLAN.md index 23ad5a7979b1f..d1333728c60a2 100644 --- a/internal/vibe-tests/setup-test/PLAN.md +++ b/internal/vibe-tests/setup-test/PLAN.md @@ -46,35 +46,280 @@ Each task declares stable task-owned `data-vibe-result` markers. They are measur Guidance is committed into the sandbox baseline before execution, so the resulting diff contains only executor work. -## Evaluator correctness +## Established-app strategy pilot -Five faults where the evaluator reported an unchanged host as damaged, or reported unrelated problems with the same word. None of them relaxes what the evaluator considers host damage. +Two further conditions explore strategies for an application that already has an established visual language. They are additive and opt-in: the four controls above, their evidence, and their cell identities are untouched — every pre-existing stage keeps its exact expansion count and its exact cell ids, and a strategy is reachable only from the new stages that name it — and no default, core, or greenfield behavior changes as part of this pilot. Normal greenfield Astryx adoption is exactly what it was. -**1. `hardcoded-important` read prose as code.** The check matched `/!\s*important/i` against every added line of a host source file, so an executor told — correctly, by the guidance itself — not to paper over a containment problem with `!important` failed the run for writing that reasoning down beside the workaround it chose instead. The flag is now found by parsing rather than by matching: stylesheets go through postcss, where `Declaration.important` is the parser's own answer and a comment is a `Comment` node; scripts go through the TypeScript parser, where comments are trivia and only string and template literals are examined; HTML, Vue, and Svelte are split into their `