Skip to content

fix: batch 2026-11-10 (English messages, scanner, #121, redirects, temp delete, stop guards, PRD) — 0.1.115 - #126

Merged
brunoazoulay merged 25 commits into
mainfrom
chore/batch-2026-11-10
Nov 10, 2026
Merged

brunoazoulay merged 25 commits into
mainfrom
chore/batch-2026-11-10

Conversation

@brunoazoulay

Copy link
Copy Markdown
Collaborator

Summary

Batch 2026-11-10, released as 0.1.115 (version bump + CHANGELOG in a separate commit). All 8 items challenger-CONFIRMED, final integration challenger CONFIRMED.

  • English messages: user-facing CONFIRM messages translated to English (incl. Codex sub-agent fan-out).
  • Scanner: security scanner coverage widened to every source language present.
  • Cartographer SessionStart reads large binary files and can consume multiple GiB of RAM #121 cartographer: SessionStart reads bounded, map writes confined.
  • Scratchpad redirect: redirects proven inside the session scratchpad allowed; no sniper demand for temp/scratchpad files outside the project root. Guard case 04 (edit through the real /tmp path of a project-linked file) now passes; case 19 stricter.
  • &>: &> / >&file (and zsh >>&, >&|, >&!) writes ask like > and reach the scratchpad window like >.
  • Temp-dir delete: rm -r strictly inside temp dirs asks instead of blocking.
  • Stop guards (foreground + background): attributed to project code; R3b, each agent held for its own files; sub-agent reports recovered.
  • PRD router recovery: coordinator can repair a schema-invalid router; distinct diagnostics.

Test plan

  • Full suite on the integration HEAD: 4095 pass / 1 skip / 1 fail (multi-rdv-sim › 01-filesize-block-then-comply, under investigation vs main)
  • tsc 0 errors
  • sniper pass, challenger CONFIRMED (per item + final integration)
  • CI green

Known

  • protected-path / PRD / motion still read the legacy redirect list, so &> into a protected path asks instead of being denied.
  • More than ~10 KB of guarded background notifications in one prompt: the 4th notification is not inlined.

Breaking changes

None

Rewrite the French CONFIRM messages shown to the user and the model in
English with the same meaning. The CONFIRM code format and the input the
user types are unchanged. Tests only update their expected strings.
- Scan the JS/TS family (.js, .ts, .tsx, .jsx, .mjs, ...) plus vue/svelte/astro,
  not only .js.
- Per-file language detection, including monorepo subfolders.
- 90 rules: 18 legacy + 72 new (Go, Rust, Ruby, Java, Kotlin, C#, stronger
  PHP/Python/Swift, language-agnostic secrets).
- Additive `coverage` block and per-finding id/cwe/owasp/language fields.
- Legacy output preserved: 0 legacy findings lost, keys unchanged.
- Shared language map in src/util/source-languages.ts.
)

- Check the file extension before any read.
- Read through a file descriptor, capped at FUSE_CARTO_FULL_READ_MAX_BYTES
  (default 1 MiB); devices, FIFOs and sockets are never read.
- Binary-looking oversize files contribute nothing to the map.
- Plugin strings are capped at 200 chars and detached from file buffers.
- Symlinked plugin, agents, skills, commands and hooks directories are not
  followed.
- Map writes go through a temp file + rename, only into non-symlinked
  .cartographer directories; plugin names are sanitised.
- Descriptions are extended to all source languages via comment-syntax
  families (existing descriptions unchanged).
Relax only the file-redirect ask when every redirect target resolves with
certainty inside the payload's scratchpad_dir. A `$S` target counts only
when S is bound once, unconditionally (command start, after `;` or a
newline not ending in an operator), to a literal path; a binding after
`&&` is accepted only behind `cd <literal absolute dir>` that exists and
is enterable at hook time. Everything else keeps today's verdict; without
scratchpad_dir verdicts are identical to main. Blocks unchanged,
SAFE_WRITE_PATHS not widened.
`echo x &> f`, `>& f` and the zsh-only `>>&N`, `>&|N`, `>&!N` forms wrote
files with no prompt because the redirect scanner skipped them or read
them as fd duplication. They now get the same verdict as `>` (ask, or
block on a code file). Plain `>&N` / `N>&M` / `>&-` duplication is
unchanged; `>&$var` asks because its target is unknowable statically.
# Conflicts:
#	src/policy/guards/bash-write.ts
`rm -r` of a literal absolute path strictly inside /var/folders/<x>/<y>/T/
or /var/tmp/ (and /private forms) now falls to the existing rm
confirmation instead of the system-directory block, so an agent can clean
its own temp dirs. Temp roots, any other /var path, `..`, globs,
variables, substitutions, heredocs, symlinked components, mixed targets
and a project inside a temp dir keep today's block; it applies only when
CLAUDE_PROJECT_DIR is set. The trash exemption is unchanged.
…ent reports

Sniper/receipt guards no longer fire for scratchpad or temp files or for
files another agent wrote; real project code is still blocked exactly as
before on Stop and SubagentStop. When a guard emission replaced a
sub-agent's final report, the parent now receives the original report
verbatim (foreground via PostToolUse on the Agent tool, background via
the UserPromptSubmit task-notification turn), appended after the
existing per-prompt context within the hook output limit, with an
explicit notice and the transcript path when it does not fit.
The PRD ownership gate denied every write with "PRD router is malformed
JSON" when apex/prd.json failed the schema, including the coordinator's
repair. The router is now read in three states (absent / invalid JSON /
schema-invalid) with distinct diagnostics at the gate and in
`harness prd status|validate` (exit codes unchanged). The authorized
coordinator may write ONLY the router when the post-write content is
derived with certainty (one operation, one unambiguous chunk, Codex
line semantics) and is valid; anything uncertain keeps the deny. A
write that would turn a valid router invalid or delete it is denied.
@brunoazoulay
brunoazoulay merged commit d301208 into main Nov 10, 2026
1 check passed
@brunoazoulay
brunoazoulay deleted the chore/batch-2026-11-10 branch November 10, 2026 12:00
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