Skip to content

Release v0.9.1#247

Merged
qwerfunch merged 8 commits into
mainfrom
develop
Jul 21, 2026
Merged

Release v0.9.1#247
qwerfunch merged 8 commits into
mainfrom
develop

Conversation

@qwerfunch

Copy link
Copy Markdown
Owner

2026-07-21 · develop → main · Release v0.9.1

Merge with "Create a merge commit" — never squash / rebase. A squash drops develop from main's ancestry and makes the next release PR phantom-conflict.

A focused patch: adopting an existing project keeps the capabilities you approved, and the checks read non-JavaScript projects more faithfully.

Fixed

  • Adoption keeps your approved capabilities. Adopting a project that already has code now saves the capabilities you approved during setup — previously they could be replaced by your README's headings, or left empty.

Also improved

  • Cleaner, faster checks for non-JavaScript projects — per-file formatter findings, one test run per check on Python, more comment styles recognized.
  • Gentle, non-blocking cycle reminders — code written without a matching spec, checks not wired to run automatically, onboarding handing off to the first spec.
  • Plainer wording throughout.

Rolls up #245 (adoption fix) and #246 (polyglot gate fidelity + feature-cycle signals). Version bumped across all sites; strict pre-push gate green across 2602 tests.

🤖 Generated with Claude Code

qwerfunch and others added 8 commits July 21, 2026 11:15
The scan branch of runInit wrote spec/capabilities.yaml from the scan
interpreter, whose total-fallback always fires for a host draft (the
draft never emits the CONVENTIONS_MD sentinel) and re-derives
capabilities from README headings — or `capabilities: []` when there
are none — silently discarding the draft's schema-validated 3-8
approved capabilities. The greenfield branch already honors them; the
scan branch now does too, preferring onboarding.capabilitiesYaml when
the dispatch genuinely fired (source === 'llm'). conventions.md and
architecture.yaml stay scanner-owned (code-grounded).

Adds F-70ed1afd (adoption-honors-host-capabilities) with EARS ACs and a
regression assertion in the sparse-codebase init-tools test. Regenerates
the case-existing-adoption A/B report — the capabilities body byte-count
shifted (fewer explainer comments, added summary/surface); the A/B
verdict, capability count, and detector outcomes are unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ilities

Existing-project adoption keeps the host's approved capabilities
Land the in-flight pytest/convention-drift work and add three
feature-cycle signals, each authored spec-first (shard → sync →
implement → tests → clad done, strict gate GREEN).

- pytest test-run dedup (F-49f6f2d2): on pytest projects the unit and
  coverage stages now share ONE coverage-instrumented run instead of
  spawning the whole suite twice; the zero-executed-tests guard learned
  pytest's `collected 0 items` and applies on the shared run, so the
  dedup can never pass a vacuous run.
- lint multi-finding + fix hint (F-4643d99d): check-only formatters
  (dart/dotnet) now list EVERY dirty file with its path, plus a one-line
  `fix: run` hint — not just the first line collapsed to one finding.
- unbound-edit nudge (F-f9891175): a non-blocking, debounced,
  once-per-window post-edit card when source edits keep resolving to no
  feature, so the spec-first cycle gets triggered instead of skipped.
- enforcement advisory (F-f4e184f7): `clad check` flags a project that
  has undone features but neither a git hook nor CI enforcing the gate.
  Informational only; never changes the exit status.
- convention-drift: recognise `#` comments and Python docstrings.

Rebuilt bundle + plugin mirrors; READMEs + CHANGELOG updated. Strict
pre-push gate GREEN — 2586 tests, 41 detectors, 258 features (255 done).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ment

The plain-language audit found the Soft Shell discipline (plain, host-
relayable user output; internal terms only in the Iron Core) is real and
tested, but the two enforcing tests had blind spots — they scanned only
DETECTOR_PLAIN `action` (not `lead`) and banned MCP names + "shard" but
not raw detector-name / stage-id leads. Several leaks slipped through.

Closed (user-facing only; code comments, field names, and the structured
Tier-A provenance banner stay Iron Core by design):
- softShell.ts: INVENTORY_DRIFT lead said "shard files" → "spec files".
- clad.ts: the `clad check` footer said "spec shards" / "the offending
  detector"; the `clad sync` note leaked a raw `stage_2.4`.
- done.ts: the git-op and no-feature refusals said "shard".
- hook.ts: the SessionStart stop-block line led with a raw detector name
  (AC_DRIFT) — now rendered via plainLead.
- init.ts: the scenarios README prose named `clad_create_feature`.

Tightened so it can't recur:
- plain-render.test.ts now scans each `lead` for "shard" and MCP names.
- human-first-cards.test.ts asserts the seeded stop-block detector is
  rendered as its plain lead, never the raw id.

Per-language: the behavior-triggered signals (unbound nudge, enforcement
advisory) fire from one English source regardless of the user's language
(proven with a Korean-titled spec + Korean-named path; slugs stay ASCII
machine ids by schema, human titles/paths are any language). Three host-
relay checks (ko/ja/zh) confirmed the emitted English relays cleanly with
no jargon leak.

New feature F-ebbb20af, authored spec-first; strict pre-push gate GREEN —
2593 tests, 41 detectors, 259 features (256 done). AB report metrics
refreshed for the shorter scenarios README.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…state

A real dogfood exposed the failure the unbound-edit nudge only partially
covers: after onboarding, a host read "ordinary development can begin" as
"write code now" and scaffolded a whole project with features: [] — the
feature cycle never started, and cladding stayed silent (the nudge is
reactive and source-edit-triggered; the enforcement advisory needs an
undone feature; no detector flags a young project's unbound code). The fix
layers the signal across every moment the cycle can be skipped, with the
gate as the only hard backstop.

- Onboarding handoff (F-195cb59e): the init host instruction and the CLI
  clarify completion now steer to authoring the first feature's spec — its
  acceptance criteria and the files it will cover — BEFORE writing code,
  instead of a bare "ordinary development can begin". Names WHAT the spec
  contains, in plain language, across all four host mirrors.
- Cold-start / resting state (F-be5306eb): a graduated featureCycleAdvisory
  — the cold-start signal ("source code but no feature specs — the cycle
  hasn't started") when un-started, else the enforcement advisory — surfaced
  at the SessionStart card (every session) and the clad check footer. Source
  presence is detected with the scan walker (vendor dirs ignored, early
  exit). Non-blocking; never changes the exit status.

Layers: ① handoff steer · ② the existing unbound-edit nudge (in-flight) ·
③ SessionStart + clad check cold-start signal · hard backstop = the gate
(UNMAPPED_ARTIFACT once ≥8 features, clad done honesty). Re-verified live:
a features:[] + code project now surfaces the cold-start signal via both
clad check and the SessionStart card; the handoff steer reached every host.

Both features authored spec-first; strict pre-push gate GREEN — 2602 tests,
41 detectors, 261 features (258 done).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Rebasing this branch onto develop — which now carries the 0.9.1
adoption-capabilities fix (#245) — left the harness-written files holding
their pre-rebase versions. Re-derived them against the merged tree:
rebuilt the dist bundle, re-synced the spec inventory, regenerated the
case-existing-adoption A/B report (capabilities-body byte-count shift), and
re-stamped the attestation. Strict pre-push gate GREEN across 2602 tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…le-signals

Polyglot gate fidelity + feature-cycle signals
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@qwerfunch
qwerfunch merged commit cb52ac0 into main Jul 21, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant