Skip to content

[QUARANTINED — DO NOT MERGE] Release 1.7.1 - #810

Draft
randlee wants to merge 50 commits into
mainfrom
release/1.7.1
Draft

randlee wants to merge 50 commits into
mainfrom
release/1.7.1

Conversation

@randlee

@randlee randlee commented Oct 12, 2026 •

Copy link
Copy Markdown
Owner

Release 1.7.1

Candidate: release-candidate-v1.7.1 @ 362cfbbe (develop head). Branch release/1.7.1 is identical to the candidate (empty diff).

CHANGELOG [1.7.1] summary

Full notes: CHANGELOG.md [1.7.1].

Readiness preflight: PASSED — Release Preflight run 38200438840 on release/1.7.1 @ 362cfbbe, failed=[] blocked=[]. All six channels (crates_io, github_release, pypi, homebrew, winget, scoop) ready; only release_authorization outstanding (readiness-only). No TestPyPI rehearsal run.

randlee and others added 30 commits October 11, 2026 14:14
chore: merge v1.7.0 release back to develop
Strict token discovery scanned every identifier in a statement, so the
statement's own tag name (autoescape, endautoescape, with, ...) and the
test name after `is` / `is not` (defined, none, divisibleby, ...) were
reported as undeclared tokens, along with the `is` operator itself.
Discovery now drops the leading tag name of a statement, treats `is`
and the capitalised True/False/None literals as keywords, and masks
test names the same way filter names are masked.

Refs #784

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The strict token walker matched expression and statement delimiters
anywhere in the body, including inside `{# ... #}` comments and
`{% raw %}` blocks, so a comment such as `{# bd uses {{name}} #}`
failed strict render and validate with ERR_VAL_UNDECLARED_TOKEN. The
walker now skips comments and raw blocks, which render no references.

Refs #785

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

The JSON output check lived only in the CLI adapter, so the wheel's
compose(), compose_file() and render_loaded_template() returned
malformed JSON bodies that `sc-compose render` rejects. The check
metadata (format by extension, JSON mode from policy over front matter)
moves into sc-composer as RenderCheckMeta::for_request, the CLI uses
it, and the wheel now runs the same check and raises ScRenderError with
the CLI's diagnostic code (ERR_RENDER_JSON_MALFORMED).

Refs #787

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(python): wheel applies the CLI checked-render contract to JSON output (#787)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
chore: install atm-bd-orchestration 0.14.0
No render can silently skip a variable. Undeclared referenced tokens and
referenced-but-unbound variables are always errors in the library, the CLI,
the Python package and bead rendering, and every renderer refuses to print
an undefined value (minijinja SemiStrict), so templates rendered without
validation fail closed too.

- Remove ComposePolicy.strict_undeclared_variables and
  unbound_variable_policy (Rust and Python) and Renderer::refusing_undefined.
- --strict is hidden and accepted as a no-op; --unknown-var-mode governs
  only extra caller variables.
- A declared path covers its parents and children; per-pass caller values
  count as bindings; a missing required variable is reported once.
- Discovery skips block names, Jinja globals and keyword-argument names.
- templates init ignores unbound variables (no caller input).
- Add frontmatter declarations to shipped skill templates, Beads formulas,
  release templates and test fixtures.

Refs #783

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat(bead): support bd-owned variable rendering
docs: correct Beads request contract details
The second `{{ }}` pass re-parsed the `{{{ }}}` pass's output, so values,
raw blocks and expression output could form or hide template syntax
(FUZZ-171-01..09), include defaults were dropped (11), each pass dropped a
trailing newline (12) and a name in both variable maps silently resolved
to the compose value (14).

Source `{{ expr }}` (outside comments, statements, raw blocks and
`{{{ }}}`) is now folded lexically into `{{{ expr }}}` and the formula is
validated strictly and rendered once against one context. In bd mode no
folding happens, so `{{ }}` is plain text and byte-exact. The private-use
marker machinery is deleted. A name in both maps is refused with
BEADS_VARIABLE_KEY_DUPLICATE. sc-composer gains the additive
`validate_expanded_with_context`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
randlee and others added 15 commits October 11, 2026 18:18
The fold ended an expression at the first `}}` outside strings, but the
renderer's lexer only closes a tag while no `(`, `[` or `{` is open, so
`{{ {"a": {"b": 1}} }}` folded into a syntax error. Track bracket depth
and match `}}`, `}}}` and `%}` only at depth zero. Adds fold cases and
end-to-end nested-brace and whitespace-control render tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Re-fuzz of #804 (T-02..T-06):
- `{{%` and `{{#` are a literal `{` before a statement or comment, as the
  renderer lexes them, instead of a folded expression (T-02, T-03).
- An unterminated or malformed `{{` keeps the folded opener, so the render
  fails with a syntax error instead of copying the rest unfolded (T-04).
- `raw`/`endraw` are recognized with minijinja's skip_basic_tag rules (one
  `-`/`+`, ASCII whitespace), so `{%-- endraw %}` and NBSP forms no longer
  end a raw block early (T-05).
- bead.md qualifies bd-mode byte-exactness for expression text holding
  `{%`, `{#` or `{{{` (T-06).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@randlee
randlee requested a review from rand-lee October 12, 2026 03:40
rand-lee
rand-lee previously approved these changes Oct 12, 2026
@randlee
randlee marked this pull request as draft October 12, 2026 05:22
@randlee randlee changed the title Release 1.7.1 [QUARANTINED — DO NOT MERGE] Release 1.7.1 Oct 12, 2026

This branch has not been deployed

No deployments
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.

2 participants