Skip to content

Release 0.7.0 - #571

Merged
dkackman merged 44 commits into
masterfrom
develop
Oct 2, 2026
Merged

dkackman merged 44 commits into
masterfrom
develop

Conversation

@dkackman

@dkackman dkackman commented Oct 2, 2026

Copy link
Copy Markdown
Owner

Release 0.7.0: stabilization Phase 4 (gate 4, stabilization-gate-4). The freeze is lifted; the architecture ratchet runs in CI.

Notes

  • A sub-workflow path is resolved by one function (library.resolve_sub_workflow_reference) at every site, so a path a run can open is one validation, the realized workflow's digest and the observed-cost lookup can open too.
    • builtin:builtin:x.json no longer loads x.json: only the leading prefix is stripped, so the name builtin:x.json is looked up and reported as SubWorkflowNotFound.
    • At run time a missing builtin: workflow now raises SubWorkflowNotFound (naming the packaged root) instead of validate_workflow_path's missing-file error.
    • The realized workflow's sub-workflow digest and a composed child's observed cost now fall back to the same catalog root, so a catalog sub-workflow a run could open is also digested and costed.
  • A run that fails before it opens its run directory no longer rewrites the previous run's manifest.json when the same workflow instance is reused: Workflow.run resets the directory and version it carried.
  • The per-variant lines of a kernels "Cannot find a build variant" error are sorted by dw (kernel_availability.stable_message), so the message no longer varies by process.
  • The argument_template schema description now says what the code does: handed arguments are held on the child at run time, never written into the definition, and an authored value is the fallback.
  • gain_audio rounds a frame-addressed region's end once, as slice_audio does, so a region's end can no longer be one sample off the matching slice's.
  • concat_videos refuses a track with no sample rate (concat_videos: '<name>' has audio with no sample rate) instead of joining it unresampled at the wrong speed and pitch; dissolve_videos gives the same message in place of the resample error. Save that step with audio_sample_rate in its result and join the saved file through an output: reference. An unpinned dissolve_videos with such a track now raises this ValueError rather than a TypeError.
  • For developers (Python paths only; nothing on the API or MCP reaches them):
    • Workflow's one-line check methods are gone: validation_context, sub_workflow_warnings, adapter_warnings, inherited_vram_warnings, slice_past_end_warnings, shot_span_warnings, null_variable_argument_warnings and cache_hits. Call validation.workflow_context(workflow, ...), validation.run_warning_check(workflow, "<name>", ...) and workflow_run.cache_hits(workflow, arguments).
    • Reference prefixes (variable:, asset:, output:, ...) are read and built only through dw.references; a hand-written prefix check elsewhere fails the prefix_handling ratchet.
    • scripts/arch_metrics.py --check docs/stabilization/baseline.json runs in CI and scripts/preflight.sh, so a PR that raises any architecture metric goes red. The module-size metric is modules_over_size_ceiling (fail over 1,100 lines, warn over 1,000), renamed from modules_over_1000_lines.
    • Agent context: CLAUDE.md files went from 957 to 129 lines; docs/ARCHITECTURE.md is the seam map (concept, owning module, rule, enforced-by).
  • The stabilization freeze is lifted (stabilization-gate-4).

Gate report: docs/stabilization/ROADMAP.md, "Gate 4" (suite green on CI; lem smoke green on a5bced6).

🤖 Generated with Claude Code

dkackman and others added 30 commits October 1, 2026 10:55
Phase 4 staged 4a-4d: carried code, guardrails in dw, seam map and
context diet, gate 4 (harness stage C before FREEZE is deleted).
Don's rulings 2026-10-01: concat refuses an unrated track, 1,100-line
ceiling with a warn band, CLAUDE.md only shrinks after the diet,
release decided at the gate; the diet's budget is the root file
(<= 150 lines).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e module function

validation_context, the six warning methods and cache_hits become direct
calls to validation.workflow_context / run_warning_check and
workflow_run.cache_hits. validation_errors and validate stay methods.
No surface change (snapshot byte-identical).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
resolve_sub_workflow_reference owns the builtin branch, the catalog-root
fallback, the search path and the confinement check. create_step_action,
resolve_sub_workflow_path, open_sub_workflow (now takes resolved, so
sub_workflow_errors resolves once), realize.read_sub_workflow and the
observed-cost lookup all call it. Fixes the builtin name 'replace' bug.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sert only what the shared resolver gives

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…w, reword argument_template description

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ck with no sample rate

gain_audio's frame region goes through slice_region, so its end matches
slice_audio's to the sample. reconcile_sample_rates loses skip_unrated and
refuses an unrated track by name in concat_videos and dissolve_videos.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A declared audio_sample_rate applies at save, not to an in-memory input, so
the message now says to save the step and join the file through output:.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Counts hand-written reference-prefix handling outside dw/references.py:
startswith-style calls, len() slices, + / f-string building, module-level
alias assignments and prefixed strings. prefix_literals is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An f-string fragment ending '_output:' is the tail of another word, not
an output: reference; only a prefix preceded by a non-identifier
character counts. Count on the tree unchanged (82).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…es.py

