From 74512c20a7aca72e722d46bcc6b3954c1677d9ee Mon Sep 17 00:00:00 2001 From: Garry Tan Date: Sat, 3 Oct 2026 01:19:03 -0700 Subject: [PATCH] v1.91.15.0 v1.91.15.0: Opus 5.5 prompt cleanup, behavior-level skill tests, transcript consent (#3017) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(models): allowlist routing for model-pinned Claude families (W1) resolveModel lowercases input and strips one trailing [...] context marker. Opus 4.7, Opus 4.8 and Sonnet 5 keep their pinned overlay only for the bare ID, the bare ID plus an 8-digit date, and the bare ID plus -latest; any other suffix (point releases such as claude-sonnet-5-5, claude-opus-4-7-1) falls to the generic claude overlay. claude-opus-5-5 routes to claude explicitly (no new overlay, no new ALL_MODEL_NAMES entry). Fable keeps its prefix match while CLAUDE_FRONTIER_EVAL_MODEL is claude-fable-5-1, guarded by a test. Tests: one test/model-overlays.test.ts case per shape in the plan, plus the lowercase / [1m] marker / family-name cases and the Fable guard. * docs(CLAUDE.md): define when prompt bytes are a test contract (W7 prompt-byte rule) Adds the gstack-repo definition to the Testing section at normal volume: prompt bytes are a contract only when software reads them or a recorded eval shows the wording matters. Amends the test-value-bar line so 'prompt bytes' refers to that definition. scripts/resolvers/test-value.ts and docs/test-value-bar.md are unchanged. * fix(browse): sidebar tab hint names real tabs.json fields and how $B resolves (s11 H1, s11 M8, s11 M9) * fix(router): route telemetry uses the echoed SESSION_ID (s01 H1) $_SESSION_ID is never set in the router's bash block since bin/gstack-skill-start took over session bookkeeping, so every /gstack route event logged an empty session id. Use the literal SESSION_ID placeholder and tell the model to substitute the echoed value, matching the completion-status telemetry block. No W7a pins on the changed line. * docs(CLAUDE.md): correct stale test-infra facts (s01 H2, H3, H4, H5) H2: TREE_MUTATING is not empty; it still holds bootstrap-retention. H3: catalog ceiling is CATALOG_BUDGET_TOKEN_EQUIVALENTS (1,194), not 1,171. H4: detach timeouts point at package.json's --timeout values (gate is 49320s). H5: Writing Style lives in preamble/generate-writing-style.ts and the jargon list is Read at runtime, not baked at generation time. No W7a pins on the changed lines. * fix(preamble): drop the stale jargon-list count (s01 H6) The list has 77 terms, not 80+, and the model Reads the file anyway. No W7a pins on the changed text. * fix(overlay): claude.md dedicated-tools nudge stops naming tools the host may lack (s01 M1) The nudge named Glob and Grep, which some Claude hosts do not expose. It now names the host's dedicated file tools and its search tools when it has them, keeping the prefer-dedicated-tools behavior the claude-dedicated-tools-vs-bash overlay eval measures. Updates the prose comment at test/gen-skill-docs.test.ts:643 (comment only, no assertion change). The matching comment in test/fixtures/overlay-nudges.ts is left to its owner. * fix(preamble): progress notes on phase changes, not a [PROGRESS] cadence (s01 M2) Context Health told the model to periodically write a tagged [PROGRESS] summary. No code reads that tag; the line now says when to tell the user (finishing a phase or changing direction). Loop detection stays. W7a pin: test/terse-build.test.ts:103 pinned 'PROGRESS'; it now checks the default build emits a non-empty Context Health body (terse still emits ''). * fix(preamble): learnings review without incident archaeology (s01 M3) Drops the issue number, the 43-of-44 statistic and the ALWAYS caps from the Operational Self-Improvement step; keeps the rule that the review runs every time and that an empty result is stated explicitly. No W7a pins on the removed text. * docs(CLAUDE.md): fold 'Long-running tasks' into the detach section (s01 M4, CEO W4) The 'don't give up' section told agents to poll a plain background task with sleep 180 + TaskOutput, which the next section forbids for evals. Its one durable rule (keep checking until the run finishes, report progress at each check) now lives in the detach section's poll step, pointed at the gstack-detach EXIT sentinel, at normal volume. No tests pin the removed text. * fix(preamble): test-failure triage questions defer to the AskUserQuestion Format (s01 M5) The two quoted pseudo-briefs pinned a superseded question shape (RECOMMENDATION: Choose X, a completeness score on the recommendation, no D/ELI10/Net). The triage step now gives the facts, the options with their completeness values, and the recommended option as data, and defers the shape to the Format section. Option labels that Step T4 and test/skill-validation.test.ts:2004-2016 depend on are verbatim. No W7a pins on the removed text. * fix(proactive): PROACTIVE=false means no suggestions, including 'want me to run /X?' (W5.1) The router forbade suggesting skills when PROACTIVE is false while the preamble told the model to ask 'want me to run it?'. Decision: false means never auto-invoke and never suggest, including by asking. The preamble line in generate-upgrade-check.ts now matches the router, and both quote the value as `false`, the way gstack-skill-start prints it. Restore with gstack-config set proactive true. W7a pin: test/gen-skill-docs.test.ts:4488 used the old quoted sentence as a preamble-order marker; it now finds the PROACTIVE-false rule with a quote-tolerant, case-insensitive pattern. * docs(ETHOS.md): correct the claim that ETHOS is injected into every preamble (W5.7) Nothing injects ETHOS.md. Preambles carry condensed principles (completeness, voice, search before building) and the Search Before Building section links to this file. Edit approved by Garry for this PR. * office-hours: fix stale refs, state-root path, profile query, SESSION_ID (s07 H1, H2, H3, M7, M10; s01 H1 office-hours note) - Phase 4.5 points at Founder Resources instead of the nonexistent Beat 3.5 (H1). - builder-journey.md is written to $GSTACK_STATE_ROOT, where it is opened (H2). - builder-profile context query reads developer-profile.json, the file the migration leaves behind; drop meaningless tail (H3). - Drop issue numbers from three headings (M7) and the MANDATORY/NOT optional markers on Phase 4 (M10). - Handoff telemetry uses the echoed SESSION_ID placeholder; $_SESSION_ID is never set in a fresh shell. Template-only commit: generated SKILL.md is expected red until the regeneration commit. * spec: plain Phase 3 gate, drop duplicates, dead telemetry and review IDs (s07 H4, M1, M2, M3, M4, M5, M6) - H4: Standard template heading no longer names nonexistent --bug/--feature/--refactor flags. - M1: Phase 3 read-code-first gate at normal volume, constraint and reason kept. - M2: drop the in-phase repeat of the read-first rule (Rules recap stays). - M3: drop the duplicate audit-sink paragraph. - M4: drop TTHW telemetry block and its never-set frontmatter keys. - M5/M6: drop plan-review finding IDs from Phase 5 headings and the /ship handoff. W7a pins: spec-template-invariants:314 (Mandatory/MUST) becomes a Phase 3 section check for the read-evidence-before-asking constraint; :203 matches 'raw spec must not be persisted' across line wraps so no duplicate paragraph is needed to satisfy it. Template-only commit: generated SKILL.md is expected red until the regeneration commit. * investigate: drop issue numbers from freeze-script comment (s07 M8) Template-only commit: generated SKILL.md is expected red until the regeneration commit. * qa: replace WTF point table with named signals and a plain stop rule (s07 M9) The self-regulation check keeps its cadence (every 5 fixes or after a revert), its signals (reverts, unrelated files, sprawl, long runs, low-severity tail), STOP-and-ask, and the 50-fix hard cap. The percentage table goes; the stop threshold (two reverts, or one unrelated-file edit) stops at least as early. W7a pins: qa-browser-preservation:220 drops 'WTF > 20%' and checks the signals case-insensitively; skill-validation:1250 checks the test-only exclusion rule instead of the heading name; carve-guards qa anchor 'WTF-LIKELIHOOD' becomes the '### 8f. Self-Regulation' heading. Template-only commit: generated SKILL.md is expected red until the regeneration commit. * design-html: match Pretext docs to the vendored bundle; fix cross-block server state (s08 H1, H2, H3, H4, H7, M6) - H1-H3: walkLineRanges, layoutNextLine and layoutWithLines signatures and return shapes now match design-html/vendor/pretext.js; patterns 2-4 rewritten. - H4: inline the ES-module bundle in ` Add a comment: `` @@ -706,17 +707,20 @@ echo "SERVER: http://localhost:$_PORT/finalized.html" echo "PID: $_SERVER_PID" ``` +Remember the printed `SERVER:` URL and `PID:` value; each bash block is a fresh +shell, so later blocks restate them literally. + If python3 is not available, fall back to: ```bash open ``` -Tell the user: "Live preview running at http://localhost:$_PORT/finalized.html. +Tell the user: "Live preview running at . After each edit, just refresh the browser (Cmd+R) to see changes." When the refinement loop ends (Step 4 exits), kill the server: ```bash -kill $_SERVER_PID 2>/dev/null || true +kill 2>/dev/null || true ``` --- @@ -785,7 +789,7 @@ LOOP: 5. Apply feedback using targeted Edit tool changes on the HTML file (do NOT regenerate the entire file — surgical edits only) - 6. Brief summary of what changed (2-3 lines max) + 6. Briefly say what changed 7. If verification screenshots are available, re-take them to confirm the fix diff --git a/design-html/SKILL.md.tmpl b/design-html/SKILL.md.tmpl index 11eeb0d3a..58d5dd277 100644 --- a/design-html/SKILL.md.tmpl +++ b/design-html/SKILL.md.tmpl @@ -231,8 +231,9 @@ _ROOT=$(git rev-parse --show-toplevel 2>/dev/null) [ -n "$_PRETEXT_VENDOR" ] && echo "VENDOR: $_PRETEXT_VENDOR" || echo "VENDOR_MISSING" ``` -- If `VENDOR` found: read the file and inline it in a `` Add a comment: `` @@ -306,17 +307,20 @@ echo "SERVER: http://localhost:$_PORT/finalized.html" echo "PID: $_SERVER_PID" ``` +Remember the printed `SERVER:` URL and `PID:` value; each bash block is a fresh +shell, so later blocks restate them literally. + If python3 is not available, fall back to: ```bash open ``` -Tell the user: "Live preview running at http://localhost:$_PORT/finalized.html. +Tell the user: "Live preview running at . After each edit, just refresh the browser (Cmd+R) to see changes." When the refinement loop ends (Step 4 exits), kill the server: ```bash -kill $_SERVER_PID 2>/dev/null || true +kill 2>/dev/null || true ``` --- @@ -377,7 +381,7 @@ LOOP: 5. Apply feedback using targeted Edit tool changes on the HTML file (do NOT regenerate the entire file — surgical edits only) - 6. Brief summary of what changed (2-3 lines max) + 6. Briefly say what changed 7. If verification screenshots are available, re-take them to confirm the fix diff --git a/design-html/sections/pretext-patterns.md b/design-html/sections/pretext-patterns.md index 8823c853a..059379350 100644 --- a/design-html/sections/pretext-patterns.md +++ b/design-html/sections/pretext-patterns.md @@ -7,8 +7,8 @@ Pretext API usage patterns. Follow them exactly. **Pattern 1: Basic height computation (Simple layout, Card/grid)** ```js -import { prepare, layout } from './pretext-inline.js' -// Or if inlined: const { prepare, layout } = window.Pretext +import { prepare, layout } from '@chenglou/pretext' +// Vanilla HTML: omit the import; this code follows the inlined bundle in the same