v1.4.0
What's Changed
- fix(cli): add dirty-tree guard before branch switch in forgedock update by @RapierCraft in #2245
- fix(ci): self-reference check-commands.yml in its own paths filters by @RapierCraft in #2246
- fix(ci): gate publish-protocol.yml npm publish behind PROTOCOL_NPM_PUBLISH_ENABLED by @RapierCraft in #2248
- fix(hooks): guard /./ and /../ trailing-slash forms in find root-scan guard by @RapierCraft in #2250
- fix(engine-cli): formatTerminalDiagnostics uses run's effective maxAttempts (#2226) by @RapierCraft in #2252
- fix(ci): SHA-pin first-party actions in codeql.yml by @RapierCraft in #2251
- Fix: Phase 4 --fix DRY_RUN guard placement in /upgrade-deps by @RapierCraft in #2254
- fix(engine): unresolved branch synthesizes ahead=0, escalates to needs-human after 1 attempt by @RapierCraft in #2255
- fix(tests): report win32-skipped router tests as skipped, not passed by @RapierCraft in #2257
- fix(review-pr): resolve CUSTOM_CONVENTIONS before interpolation in welcome comment by @RapierCraft in #2247
- fix(scripts): forge-run.sh die() emits invalid JSON for gh stderr with backslashes/newlines by @RapierCraft in #2260
- fix(orchestrate): scope gen>=2 cascade cap to autonomous cascade, add human-request path by @RapierCraft in #2249
- refactor(protocol): share HTML-comment escaping between engine and protocol package by @RapierCraft in #2262
- fix(journey): handle ENOTDIR per-path in removeOrphans instead of aborting whole persist by @RapierCraft in #2263
- fix(ci): add deploy version guard against squash-merge package.json regression by @RapierCraft in #2266
- fix(cli): forgedock update reports which install it actually updated by @RapierCraft in #2268
- fix(quality-gate): remove private-repo residue from public corpus; close unscoped CI allowlist by @RapierCraft in #2267
- fix(review-pr): welcome-comment gate now enforces documented single-PR-only precondition by @RapierCraft in #2269
- fix(ci): eval-gate.yml omits itself from paths filter by @RapierCraft in #2275
- fix(engine): runCliBackend never claims output above when none was captured by @RapierCraft in #2276
- fix(ci): source banned-token-lint self-test pattern from single job-level env var by @rapiercraft-forgedock[bot] in #2280
- fix(scripts): forge-run.sh json_str() C0 escaping + ACTION_ESCAPED (#2270) by @rapiercraft-forgedock[bot] in #2281
- fix(ci): version-guard.yml fails closed on malformed package.json instead of passing by @rapiercraft-forgedock[bot] in #2279
- fix(engine): CLI_BACKEND_FAILED retried as transient instead of fail-fast by @rapiercraft-forgedock[bot] in #2285
- fix(cli): extract shared npm root -g resolution helper by @rapiercraft-forgedock[bot] in #2283
- fix(orchestrate): accept bare P1/P2/P3 labels alongside priority:P in cascade triage by @rapiercraft-forgedock[bot] in #2282
- fix(ci): five workflows omit themselves from their own paths filter by @rapiercraft-forgedock[bot] in #2284
- fix(ci): pin Node version in version-guard.yml by @rapiercraft-forgedock[bot] in #2287
- fix(ci): rename LINENO to LN and anchor fence/heading detection in side-effect gate by @rapiercraft-forgedock[bot] in #2286
- fix(runner): bound and neutralize untrusted argv content in CLI failure diagnostic by @rapiercraft-forgedock[bot] in #2290
- fix(review-pr): convert welcome-comment body to heredoc by @rapiercraft-forgedock[bot] in #2296
- fix(engine): terminate() writes engine-error for tool failures, not needs-human by @rapiercraft-forgedock[bot] in #2295
- fix(runner): neutralize Unicode bidi-override and C1 control chars in sanitizeArgvForLog by @rapiercraft-forgedock[bot] in #2297
- Fix: dispatch remediation for gated leaf issues, guard unchanged-HEAD re-review by @rapiercraft-forgedock[bot] in #2291
- fix(runner): prevent sanitizeArgvForLog truncation from splitting UTF-16 surrogate pairs by @rapiercraft-forgedock[bot] in #2300
- feat(orchestrate): add orchestration.cascade config surface for cascade admission policy by @rapiercraft-forgedock[bot] in #2299
- fix(orchestrate): both-uncapped cascade warning + review-finding fixes for #2234 by @RapierCraft in #2304
- fix(ci): track true fence nesting depth in check-command-side-effects.sh by @rapiercraft-forgedock[bot] in #2303
- fix(watch): derive workflow label set from labels.json, add findings lane by @RapierCraft in #2306
- fix(ci): scope guard-match in check-command-side-effects.sh to the code block, not the section by @RapierCraft in #2311
- fix(engine): claim and renew a real in-flight lease before phases run by @RapierCraft in #2309
- fix(watch): escape owner/repo in heartbeat GraphQL query + add coverage by @RapierCraft in #2315
- fix(ci): add EOF flush for unterminated fences in class_a_scan by @RapierCraft in #2317
- feat(orchestrate): typed predicate classification + re-resolution engine module by @RapierCraft in #2316
- fix(engine): emit phase progress output for in-flight run-issue runs by @RapierCraft in #2319
- fix(engine): correct resolve.mjs docstring drift re foldNewMatches dispatch path by @RapierCraft in #2322
- fix: three consistency nits in resolve.mjs + phase-4-execution.md mirror (#2320) by @RapierCraft in #2324
- fix(engine): surface CLI session-limit reset time in engine-error terminal detail by @RapierCraft in #2323
- fix(engine): validate leaseRenewIntervalMs < leaseTtlMs in runIssue() by @RapierCraft in #2327
- fix(hooks): allow evidenced workflow:invalid after ready-to-build/building by @RapierCraft in #2330
- Fix: batch P3 findings in bin/engine.mjs (phase-exit symmetry, stall-scanner citation, lease NaN guard) by @RapierCraft in #2335
- Fix: hasInvalidReversalEvidence() requires trusted author on reversal evidence by @RapierCraft in #2334
- fix(tests): rename vacuous lease-renewal test, add real timer-path coverage (#2333) by @RapierCraft in #2336
- fix(hooks): fail closed on gh error for workflow:invalid evidence gate by @RapierCraft in #2354
- Fix: publish.yml self-path trigger can skip the content-change guard on push by @RapierCraft in #2356
- fix(ci): add admission.mjs / bash mirror parity check by @RapierCraft in #2357
- fix(ci): pin actions/checkout and actions/setup-node to SHAs in version-guard.yml by @RapierCraft in #2364
- fix(engine): join in-flight lease renewal before terminate() on the engine-error catch path (#2338) by @RapierCraft in #2362
- feat(orchestrate): pre-flight source-PR triage hint for staging-review findings by @RapierCraft in #2365
- fix(engine): emit INVESTIGATION:INVALID sentinel for INVALID verdicts by @RapierCraft in #2366
- docs(labels): document workflow:engine-error taxonomy split from needs-human by @RapierCraft in #2367
- fix(engine): add backpressure guard to renewLease() against overlapping renewal writes (#2348) by @RapierCraft in #2369
- Fix: publish.yml content-change guard pathspec missing .claude-plugin/ by @RapierCraft in #2371
- docs(work-on): add caveat to CODEC PATH prose about fixed sentinel (#2368) by @RapierCraft in #2372
- fix(ci): pin admission-parity job actions to full commit SHAs by @RapierCraft in #2373
- fix(engine): embed captured CLI output in CLI_BACKEND_FAILED error message by @RapierCraft in #2374
- fix(engine): state-vs-GitHub divergence guard for phase loop (#2352, #2353) by @RapierCraft in #2388
- fix(runner): capture partial CLI output on timeout, not just non-zero exit by @rapiercraft-forgedock[bot] in #2394
- fix(hooks): interactive-engine transcript scraping writes corrupt outputs into run-logs by @rapiercraft-forgedock[bot] in #2395
- feat(engine): record per-phase token usage in run-log events by @rapiercraft-forgedock[bot] in #2396
- refactor(protocol): single-source the FORGE marker registry by @rapiercraft-forgedock[bot] in #2400
- docs(spec): correct eval-run-result.md cost field — billed-token proxy, not USD by @rapiercraft-forgedock[bot] in #2401
- feat(runner): schema-enforced report_result tool — structured phase results by @rapiercraft-forgedock[bot] in #2403
- feat(engine): cover decompose/remediate in the phase table by @rapiercraft-forgedock[bot] in #2410
- feat(runner): prompt-cache-aware scheduling and Batch API infra for latency-insensitive phases by @rapiercraft-forgedock[bot] in #2413
- revert: remove engine-v2-harness milestone PRs (#2403, #2413) from staging — lane misrouting + fixes #2414 by @rapiercraft-forgedock[bot] in #2415
- fix(ci): broaden phase-registry-drift path filter to packages/protocol/src/** by @rapiercraft-forgedock[bot] in #2418
- feat(engine-cli): surface aggregate per-run token usage in formatTerminalDiagnostics by @rapiercraft-forgedock[bot] in #2419
- feat(runner): parse token usage from CLI-backend claude invocations by @rapiercraft-forgedock[bot] in #2421
- fix(runner): parse CLI usage JSON from stdout alone, coerce usage fields numerically (#2427) by @rapiercraft-forgedock[bot] in #2437
- Deploy: staging to main by @rapiercraft-forgedock[bot] in #2449
Full Changelog: v1.3.0...v1.4.0