Adds RESERVED_TEXT and LAZY_MEDIA, deletes the alias constants and
_UNRESOLVED_PREFIXES copies, and moves each startswith/removeprefix/slice/
concatenation site onto is_ref/ref_name/make_ref. prefix_handling 82 -> 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…p SHOT_REFERENCE_PREFIX

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Final-review minors: validation docstrings no longer describe the deleted
Workflow delegators; dead library.catalog_root_dir removed;
CLAUDE.md names workflow_run.cache_hits; the gain_audio release line
says 'one sample off', not 'short'. Hot zone back to the standing
entries; ROADMAP Phase 4 row says 4a merged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Workflow delegators gone (LCOM4 1); one sub-workflow resolver; run-dir
reset; kernels variant order; argument_template description; gain_audio
rounding; concat refuses an unrated track; prefix_handling ratchet 82 -> 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…modules_over_size_ceiling

Key rename in baseline.json (value 0 -> 0): modules_over_1000_lines is now
modules_over_size_ceiling, ceiling 1,100. Modules in 1,001-1,100 print a
non-failing warning line; a failing --check prints the re-baseline rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nd scripts

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
arch_metrics: modules_over_size_ceiling (1,100) with a 1,001-1,100 warn
band; a failing --check prints the re-baseline rule. CI's backend job
and preflight run the ratchet; ruff scoped to dw dw_mcp tests scripts.
Carries fe7acd1 (an empty dw/_ratchet_probe.py, which failed CI as
intended) and its revert 0f928e3 - no net change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One row per concept: owner module, the rule in one sentence (read off the
code), and the test or check that enforces it. Rows are the triage's 26 map
rows plus the stabilization's owners and dw/variables.py.

tests/test_architecture_map.py checks that every backticked repo path in the
map exists (a glob must match) and that every tests/x.py::Class::test it
names is defined in that file.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hets

The checker now reads `path`: `name`, `name` and requires each name to be
defined or assigned in that file (or to be a key of a .json file, which is
how a ratchet is named against docs/stabilization/baseline.json). A
`file::Class::test` must be a test defined inside that class.

Map: compound rules split into one sentence per row; partial enforcement
narrowed or marked; whole-file citations replaced by specific tests; the
Step and persistent-worker rows marked as unenforced; the builtin owner is
resolve_sub_workflow_reference.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…their modules

Fourteen rules from the 4c triage table now live in the module or function
docstring that owns them. Docstrings only; the surface snapshot is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…list claim narrowed

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dkackman and others added 14 commits October 1, 2026 14:39
The root keeps only the triage's keep rows: the overview, the common
commands plus the unit-test line, a "where things are" block that sends an
agent to docs/ARCHITECTURE.md before grepping (with the worker-restart and
builtin-vs-workflows facts), the plugin paragraph with every skill named,
the security rules with the two CodeQL edit-time lines, and three
"before you edit" gotchas, each ending at its owner. Everything else is in
a doc, a docstring or a seam-map row, per
docs/stabilization/phase-4-surveys/claude-md-triage.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two UI texts pointed at the deleted cartesian-product gotcha; they now
cite docs/WORKFLOW_GUIDE.md. The map's confinement row names
LibraryPath and the security validators, the step-cache row names
memory/clear, and two rows say what their test pins. CLAUDE.md drops
the map section list (untested drift); library.py's docstring no longer
says builtin: resolves in workflow.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ns becomes a pointer

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude_md_lines re-baselined 957 -> 129 (root 106, ui 12, dw_mcp 8,
dw/server 3). Hot zone back to the standing entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs/ARCHITECTURE.md maps 82 concepts to their owning module, rule and
enforcement, pinned by tests/test_architecture_map.py. The four
CLAUDE.md files go from 957 to 129 lines per a reviewed 221-row triage
(docs/stabilization/phase-4-surveys/claude-md-triage.md); 14 rules moved
into their modules' docstrings; copilot-instructions is a pointer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 4c merge kept the docstring destinations develop carried from the
cherry-picked 0a1876c; 4c no longer needs them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Stage C says it reverses stage B's no-waiver rule on purpose, that only
the hook ties a baseline raise to arch-approved, reads the hot zone from
origin/develop, and unparks what the freeze parked. 4d keeps
arch_metrics.py in the hot zone permanently and records for_each memory
as a new baseline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Harness stage C is committed (harnest 19a8580), so FREEZE comes off
develop. hot-zone.txt keeps scripts/arch_metrics.py permanently and
drops docs/stabilization/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Metrics equal to the 4c baseline (re-baseline is a no-op). Workflow
LCOM4 1, CLAUDE.md 129 lines, harness stage C at harnest 19a8580.
Records the candidate checks for the kept gotchas, the six unenforced
seam-map rules, stage C's known gaps, and the host-dependent template
tests on an MPS Mac as follow-ups.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
two-stage cold 332 s (the post-deploy encoder stall, as at gate 3),
cached 0.92 s; for_each 38.0 s cold / 1.65 s cached with the first
memory reading; assemble-and-score (concat_videos) 6.1 s.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dkackman
dkackman merged commit 13670b5 into master Oct 2, 2026
19 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