From 1ee3f9ccc13d0b9742947eee3bd88bdd4afa95b0 Mon Sep 17 00:00:00 2001 From: Raghu Betina Date: Fri, 31 Jul 2026 15:48:34 -0500 Subject: [PATCH] Record bounded web and iPhone evidence The 2026-08 path now has durable controlled-smoke and one-off field evidence. Replace the stale pre-journey wording so installed agents retain the exact local boundary without treating it as release, representative-user, or production proof. --- README.md | 54 +++---- skills/create-full-stack-app/SKILL.md | 31 ++-- .../references/foundation-plan-019.md | 36 +++-- test/repository.test.mjs | 135 ++++++++++-------- 4 files changed, 142 insertions(+), 114 deletions(-) diff --git a/README.md b/README.md index 6d3b3eb..6a94347 100644 --- a/README.md +++ b/README.md @@ -2,23 +2,26 @@ Portable Agent Skills for working with [First Draft](https://github.com/firstdraft/firstdraft). -This repository is experimental. The prior `rails-sketch/2026-07` journey is the only complete local evidence. +This repository is experimental. The current `rails-sketch/2026-08` path has bounded local execution evidence. First Draft's committed -[controlled CLI smoke](https://github.com/firstdraft/firstdraft/blob/9e296062bf543e89387e2f1044dd29eb52123c9c/script/compilation_http_cli_smoke) -reproducibly exercises an installed CLI, loopback Rails, and real Solid Queue through 151-file application -materialization. Separately, a one-off observation on 2026-07-30 used a fresh Codex invocation of this -Skill at -[`e24b438`](https://github.com/firstdraft/skills/commit/e24b438918f406e8638e79598b6d83605bd4c15a), -server baseline -[`9e29606`](https://github.com/firstdraft/firstdraft/commit/9e296062bf543e89387e2f1044dd29eb52123c9c), -and CLI baseline -[`36f1292`](https://github.com/firstdraft/cli/commit/36f12921c0f6641f073820734234c11e47fdb834) -to go from a prose request through valid analysis and Movie application materialization. That observation is narrow -development evidence, not a reproducible agent eval, release, authentication, representative-user, deployment, or -production evidence. - -The successor `rails-sketch/2026-08` authoring, schema, eval, and contract fixtures are prepared for a bounded web -and iPhone journey, but they have not completed it and are not execution evidence. The exact landed CLI revision is +[controlled CLI smoke](https://github.com/firstdraft/firstdraft/blob/5847a349599f3cc28e1e0a1a8d8bace6742be7c3/script/compilation_http_cli_smoke) +reproducibly drives an installed CLI through loopback Rails and real Solid Queue to valid analysis, one Compilation, +artifact verification, and 194-file two-Entity materialization. It checks matching authored order in the emitted web +and iPhone navigation declarations without executing the generated application. + +Separately, a dated 2026-07-31 +[field report](https://github.com/firstdraft/firstdraft/blob/16b056a6f55eb92cb6e5a6e02abd58e84b47abd5/docs/solutions/2026-07-31-fresh-agent-rails-and-iphone-compilation-field-report.md) +records one staff-prepared local observation using a fresh Claude Code Opus/high session and this Skill at +[`5cad5ac`](https://github.com/firstdraft/skills/commit/5cad5acec23a983e6421d2d37420a74de63b47fb). +The agent authored Movie and Director from prose, reached graph-version-1 valid analysis, invoked Compilation once, +and materialized a 194-file, 542,894-byte artifact. The fresh agent session ended after the unmodified output passed +its iOS doctor, lint, unsigned Xcode build, and generated Simulator tests. Afterward, an operator performed Rails +setup and used a temporary test-only copy to exercise live generated Rails pages, tab switching, and scrolling; +manual Simulator inspection covered the Dynamic Island and bottom safe area. This is not a reproducible agent +evaluation, authenticated operation, representative-user evidence, a published release, physical-device or iPad +proof, deployment, or production evidence. + +The exact landed CLI revision is `121272cd592055354d09a4fe90e55c3ca002770c`; its reviewed JavaScript-source runtime digest is `205e664df0ed9c7e63651a1c2c01e749a04d8879fe7f62cc4c1e13b66dce738d`. The exact landed server revision is `35ad070beb36c66dc6480f36b33767caaed160a9`; it activates analyzer @@ -114,16 +117,15 @@ path, and compile once. Never reuse a Project or Compilation across server-backe The `*-analysis.json` fixtures and Compilation eval prompts are behavioral examples accepted by the pinned CLI contract, not execution evidence by themselves. Their `2026-07-30` timestamps are fixed deterministic transport -data, not execution-evidence dates. A successor smoke must record the exact server, CLI, runtime, Skill, analyzer, +data, not execution-evidence dates. The dated field report records the server, CLI, runtime, Skill, analyzer, compiler, Rails Core, and iOS Core pins; Project and graph version; AnalysisRun and status; Compilation and artifact -identity; actual artifact byte size, file count, and manifest digest; representative web and iPhone files; and the -executable mode of `ios/bin/ios`. It must also establish that the artifact remains below the CLI's 16 MiB limit. +identity; artifact byte size, file count, and manifest digest; representative web and iPhone files; executable mode; +generated checks; the recovered authoring prompt and seed command; and composed local observation. It also records +the observation's preparation and reproducibility limits. -The current server-internal canonical Movie Catalog lifecycle fixture reports 190 Rails and iPhone files. That -count may be used as the bounded compile-reporting eval expectation, but it is not an external CLI or Skill smoke. -The iPhone output in that proof was byte-checked; it was not built or run in Xcode. Re-record the actual file count -and digests during the successor smoke rather than treating the server-internal result as release evidence. +The Compilation eval's 190-file response remains deterministic synthetic transport data; it is not the 194-file +output observed by the controlled smoke and dated field report. -The prior committed CLI smoke does not establish the successor releases, authenticated operation, representative -external-agent use, deployment, production readiness, or capabilities beyond its historical one-Entity scalar -slice. The dated observation above is not a reproducible eval. +The committed smoke and dated observation do not establish authentication, representative external-agent or user +operation, deployment, production readiness, or capabilities beyond the current independent-scalar-Entity and +public-index slice. diff --git a/skills/create-full-stack-app/SKILL.md b/skills/create-full-stack-app/SKILL.md index aedb36d..d572458 100644 --- a/skills/create-full-stack-app/SKILL.md +++ b/skills/create-full-stack-app/SKILL.md @@ -1,6 +1,6 @@ --- name: "create-full-stack-app" -description: "Experimental and in development: Authors and revises a complete First Draft Foundation Plan, validates its JSON structure when a compatible local validator is available, submits exact Plan bytes, waits for bounded whole-graph analysis, and can invoke the prepared narrow Rails web-and-iPhone Compilation path through an unreleased CLI; that path has not completed an end-to-end journey. It preserves subject identity, product meaning, conditional-write state, explicit approval, and recovery boundaries. Arbitrary applications, deployment, Android, iPad, and broader web or native clients are not available." +description: "Experimental and in development: Authors and revises a complete First Draft Foundation Plan, validates its JSON structure when a compatible local validator is available, submits exact Plan bytes, waits for bounded whole-graph analysis, and can invoke the prepared narrow Rails web-and-iPhone Compilation path through an unreleased CLI. It preserves subject identity, product meaning, conditional-write state, explicit approval, and recovery boundaries. Arbitrary applications, deployment, Android, iPad, and broader web or native clients are not available." --- # Create a Full-Stack App with First Draft @@ -26,19 +26,20 @@ that exposure with the user instead of adding it merely to satisfy the iPhone re importable for editing but cannot pass the current Compilation analysis gate. Appearance, nonempty delivery, Android, iPad, broader Scaffolds, and other graph breadth remain blocked. -The prior `rails-sketch/2026-07` journey is the only complete local evidence. First Draft's committed controlled CLI -smoke at server baseline `9e29606` reproducibly exercises an installed CLI, loopback Rails, and real Solid Queue -through 151-file application materialization. Separately, a one-off observation on 2026-07-30 used a fresh Codex -invocation at Skill baseline `e24b438`, server baseline `9e29606`, and CLI baseline `36f1292` to go from a prose -request through valid analysis and Movie application materialization. That observation is not a reproducible agent -eval. Neither form of evidence makes the unauthenticated local transport, CLI, or Skill released or published, and -neither is representative-user, deployed, or production evidence. The successor `rails-sketch/2026-08` authoring -and contract fixtures have not completed that end-to-end journey; they are not execution evidence. The prior smoke -exercised the successful start, status, artifact, and materialization path, not cancellation, and was bounded to one -Entity using supported scalar Fields. The prepared 2026-08 web-and-iPhone implementation and contract have not -completed an end-to-end 2026-08 journey. There is no Plan GET or pull operation, complete semantic analyzer, -Publish action, arbitrary application generation, deployment workflow, or support for the rest of the Foundation -Plan. +The current `rails-sketch/2026-08` path has bounded local evidence. First Draft's committed controlled CLI smoke +reproducibly drives an installed CLI through loopback Rails, real Solid Queue, valid analysis, artifact verification, +and 194-file two-Entity materialization. Separately, one staff-prepared fresh-agent observation authored Movie and +Director from prose and compiled once. The fresh agent session ended after the unmodified output passed its generated +checks. A later operator performed Rails setup and used a temporary test-only copy to display live generated Rails +pages in an iPhone Simulator. See the +[current evidence boundary](references/foundation-plan-019.md#current-evidence-boundary) for the exact provenance +and limitations. + +The fresh-agent observation is not a reproducible agent evaluation or representative-user evidence. Both paths +remain local, unreleased, unpublished, unauthenticated, and bounded. They do not establish cancellation, a physical +iPhone, iPad, deployment, or production readiness. There is no Plan GET or pull operation, +complete semantic analyzer, Publish action, arbitrary application generation, deployment workflow, or support for +the rest of the Foundation Plan. ## Load the relevant references @@ -210,7 +211,7 @@ Before invoking the command: Fields, the exact public-index Scaffold, optional semantic Entity icons, and a selected iPhone project under `ios/`. A domain is admitted only with `native.ios`, and selected iOS requires at least one admitted public-index navigation entry. That entry exposes the Entity's records on an unauthenticated public web index and must reflect - the user's confirmed intent. This boundary has not completed an end-to-end 2026-08 journey. Do not imply that + the user's confirmed intent. Do not imply that Appearance, nonempty delivery, Android, iPad, broader Scaffolds, References, Associations, Accounts, Policies, arbitrary Foundation Plans, or deployment are supported. 4. Run exactly: diff --git a/skills/create-full-stack-app/references/foundation-plan-019.md b/skills/create-full-stack-app/references/foundation-plan-019.md index d1d5f1a..a39aa10 100644 --- a/skills/create-full-stack-app/references/foundation-plan-019.md +++ b/skills/create-full-stack-app/references/foundation-plan-019.md @@ -32,17 +32,24 @@ authorized. are rejected atomically by the importer as described below. - The project-scoped server implements bounded AnalysisRun status and Compilation start, status, cancellation, and artifact transport for the reviewed CLI contract. -- The prior `rails-sketch/2026-07` journey is the only complete local evidence. First Draft's committed controlled - CLI smoke at server baseline `9e29606` reproducibly exercises an installed CLI, loopback Rails, and real Solid - Queue through 151-file application materialization. -- Separately, a one-off observation on 2026-07-30 used a fresh Codex invocation at Skill baseline `e24b438`, server - baseline `9e29606`, and CLI baseline `36f1292` to go from a prose request through valid analysis and Movie - application materialization. That observation is not a reproducible agent eval. -- The successor `rails-sketch/2026-08` schema, examples, evals, and API-contract fixtures have not completed that - end-to-end journey and are not execution evidence. -- The prior path remains unreleased, unpublished, unauthenticated, local, and bounded to one Entity using supported - scalar Fields. It exercised successful Compilation start, status, artifact, and materialization, not cancellation. - Neither form of evidence is representative-user, deployed, or production evidence. +- First Draft's committed + [controlled CLI smoke](https://github.com/firstdraft/firstdraft/blob/5847a349599f3cc28e1e0a1a8d8bace6742be7c3/script/compilation_http_cli_smoke) + reproducibly drives the exact installed CLI through loopback Rails and real Solid Queue to valid analysis, one + Compilation, artifact verification, and 194-file two-Entity materialization. It checks matching web and iPhone + navigation declarations without executing the generated application. +- A + [dated field report](https://github.com/firstdraft/firstdraft/blob/16b056a6f55eb92cb6e5a6e02abd58e84b47abd5/docs/solutions/2026-07-31-fresh-agent-rails-and-iphone-compilation-field-report.md) + records one staff-prepared local observation using a fresh Claude Code Opus/high session, the exact + [`create-full-stack-app` Skill](https://github.com/firstdraft/skills/commit/5cad5acec23a983e6421d2d37420a74de63b47fb), + and the pins below. The agent authored Movie and Director from prose, reached graph-version-1 valid analysis, + invoked Compilation once, and materialized a 194-file, 542,894-byte artifact. +- The fresh agent session ended after the unmodified generated output passed its iOS doctor with 16 passes and no + failures, lint, an unsigned Xcode build, and generated Simulator tests. Afterward, an operator performed Rails + setup and used a temporary test-only copy to exercise live generated Rails pages, tab switching, and scrolling. + Manual Simulator inspection covered the Dynamic Island and bottom safe area. +- The field observation is not a reproducible agent evaluation, authenticated operation, representative-user + evidence, a published release, physical-device or iPad proof, deployment, or production evidence. Neither it nor + the controlled smoke widens the admitted graph or proves cancellation. - There is no Plan GET or pull operation, complete semantic analyzer, Publish action, arbitrary application generation, deployment workflow, or support for the rest of the Foundation Plan. @@ -58,14 +65,15 @@ provenance rather than release or execution evidence. Its reviewed JavaScript-so from an unreleased version number. The activated server projections name analyzer release `foundation-plan-rails/application-2026-08` and compiler -release `foundation-plan-rails/compiler-application-2026-08`. These exact names are part of the successor contract, -not proof that an end-to-end journey has run. +release `foundation-plan-rails/compiler-application-2026-08`. These exact names are contract provenance; the dated +field report, not the names alone, is the bounded execution evidence. The selected iPhone project composes `firstdraft/foundation-ios-core` revision `aa2ac902fa52abab51a4502953b7b962f949a21d`, archive SHA-256 `0807e76cf02296af27d4eb1aae68e298beef162a7daa8a3da55d83e88ab6d748`. The archive excludes `.github` and is materialized beneath `ios/`, including executable `ios/bin/ios`. This package is an iPhone baseline, not iPad -support, and these pins are prepared provenance rather than end-to-end execution evidence. +support. The pins alone are prepared provenance; the dated field report provides bounded execution evidence for one +composed output. ## Closed envelope diff --git a/test/repository.test.mjs b/test/repository.test.mjs index 4e52db7..81c00ed 100644 --- a/test/repository.test.mjs +++ b/test/repository.test.mjs @@ -30,12 +30,12 @@ const foundationIosCoreRevision = "aa2ac902fa52abab51a4502953b7b962f949a21d"; const foundationIosCoreArchiveDigest = "0807e76cf02296af27d4eb1aae68e298beef162a7daa8a3da55d83e88ab6d748"; -const priorJourneyServerBaseline = - "9e296062bf543e89387e2f1044dd29eb52123c9c"; -const priorJourneyCliBaseline = - "36f12921c0f6641f073820734234c11e47fdb834"; -const agentSmokeSkillBaseline = - "e24b438918f406e8638e79598b6d83605bd4c15a"; +const controlledApplicationSmokeBaseline = + "5847a349599f3cc28e1e0a1a8d8bace6742be7c3"; +const freshAgentEvidenceBaseline = + "16b056a6f55eb92cb6e5a6e02abd58e84b47abd5"; +const freshAgentSkillBaseline = + "5cad5acec23a983e6421d2d37420a74de63b47fb"; const planInitErrorCodes = [ "invalid_arguments", "local_initialization_failed", @@ -131,21 +131,15 @@ test("revision pins remain exhaustive across coordination surfaces", async () => ].sort(); const assertRevisionTokens = (source, expected) => assert.deepEqual(revisionTokens(source), [...expected].sort()); - const historicalAbbreviations = [ - priorJourneyServerBaseline.slice(0, 7), - priorJourneyCliBaseline.slice(0, 7), - agentSmokeSkillBaseline.slice(0, 7), - ]; - const readme = await readFile(path.join(repository, "README.md"), "utf8"); assertRevisionTokens(readme, [ foundationPlanServerBaseline, planCompileCliBaseline, foundationIosCoreRevision, - priorJourneyServerBaseline, - priorJourneyCliBaseline, - agentSmokeSkillBaseline, - ...historicalAbbreviations, + controlledApplicationSmokeBaseline, + freshAgentEvidenceBaseline, + freshAgentSkillBaseline, + freshAgentSkillBaseline.slice(0, 7), ]); const skillDirectory = path.join(skillsDirectory, "create-full-stack-app"); @@ -165,11 +159,13 @@ test("revision pins remain exhaustive across coordination surfaces", async () => foundationPlanServerBaseline, planCompileCliBaseline, foundationIosCoreRevision, - ...historicalAbbreviations, + controlledApplicationSmokeBaseline, + freshAgentEvidenceBaseline, + freshAgentSkillBaseline, ]); assertRevisionTokens( await readFile(path.join(skillDirectory, "SKILL.md"), "utf8"), - historicalAbbreviations, + [], ); const foundationPlanReference = await readFile( @@ -210,10 +206,9 @@ test("revision pins remain exhaustive across coordination surfaces", async () => foundationPlanServerBaseline, planCompileCliBaseline, foundationIosCoreRevision, - priorJourneyServerBaseline, - priorJourneyCliBaseline, - agentSmokeSkillBaseline, - agentSmokeSkillBaseline.slice(0, 7), + controlledApplicationSmokeBaseline, + freshAgentEvidenceBaseline, + freshAgentSkillBaseline, ], ); for (const relativePath of [ @@ -1497,33 +1492,44 @@ test("analysis status guidance follows the pinned CLI contract", async () => { ); assert( readme.includes( - `firstdraft/firstdraft/blob/${priorJourneyServerBaseline}/script/compilation_http_cli_smoke`, + `firstdraft/firstdraft/blob/${controlledApplicationSmokeBaseline}/script/compilation_http_cli_smoke`, ), ); - assert.match( - readme, - /committed[\s\S]*?controlled CLI smoke[\s\S]*?reproducibly exercises[\s\S]*?Separately, a one-off observation on 2026-07-30/, + assert( + readme.includes( + `firstdraft/firstdraft/blob/${freshAgentEvidenceBaseline}/docs/solutions/2026-07-31-fresh-agent-rails-and-iphone-compilation-field-report.md`, + ), ); - assert(readme.includes(agentSmokeSkillBaseline)); - assert(readme.includes(priorJourneyServerBaseline)); - assert(readme.includes(priorJourneyCliBaseline)); + assert(readme.includes(freshAgentSkillBaseline)); assert(readme.includes(foundationPlanServerBaseline)); assert(readme.includes(planCompileCliBaseline)); assert(readme.includes(planCompileCliRuntimeDigest)); assert(readme.includes(foundationIosCoreRevision)); assert(readme.includes(foundationIosCoreArchiveDigest)); - assert.match(readme, /observation is narrow\s+development evidence, not a reproducible agent eval/); assert.match( readme, - /successor smoke must record[\s\S]*?actual artifact byte size, file count, and manifest digest[\s\S]*?executable mode of `ios\/bin\/ios`[\s\S]*?below the CLI's 16 MiB limit/, + /committed[\s\S]*?controlled CLI smoke[\s\S]*?reproducibly drives[\s\S]*?194-file two-Entity materialization[\s\S]*?without executing the generated application/, + ); + assert.match( + readme, + /staff-prepared local observation[\s\S]*?fresh Claude Code Opus\/high[\s\S]*?Movie and Director[\s\S]*?graph-version-1 valid analysis[\s\S]*?Compilation once[\s\S]*?194-file, 542,894-byte artifact/, ); + assert.match(readme, /dated 2026-07-31\s+\[field report\]/); assert.match( readme, - /Their `2026-07-30` timestamps are fixed deterministic transport\s+data, not execution-evidence dates/, + /fresh agent session ended after the unmodified output passed\s+its iOS doctor, lint, unsigned Xcode build, and generated Simulator tests[\s\S]*?Afterward, an operator performed Rails\s+setup and used a temporary test-only copy[\s\S]*?Dynamic Island and bottom safe area/, ); assert.match( readme, - /does not establish the successor releases, authenticated operation, representative\s+external-agent use, deployment, production readiness, or capabilities beyond its historical one-Entity scalar\s+slice/, + /not a reproducible agent\s+evaluation, authenticated operation, representative-user evidence, a published release, physical-device or iPad\s+proof, deployment, or production evidence/, + ); + assert.match( + readme, + /dated field report records the server, CLI, runtime, Skill, analyzer,\s+compiler, Rails Core, and iOS Core pins[\s\S]*?artifact byte size, file count, and manifest digest[\s\S]*?recovered authoring prompt and seed command[\s\S]*?preparation and reproducibility limits/, + ); + assert.match( + readme, + /Compilation eval's 190-file response remains deterministic synthetic transport data[\s\S]*?not the 194-file\s+output observed by the controlled smoke and dated field report/, ); const skillEvidence = skillSource.match( /This Skill is experimental\.([\s\S]*?)## Load the relevant references/, @@ -1539,35 +1545,43 @@ test("analysis status guidance follows the pinned CLI contract", async () => { for (const source of [skillEvidence[1], foundationPlanEvidence[1]]) { assert(source.includes("loopback Rails")); assert.match(source, /real Solid\s+Queue/); - assert.match(source, /committed controlled\s+CLI\s+smoke/); - assert.match(source, /reproducibly exercises/); - assert.match(source, /prior `rails-sketch\/2026-07` journey/); - assert.match(source, /Separately, a one-off observation\s+on 2026-07-30/); - assert.match(source, /fresh\s+Codex/); - assert(source.includes("e24b438")); - assert(source.includes(priorJourneyServerBaseline.slice(0, 7))); - assert(source.includes(priorJourneyCliBaseline.slice(0, 7))); - assert.match(source, /not a reproducible agent\s+eval/); - assert.match(source, /151-file application\s+materialization/); - assert.match( - source, - /successor `rails-sketch\/2026-08`[\s\S]*?not execution evidence/, - ); - assert(source.includes("unauthenticated")); - assert.match( - source, - /(?:neither is|Neither form of evidence is) representative-user,\s+deployed, or production evidence/, - ); - assert.match(source, /one\s+Entity using supported\s+scalar\s+Fields/); + assert.match(source, /committed[\s\S]*?controlled CLI\s+smoke/); + assert.match(source, /reproducibly drives/); + assert.match(source, /194-file two-Entity materialization/); + assert.match(source, /staff-prepared/); + assert.match(source, /fresh-agent|fresh Claude Code/); + assert.match(source, /not a reproducible agent\s+eval(?:uation)?/); assert.match( source, /no Plan GET or pull operation,\s+complete semantic analyzer,\s+Publish action, arbitrary\s+application\s+generation,\s+deployment workflow/, ); - assert.match( - source, - /successful (?:Compilation )?start, status, artifact, and materialization[\s\S]*?not cancellation/, - ); } + assert.match( + skillEvidence[1], + /Both paths\s+remain local, unreleased, unpublished, unauthenticated, and bounded[\s\S]*?do not establish cancellation, a physical\s+iPhone, iPad, deployment, or production readiness/, + ); + assert.match( + foundationPlanEvidence[1], + /field observation is not a reproducible agent evaluation, authenticated operation, representative-user\s+evidence, a published release, physical-device or iPad proof, deployment, or production evidence[\s\S]*?Neither it nor\s+the controlled smoke widens the admitted graph or proves cancellation/, + ); + assert( + foundationPlanEvidence[1].includes( + `firstdraft/firstdraft/blob/${freshAgentEvidenceBaseline}/docs/solutions/2026-07-31-fresh-agent-rails-and-iphone-compilation-field-report.md`, + ), + ); + assert(foundationPlanEvidence[1].includes(freshAgentSkillBaseline)); + assert.match( + foundationPlanEvidence[1], + /Movie and Director[\s\S]*?graph-version-1 valid analysis[\s\S]*?Compilation once[\s\S]*?194-file, 542,894-byte artifact/, + ); + assert.match( + foundationPlanEvidence[1], + /fresh agent session ended after the unmodified generated output passed its iOS doctor with 16 passes and no\s+failures[\s\S]*?Afterward, an operator performed Rails\s+setup and used a temporary test-only copy[\s\S]*?Manual Simulator inspection[\s\S]*?Dynamic Island and bottom safe area/, + ); + assert.match( + skillEvidence[1], + /authored Movie and\s+Director from prose and compiled once[\s\S]*?fresh agent session ended after the unmodified output passed its generated\s+checks[\s\S]*?later operator performed Rails setup and used a temporary test-only copy to display live generated Rails\s+pages in an iPhone Simulator/, + ); for (const id of [ "initialize-empty-plan", @@ -2137,7 +2151,7 @@ test("Compilation guidance follows the pinned CLI contract", async () => { assert(success.prompt.includes(foundationPlanCompilerRelease)); assert(success.prompt.includes(foundationPlanTarget.profile)); assert.match(success.prompt, /with 190 files/); - assert.doesNotMatch(success.prompt, /151 files/); + assert.doesNotMatch(success.prompt, /194 files/); for (const fragment of [ "Compilation and AnalysisRun IDs", "artifact digest", @@ -2532,8 +2546,11 @@ async function checkSkill(skillName) { assert.match(metadata.description, /^Experimental and in development:/); assert(metadata.description.includes("First Draft Foundation Plan")); assert( - metadata.description.includes("has not completed an end-to-end journey"), + metadata.description.includes( + "prepared narrow Rails web-and-iPhone Compilation path through an unreleased CLI", + ), ); + assert(!metadata.description.includes("end-to-end journey")); assert( metadata.description.includes( "Arbitrary applications, deployment, Android, iPad, and broader web or native clients are not available.",