Skip to content

Hotfix: /do planning robustness (maxTurns capability, typed refusal, fenced JSON) and S6 ${{ }} false positive - #94

Merged
AlbSar merged 5 commits into
mainfrom
hotfix/do-brain-2026-10-16
Oct 16, 2026
Merged

AlbSar merged 5 commits into
mainfrom
hotfix/do-brain-2026-10-16

Conversation

@AlbSar

@AlbSar AlbSar commented Oct 16, 2026

Copy link
Copy Markdown
Contributor

Owner live /do test 2026-10-16 failed three ways (proof/DO-TEST-2026-10-16/FINDINGS.md); owner: "Şimdi hotfix".

  • Brain context kinds carry turnLimit; the draft schema omits workInput.maxTurns when no kind's worker supports it. The proposal-path spending classification refuses the error typed (WORK_INPUT_TURN_LIMIT_UNSUPPORTED); previously it surfaced as QUERY_UNEXPECTED_FAILURE.
  • Brain reply wrapped in exactly one Markdown fence is read as its body.
  • S6 config-secret: ${{ … }} GitHub expressions without quoted literals are references, not secrets. Previously every live /do on this repository was refused since alpha.40.

On top of main 680e726 (alpha.42 candidate incl. PR #93).

🤖 Generated with Claude Code

https://claude.ai/code/session_017uL4HZTS1oaVHovPUKoRXP

AlbSar and others added 5 commits October 16, 2026 03:40
…sal on the proposal path; fenced JSON; S6 reads ${{ }} as a reference

The owner's live /do test on 2026-10-16 failed three ways. Owner: "Şimdi hotfix".
- QUERY_UNEXPECTED_FAILURE: Brain set workInput.maxTurns for a Codex worker (no turn-limit capability). compileNativeCodingWorkInput threw untyped in classifyConfiguredRunSpending (budget.ts); creation (create.ts) already mapped it.
  - Now each Brain context kind carries turnLimit ('supported' | 'unsupported', from the CLI registry capability).
  - The draft schema shown to the model omits maxTurns when no supplied kind supports it. The draft contract still accepts it, so stored proposals keep parsing.
  - The proposal path maps the error to WORK_INPUT_TURN_LIMIT_UNSUPPORTED. Without the fix the new test fails.
  - No Brain template change: live config pins template v2.
- BRAIN_OUTPUT_INVALID stage json: a reply that is exactly one ```json/``` fence around the object is read as its body. Any other wrapping still fails at the json stage.
- S6 config-secret false positive on `GITHUB_TOKEN: ${{ github.token }}` (.github/workflows/platform-verification.yml since alpha.40). This refused every live /do worker tree of this repository; live has a temporary exclusion.
  - The assignment expression now captures `${{ … }}` whole.
  - The placeholder table accepts it when it holds no quote or brace, the same shape as the existing {{ }} rule.
  - A quoted literal inside `${{ '…' }}` is still a value and is refused (tested).
  - The worker redactor copy is re-synced.
Targeted: 248 redaction/brain/proposal/native-coding/worker-tree/budget test files pass: 3077 passed, 2 failed. Of the 2 failures, the brain-plan kinds expectation is now updated; the other is the known-env installation-apply-adoption.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017uL4HZTS1oaVHovPUKoRXP
…le scalar (Astra 2584)

The bare `${{ … }}` alternative stopped at the first `}}` without checking the rest of the scalar. As a result `API_TOKEN: ${{ secrets.PREFIX }}<literal>` was accepted as a placeholder. The alternative now matches only when the expression ends the value: whitespace, comma, semicolon, comment, bracket, quote or end of line must follow. Otherwise the older `${…}` alternative captures a non-placeholder value and the line is refused, as before. The worker-tree-gate test covers a glued literal (refused), two adjacent expressions (refused), and an expression followed by a comment or in quotes (clean). The worker redactor copy is re-synced.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017uL4HZTS1oaVHovPUKoRXP
…he line end or a flow delimiter (Astra 2586)

A YAML plain scalar continues after spaces, so '${{ x }} literal', '${{ x }};literal' and '${{ x }} ${{ '\''literal'\'' }}'
were still accepted on the first reference. The lookahead now allows only optional spaces then a # comment or the line end,
or a closing quote, comma or bracket; anything else falls back to the older ${…} capture and is refused. Tests cover the three
negatives plus the clean reference, commented reference and quoted reference.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017uL4HZTS1oaVHovPUKoRXP
…e (Astra 2588)

Instead of adding delimiter exceptions, only one shape is a placeholder: the expression ends the line, optionally followed by
spaces and a space-separated # comment, and the next non-empty line does not continue the plain scalar (it is not indented deeper
than the key's line). The comma/bracket branch and the zero-space # case are gone, so '${{ x }},literal', '${{ x }}#literal'
and an indented continuation line are refused (fail closed). Sibling keys and real comments after a reference stay clean.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017uL4HZTS1oaVHovPUKoRXP
…ions placeholder names a GitHub context (Astra 2590)

- continuesScalar found the assignment's line start by LF only but split the following lines by CRLF/CR/LF, so a lone-CR
  line before the assignment gave a wrong indent and could miss a continuation. The line start, the following lines and the
  value-end lookahead now all use CRLF | CR | LF (YAML 1.2.2 §5.4).
- The placeholder accepts only a GitHub context reference (github|secrets|env|vars|inputs|steps|needs|matrix|runner|job|strategy
  followed by a dotted path). A bare unquoted literal such as ${{ 12345678901234567890 }} or ${{ hunter2hunter2 }} is a value.
Tests: the mixed-CR continuation, the numeric and word literals refused; CRLF/CR-terminated context references clean.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017uL4HZTS1oaVHovPUKoRXP
@AlbSar
AlbSar merged commit 7ea6299 into main Oct 16, 2026
21 checks passed
AlbSar added a commit that referenced this pull request Oct 16, 2026
…ther; run inspection builds its policy authorization once

Owner 2026-10-16: policy v12 (PR #95) goes live with TESLIM-KUYRUGU as one
release. CHANGELOG: alpha.42 is marked live (7ea6299, PR #93 + #94, ledger
v56) and README/README.tr/SECURITY name it as the current pre-release; the
POLICY-V12 text moves to the alpha.43 line with the delivery queue.

After rebasing onto 49e0ddf the composition package measured 7206 lines
(budget 7200, not raised). Run inspection built the same
DispatchPolicyAuthorization three times; it now builds it once, and the queue
observation that only inspection uses moves from queue-view.ts into
inspect.ts. Behaviour is unchanged (run-query, delivery-queue-e2e and the
terminal delivery PTY proof pass).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017uL4HZTS1oaVHovPUKoRXP
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