Releases: RapierCraftStudios/ForgeDock
Releases · RapierCraftStudios/ForgeDock
Release list
v1.5.1
What's Changed
- Fix: derive-finding-milestone.sh close-verb regex lacks word boundary, matches substrings by @RapierCraft in #2671
- Fix: isSourceRepoSelf case-sensitive path compare misfires on case-insensitive FS by @RapierCraft in #2672
- Refactor: extract duplicated atomic symlink-install sequence in journey.mjs by @RapierCraft in #2673
- Refactor: decompose oversized forge() per-file loop in journey.mjs by @RapierCraft in #2688
- Fix: architect skip path (chore:/docs: titles) strands issues at needs-human by @RapierCraft in #2691
- fix(cli): NFC-normalize path operands in samePathOrUnder for darwin NFC/NFD parity by @RapierCraft in #2694
- fix(scripts): convert bare drive path to file:// URL before ESM import in build-knowledge-index by @RapierCraft in #2695
- fix(journey): close rename-readback TOCTOU in atomicSymlinkInstall (#2679) by @RapierCraft in #2693
- Fix: document per-volume-vs-per-OS limitation in samePathOrUnder (#2675) by @RapierCraft in #2696
- refactor(scripts): dedupe jq slugify expression in derive-finding-milestone.sh by @RapierCraft in #2697
- Deploy staging → main: path-safety, TOCTOU, and pipeline fixes by @RapierCraft in #2699
Full Changelog: v1.5.0...v1.5.1
v1.5.0
What's Changed
- Refactor: extract evidence-gate block from checkLabelTransition() by @RapierCraft in #2464
- Fix: phase-registry drift check misses entirely-absent PHASE_MARKERS keys by @RapierCraft in #2469
- fix(tests): guard ENOTDIR regression test's symlinkSync with EPERM/EACCES skip by @RapierCraft in #2473
- fix(orchestrate): anchor P3 batching safety-exclusion on word boundaries, strip attribution boilerplate by @RapierCraft in #2471
- Fix: anchor parseSatelliteRepos repo-key regex to YAML key boundary by @RapierCraft in #2475
- fix(review-pr): derive priority:* label from Severity, not Confidence by @RapierCraft in #2472
- fix(runner): append non-empty stderr on CLI-backend success instead of dropping it by @RapierCraft in #2476
- docs(decisions): auto-ADRs from TRAJECTORY decisions (#2447) by @RapierCraft in #2486
- fix(protocol): validate.js never checks REMEDIATION Re-gate outcome against reGateOutcomeValues by @RapierCraft in #2489
- fix(cli): update flow falls back to relink + npm instructions on dirty source-repo clone by @RapierCraft in #2488
- Refactor: split ~407-line runIssue() into separable helpers by @RapierCraft in #2495
- fix(orchestrate): issue-dedup.sh --exclude so P3 batch issues don't collide with their own members by @RapierCraft in #2494
- Fix: doctor --fix now overwrites stale regular-file command copies by @RapierCraft in #2497
- Fix: Layer 1 file extraction scoped to deliverables headings, not whole-body scrape by @RapierCraft in #2500
- fix(review-pr): stamp Code branch and derive milestone for review-findings by @RapierCraft in #2511
- Fix: quote GH_REPO placeholder in phase-3-dependency.md Layer 1 call site by @RapierCraft in #2526
- fix: add positive-path test for pre-joined single-token -R argv form by @RapierCraft in #2528
- fix(scripts): harden derive-finding-milestone.sh stderr isolation and array expansion by @RapierCraft in #2527
- fix(runner): sanitize appended stderr and fix empty-.result leading newline (#2522) by @RapierCraft in #2531
- fix(cli): wrap relinkAndHint() in isSourceRepoSelf path to avoid misleading fast-forward error by @RapierCraft in #2529
- fix(orchestrate): dispatch engine-first run-issue via backgrounded Bash, not blocking wait by @RapierCraft in #2535
- fix: atomic tmp+rename for doctor-fix non-manifest copy repair by @RapierCraft in #2538
- fix(review-pr): check severity-to-priority.sh exit code at both call sites by @RapierCraft in #2536
- Fix: gh api failures indistinguishable from empty results in extract-affected-files.sh by @RapierCraft in #2544
- fix(review-pr): P3 review findings — commands/review-pr.md, commands/review-pr-staging.md (batch #4) by @RapierCraft in #2556
- Fix: back up stale command copy before doctor --fix overwrites it by @RapierCraft in #2557
- feat(engine): auto-resume on session-limit hit — pause in-process and retry when usage cap resets by @RapierCraft in #2555
- fix(orchestrate): anchor attribution-strip gsub to per-field generator shape (#2477) by @RapierCraft in #2552
- fix(orchestrate): re-fetch updatedAt before code-branch repair guard's body write by @RapierCraft in #2563
- fix(tests): describe .tmp write failure precisely, not mid-write by @RapierCraft in #2572
- Fix: parseSessionLimitResetEpochMs accepts out-of-range hour values via modulo instead of rejecting by @RapierCraft in #2574
- Fix: orphaned .tmp file on copyFile failure in doctor-fix atomic repair path by @RapierCraft in #2581
- fix(orchestrate): fail closed when updatedAt re-fetch fails in code-branch repair guard by @RapierCraft in #2576
- fix(scripts): harden GH_STDERR_TMP permissions and add trap cleanup in derive-finding-milestone.sh by @RapierCraft in #2578
- docs(decisions): auto-ADRs from TRAJECTORY decisions (#2560) by @RapierCraft in #2588
- fix(scripts): harden GH_STDERR_TMP permissions and trap cleanup in classify-lane.sh and doctor-pipeline-state.sh by @RapierCraft in #2592
- Fix: PR base-ref value command-substitution risk in repair guard gh issue edit body (#2584) by @RapierCraft in #2594
- Fix: batch P3 review findings — bin/journey.mjs doctor-fix repair path (#2566) by @RapierCraft in #2596
- fix(scripts): harden GH_STDERR_TMP mktemp idiom in forge-run.sh with chmod 600 + trap cleanup by @RapierCraft in #2602
- Fix: printf trailing newline in repair guard comment bodies (#2598) by @RapierCraft in #2605
- Fix: saveCopiedManifest shares unsuffixed .tmp path across concurrent forge() invocations by @RapierCraft in #2609
- Fix: pid-suffixed manifest tmp sibling can be orphaned on process crash by @rapiercraft-forgedock[bot] in #2622
- Remediation should auto-merge to staging on APPROVED, not require a manual merge by @rapiercraft-forgedock[bot] in #2623
- Fix: sibling symlink-relink branches share literal .tmp path, losing concurrent process gets uncaught EEXIST by @RapierCraft in #2618
- fix: M7 auto-land bar keys on live baseRefName, not caller-overridable PR_BASE by @rapiercraft-forgedock[bot] in #2633
- fix: re-read-and-merge manifest before final save to close last-writer-wins race by @rapiercraft-forgedock[bot] in #2635
- Fix: literal 'null' baseRefName reaching relaxed auto-land branch by @rapiercraft-forgedock[bot] in #2636
- fix(tests): pre-seed prior manifest content in journey.test.mjs write-failure regression test by @rapiercraft-forgedock[bot] in #2639
- fix(review-pr): add manual-merge fallback to standalone non-main park comment by @rapiercraft-forgedock[bot] in #2641
- Fix: correct stale PR_BASE reference to LIVE_BASE_REF in remediate.md Phase M7 by @rapiercraft-forgedock[bot] in #2640
- fix(orchestrate): single-instance orchestrator lease + interrupt reaping for backgrounded engine dispatch by @rapiercraft-forgedock[bot] in #2638
- Fix: Windows MSYS symlinks unreadable — verify traversability, fall back to copy; prune stale extensionless entries by @rapiercraft-forgedock[bot] in #2645
- fix(orchestrate): cascade discovery lacks batch-start (T0) scope by @RapierCraft in #2647
- Fix: tmp-indirect fresh-install symlink in journey.mjs to avoid uncaught EEXIST by @RapierCraft in #2648
- fix(orchestrate): make classify-lane mandatory for Step 4C cascade findings by @RapierCraft in #2649
- fix(orchestrate): guard Step 3D.1 BATCH_ID generation on FORGE_COORD_ISSUE (#2642) by @RapierCraft in #2650
- Fix: linkPipelineScripts() non-tmp symlink race (review finding — PR #2618) by @RapierCraft in #2651
- Fix: missing local declarations in check_orchestrator_lease() (#2643) by @RapierCraft in #2652
- docs(orchestrate): document accepted-risk decision on spoofed FORGE:LEASE comment DoS surface by @RapierCraft in #2653
- Fix: close residual TOCTOU window in forge() manifest final save by @RapierCraft in #2654
- Fix: resolve relative symlink target against link dir, not cwd (bin/journey.mjs) by @RapierCraft in #2658
- ...
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: p...
v1.3.0
What's Changed
- Fix: validate FORGE_LABEL_MAP value before gh --add-label by @rapiercraft-forge[bot] in #853
- chore(scripts): remove dead FORGEDOCK_SCRIPTS/HOME exports from classify-lane.sh by @rapiercraft-forge[bot] in #854
- Fix: validate adaptive_scripts.directory stays within repo root by @rapiercraft-forge[bot] in #855
- fix(installer): remove Windows copy-mode command files on uninstall by @rapiercraft-forge[bot] in #857
- Fix: guard post-loop i += 2 in stripJsonc() block comment handler by @rapiercraft-forge[bot] in #858
- Fix: guard against duplicate FORGE_HOME export when removeForgeHomeFromProfile fails by @rapiercraft-forge[bot] in #859
- Fix: use escape-aware regex in removeForgeHomeFromProfile() to handle paths with special chars by @rapiercraft-forge[bot] in #860
- fix(installer): add explicit no-match guard in injectManagedBlock() (#851) by @rapiercraft-forge[bot] in #861
- fix(installer): escape owner/repo/branch in forge.yaml template by @rapiercraft-forge[bot] in #862
- docs(architecture): add Playwright MCP open-core boundary note by @rapiercraft-forge[bot] in #889
- feat(installer): register + verify Playwright MCP in bin/forgedock.mjs by @rapiercraft-forge[bot] in #892
- Feat: expose Playwright perf/console/network as quality signals in validate and review by @rapiercraft-forge[bot] in #891
- Docs+Doctor: document Playwright MCP as guaranteed dependency, add doctor check, qa-sweep guard by @rapiercraft-forge[bot] in #890
- Fix(doctor): split mcpReadable into fileReadable + hasMcpServers by @rapiercraft-forge[bot] in #909
- Fix: pre-create milestone branches before wave to eliminate feature-lane branch race (#901) by @rapiercraft-forge[bot] in #908
- Fix: scope MCP AGPL clearance to linking-based contamination by @rapiercraft-forge[bot] in #914
- Fix: normalize REPO_PATH in adaptive bounds check (trailing-slash false positive) by @rapiercraft-forge[bot] in #915
- Fix: exclude CLOSED-unmerged PRs from orchestrate 4C.5 lane-consistency check by @rapiercraft-forge[bot] in #918
- docs(orchestrate): document bash 4+ requirement for Step 4A.pre.0 declare -A by @rapiercraft-forge[bot] in #922
- Docs: distinguish inbound vs outbound contamination direction in MCP boundary section by @rapiercraft-forge[bot] in #921
- chore(meta): improve README badges and npm package discoverability by @RapierCraft in #971
- fix(devdocs): replace 'process-isolation' with 'boundary-isolation' in MCP boundary section by @RapierCraft in #966
- Feat: Package ForgeDock as Claude Code plugin for marketplace distribution by @RapierCraft in #976
- feat(community): add Discussions section to README and seed content by @RapierCraft in #977
- Feat: Generate shareable pipeline run summary after /work-on completion by @RapierCraft in #981
- Feat: Add VitePress documentation site with GitHub Pages auto-deploy by @RapierCraft in #984
- Feat(autopilot): cron mode via GitHub Actions for continuous repo health by @RapierCraft in #982
- Feat(commands): /upgrade-deps — autonomous dependency upgrade pipeline (#959) by @RapierCraft in #983
- Feat(review-pr): automated new-contributor onboarding in PR comments by @RapierCraft in #988
- fix(docs): update Quick Start curl URL to milestone branch by @rapiercraft-forge[bot] in #1001
- fix(commands): upgrade-deps Phase 1A else-branch conflates skip reasons (#993) by @rapiercraft-forge[bot] in #1002
- Feat: Add optional attribution link to FORGE annotation comments by @rapiercraft-forge[bot] in #1006
- fix(docs): align CONFIG.md branding read pattern to use literal newline by @rapiercraft-forge[bot] in #1009
- Feat: Cursor adapter for ForgeDock pipeline (#964) by @rapiercraft-forge[bot] in #1013
- Feat: Universal shell-script entry point for non-Claude agents (forge-run.sh) by @rapiercraft-forge[bot] in #1014
- Feat: Aider adapter for ForgeDock pipeline (#963) by @rapiercraft-forge[bot] in #1015
- fix(scripts): replace no-op ts() fallback with static safe default in forge-run.sh by @RapierCraft in #1019
- fix(scripts): remove dead GH_REPO_FLAG variable in forge-run.sh by @RapierCraft in #1023
- Feat: OpenCode adapter for ForgeDock pipeline by @RapierCraft in #1026
- Feat(config): add trigger_on_merge/trigger_paths/auto_run fields to satellite schema by @rapiercraft-forge[bot] in #1028
- Feat(templates): add cross-repo-trigger.yml GitHub Actions workflow template by @rapiercraft-forge[bot] in #1029
- Feat(sync-ecosystem): add 'trigger' subcommand for incoming cross-repo dispatch by @rapiercraft-forge[bot] in #1032
- fix(forge-stats): reclassify sync-ecosystem.md from Utility to Specialist by @rapiercraft-forge[bot] in #1035
- Ship: Playwright MCP — first-class browser harness by @rapiercraft-forge[bot] in #1711
- fix(security): add secrets/ to .gitignore so bot-token PEM can't be committed by @rapiercraft-forgedock[bot] in #2129
- docs(protocol): correct stale reserved-type counts (13/16 vs actual 20) in headers by @rapiercraft-forgedock[bot] in #2130
- fix(hooks): widen Rule 5 find-root guard for trailing-slash/dot root tokens (#2113) by @rapiercraft-forgedock[bot] in #2131
- Fix: dead links fail every VitePress build — docs site has never deployed by @rapiercraft-forgedock[bot] in #2132
- docs: fix eval baseline link + command-count and branding drift sweep by @RapierCraft in #2134
- Fix: FORGE:STATE codec does not escape <!-- comment opener (emit.js parity) by @RapierCraft in #2136
- feat(geo): add llms.txt and llms-full.txt for AI-search discoverability by @RapierCraft in #2138
- feat(seo): VitePress SEO baseline — sitemap, canonical hostname, og/twitter meta by @RapierCraft in #2139
- fix(ci): replace broken actions-dco with inline git-log DCO check by @RapierCraft in #2135
- chore(brand): unify homepage/social metadata so every surface funnels to the docs site by @RapierCraft in #2147
- chore(protocol): add CHANGELOG and version-bump policy for schema additions by @RapierCraft in #2146
- Ship: Developer Experience & Distribution by @rapiercraft-forge[bot] in #1712
- fix(docs): derive SITE_HOSTNAME from base config to prevent drift by @RapierCraft in #2149
- docs(readme): lead with concrete value, add prerequisites callout, compress hero GIF by @RapierCraft in #2152
- test(protocol): add CARD conformance fixtures and validate() coverage by @rapiercraft-forgedock[bot] in #2153
- fix(cli): update self-updates global npm installs, guards persistHome downgrade, prunes orphans by @rapiercraft-forgedock[bot] in #2154
- fix(ci): quote workflow_dispatch limit input via env: indirection in forgedock-autopilot.yml by @rapiercraft-forgedock[bot] in #2156
- fix: generalize transformHead routePath for nested index pages by @rapiercraft-forgedock[bot] in #2160
- fix: avoid unsafe quote-splicing in upgrade-deps.md jq example by @Rapie...
v1.2.0
What's Changed
- Fix: quote argument-hint frontmatter values for Copilot CLI compatibility by @RapierCraft in #2008
- feat(engine): support Claude Code CLI as an execution backend so forgedock run doesn't require ANTHROPIC_API_KEY by @RapierCraft in #2009
- feat(init): use local Claude Code CLI for AI enrichment when ANTHROPIC_API_KEY is absent by @rapiercraft-forgedock[bot] in #2015
- fix: promote /review-pr-staging from 'extras' to 'core' install tier by @rapiercraft-forgedock[bot] in #2040
- fix(ci): add concurrency guard and rollback runbook to publish.yml by @rapiercraft-forgedock[bot] in #2042
- fix(cli): error on missing --backend/--model/--max-iterations value instead of silent fallback by @rapiercraft-forgedock[bot] in #2041
- fix(init): add FORGEDOCK_INIT_BACKEND override for AI enrichment ladder by @RapierCraft in #2045
- test(runner): assert exact CLI invocation content in runCliBackend by @RapierCraft in #2044
- Fix: enforce read-only CLI enrichment with --allowedTools instead of --dangerously-skip-permissions by @RapierCraft in #2043
- Fix: warn when --model/--max-iterations are dropped on cli backend by @RapierCraft in #2046
- Fix: /review-pr resolves verify-*.sh scripts via unset $FORGE_HOME (incomplete #1984 fix, closes remaining #2035 gaps) by @RapierCraft in #2048
- fix(ci): npm ci before tests and conventional-commit-aware version bump in publish.yml by @RapierCraft in #2051
- fix(engine): thread optional backend/model override through run-issue engine by @RapierCraft in #2050
- Fix: enrich() never forwards its injectable env option to enrichViaApi by @RapierCraft in #2052
- fix(runner): cache CLI-availability probe per cwd to avoid redundant claude --version spawns by @RapierCraft in #2056
- Fix: deterministically block find rooted at / or a drive mount (#2034) by @RapierCraft in #2049
- fix(engine): forward command spec to cli backend via --append-system-prompt-file by @RapierCraft in #2060
- fix(engine): surface discoverability notice when auto backend silently prefers claude CLI over ANTHROPIC_API_KEY by @RapierCraft in #2063
- fix(docs): sync File Resolution Discipline section to canonical docs/spec/review-protocol.md by @RapierCraft in #2065
- feat(attribution): brand pipeline output with ForgeDock signature, suppress Claude Code attribution by @RapierCraft in #2064
- fix(engine): fail fast on invalid --backend instead of retrying as transient by @RapierCraft in #2066
- fix(security): scrub ANTHROPIC_API_KEY from CLI-backend spawnSync child env by @RapierCraft in #2068
- fix(hooks): close find-root guard empty-quote injection bypass by @RapierCraft in #2067
- refactor(engine): extract shared resolveBackendLadder helper by @RapierCraft in #2070
- fix(init): resolve P3 review findings — bin/init-enrich-cli.mjs (batch #2) by @RapierCraft in #2071
- fix(engine): align backend validation wording and unify CLI-spawn test seams by @RapierCraft in #2074
- fix(engine): import VALID_BACKENDS from runner.mjs instead of duplicating by @RapierCraft in #2078
- fix(runner): P3 review findings batch — cache TTL/size bound + temp-dir try/finally scope (#2062) by @RapierCraft in #2080
- chore(runner): make VALID_BACKENDS export genuinely read-only by @RapierCraft in #2081
- Fix: /issue must not require user confirmation before creating by @RapierCraft in #2082
- fix(orchestrate): close coordination issue (claims board) after batch by @RapierCraft in #2083
- fix(orchestrate): correct overstated similarity claim in Step 5C claims-query comment by @RapierCraft in #2092
- feat(issue): add programmatic invocation contract to /issue by @RapierCraft in #2093
- fix(issue): harden /issue programmatic arg-parser (unknown-flag + comma labels) by @RapierCraft in #2098
- docs: document /issue create-hook as required path, forbid raw gh issue create by @RapierCraft in #2099
- refactor: route pipeline issue creation (milestone/orchestrate/decompose) through /issue create-hook by @RapierCraft in #2100
- refactor(commands): route audit/finding-tool issue creation through /issue create-hook by @RapierCraft in #2102
- refactor(commands): route review-finding issue creation through /issue create-hook by @RapierCraft in #2101
- refactor: route automation-driven issue creation through /issue create-hook by @RapierCraft in #2104
- refactor(pipeline-health): route proposal issue creation through /issue create-hook by @RapierCraft in #2103
- fix(pipeline-health): harden /issue call-sites (escape $SLUG injection + config propagation) by @RapierCraft in #2109
- fix: /issue programmatic arg-parser robustness + injection-safety (P1) by @RapierCraft in #2108
- Fix: review dispatch mandates Task tool and forbids Agent — unsatisfiable when only Agent exists by @RapierCraft in #2111
- Deploy: staging -> main (31 commits: /issue hardening, pipeline-health robustness, init-enrich CLI) by @RapierCraft in #2112
Full Changelog: v1.1.11...v1.2.0
v1.1.11
What's Changed
- Fix: resolveGitRoot returns forward-slash path on Windows instead of normalized native path by @RapierCraft in #1987
- Fix: danger-zones.mjs spawnSync migration drops git stderr from error warnings by @RapierCraft in #1985
- Fix: auto-merge auto-land bar counts unauthenticated PR comments as approvals by @RapierCraft in #1986
- Fix: transition-label.sh post-removal verification masks API failures as success by @RapierCraft in #1988
- fix: doctor --fix inflates fixesApplied counter via shared installRepairRan flag (#1975) by @RapierCraft in #1989
- Fix: remove runaway find / -iname classify-lane.sh via deterministic script resolution by @RapierCraft in #1993
- Fix: transition-label.sh pre-removal CURRENT_ISSUE_LABELS fetch masks API failure by @RapierCraft in #1994
- Fix: transition-label.sh --validate mode CURRENT_LABELS fetch masks API failure by @RapierCraft in #1996
- Feat: add version command and --version/-v flag with latest-version check by @RapierCraft in #1995
- feat(journey): writeForgeYaml emits all 16 optional sections from forge.yaml.example by @RapierCraft in #1998
- Fix: ISSUE_LABELS fetch in validate.md masks API failure, silently skips finding-lifecycle transition by @RapierCraft in #1999
- feat(cli): add npx forgedock config migrate to backfill forge.yaml optional sections by @RapierCraft in #2000
- Staging rollup: version command, writeForgeYaml sections, label-fetch reliability fixes by @RapierCraft in #2001
Full Changelog: v1.1.10...v1.1.11
v1.1.10
What's Changed
- fix(install): adopt pre-manifest regular-file copies silently on update by @RapierCraft in #1980
Full Changelog: v1.1.9...v1.1.10
v1.1.9
What's Changed
- fix(ci): align ci.yml node-version with publish/eval (24) by @RapierCraft in #1854
- Fix: types.js CARD comment omits colon (unparseable in that form) by @RapierCraft in #1855
- Fix: card.kind.toUpperCase() can crash recall on malformed ledger line by @RapierCraft in #1857
- Fix: danger-zones execSync with interpolated repoPath — use spawnSync array by @RapierCraft in #1856
- fix(pipeline): strip markdown emphasis before parent-reference regex match by @RapierCraft in #1864
- Fix: propagate workflow:awaiting-merge exclusivity to recover-orphans and cleanup by @RapierCraft in #1866
- perf(work-on): always fork review + quality-gate to sub-agents to stop prompt-cache escape by @RapierCraft in #1870
- Fix: commands/cleanup.md Phase 4B P3 Batch Sweep diverges from orchestrate's batching rule (#1828) by @RapierCraft in #1863
- Fix: ACCEPTANCE_CHECK target=/matcher= parsing breaks on multi-word/piped shell command values by @RapierCraft in #1869
- Fix: rename chains not resolved transitively in recall.mjs by @RapierCraft in #1871
- Fix: peer-claim self-exclusion grep no-op — false self-overlap on resume (#1841) by @RapierCraft in #1865
- Fix: template-resolution guard for review-pr-agents — no more silent solo-review degradation by @RapierCraft in #1867
- feat(orchestrate): human-gated idle/backpressure policy — pause and report instead of net-negative cascade churn by @RapierCraft in #1875
- Fix: scope transition-label.sh needs-human clear to awaiting-merge by @RapierCraft in #1873
- fix(cli): restore overwrite-confirmation gate on config pickup (#1850) by @RapierCraft in #1877
- Feat(config): add agents.default_model to forge.yaml for main-agent model override by @RapierCraft in #1872
- perf(work-on): stop redundant GitHub re-reads, gate heartbeats behind orchestration flag by @RapierCraft in #1878
- feat(config): add agents.subagent_model to forge.yaml for sub-agent model override by @RapierCraft in #1886
- fix(work-on): correct non-functional Haiku model-tier claim, foreground effort:low (#1827) by @RapierCraft in #1888
- Fix: retag review-pr-agents/ and orchestrate/ sub-phase files as install:core by @RapierCraft in #1889
- Fix: danger-zones spawnSync timeout/signal kill collapses to 'exit code null' by @RapierCraft in #1891
- perf(orchestrate): forward same-file current-state brief to serialized DAG successors by @RapierCraft in #1898
- feat(cli): surface uninstall + help in post-install output by @RapierCraft in #1897
- Fix: anchor ACCEPTANCE_CHECK extraction against description= field hijack by @RapierCraft in #1896
- fix(orchestrate): stop using needs-human as a domain-based pre-staging merge gate by @RapierCraft in #1899
- Feat: first-class remediation mode (/work-on --remediate) by @RapierCraft in #1900
- feat(installer): detect and warn when install path resolves into an ephemeral npm/npx cache directory by @RapierCraft in #1905
- feat(installer): environment detection module (platform/WSL/shell) + preflight reporting by @RapierCraft in #1906
- perf(orchestrate): add per-batch token budget to Step 4C cascade control (#1858) by @RapierCraft in #1907
- fix(installer): restore pipeline scripts install step, expand CLI banner by @RapierCraft in #1911
- feat(orchestrate): terse narration mode + model-tiering cross-reference (#1862) by @RapierCraft in #1919
- feat(installer): warn on WSL vs Windows cross-environment install conflicts by @RapierCraft in #1914
- Fix: case-sensitivity inconsistency in cross-env install detection regexes by @RapierCraft in #1920
- feat: add known-slow-test skip config to prevent /work-on stall-on-hanging-suite by @RapierCraft in #1921
- fix(orchestrate): add Phase 3 completion gate — materialize DAG before dispatch by @RapierCraft in #1924
- Fix: transition-label.sh silently swallows stale-label removal failures by @RapierCraft in #1923
- Fix: GitHub App install provides no value — honest copy, doctor check, docs by @RapierCraft in #1928
- Fix: PREFIX truncation cuts into quoted target/matcher when value contains literal description= by @RapierCraft in #1925
- Fix: update command gives real version check for npx installs by @RapierCraft in #1922
- Fix: add timeout guard to WSL UNC path probes in detectCrossEnvInstall by @RapierCraft in #1930
- Fix: linkPipelineScripts() content-comparison on copy-fallback path (#1916) by @RapierCraft in #1933
- fix(orchestrate): enforce concurrency cap on Phase 4 dispatch by @RapierCraft in #1934
- fix: remove dead WSL_DISTRO_NAME fallback in detectWSL /proc/version branch by @RapierCraft in #1938
- fix(orchestrate): SURFACE_FILE_MEMBERS reset comment incorrect — declare -A does not clear existing array by @RapierCraft in #1939
- Fix: compareVersions() no longer coerces prerelease segments to 0 by @RapierCraft in #1940
- docs: reconcile project-scoped install claims with always-global behavior by @RapierCraft in #1942
- Fix: transition-label.sh exit-1 on persistent failure skips awaiting-merge needs-human clear by @RapierCraft in #1941
- Fix: cap fetchLatestVersion() response body at 64KB by @RapierCraft in #1951
- Fix: drop file-overlap DAG edges from predecessors with no conflicting code by @RapierCraft in #1950
- fix(hooks): session-start nudge tracking uses resolved git root (#1927) by @RapierCraft in #1952
- Fix: token-budget report row uses $ currency sigil for a non-dollar metric by @RapierCraft in #1956
- Feat: severity-banded fix cards + rotating logo taglines by @RapierCraft in #1953
- feat(update): show diff-aware changelog summary on update by @RapierCraft in #1958
- feat(install): write machine-readable install-receipt.json by @RapierCraft in #1959
- feat(install): persistent ~/.forge/ toolset home with npm-cache migration by @RapierCraft in #1960
- feat(cli): proactive demo offer + rich re-entry dashboard by @RapierCraft in #1961
- Feat: doctor --fix auto-remediation flag by @RapierCraft in #1963
- docs: clarify parseInt-only scope of compareVersions() (#1949) by @RapierCraft in #1965
- Fix: makeIo() gh/git exec has no timeout — status dashboard can hang by @RapierCraft in #1967
- fix: reframe tautological sibling-projects subtest in session-start.test.mjs by @RapierCraft in #1966
- Fix: renderLogo tagline lookup leaks Object.prototype members by @RapierCraft in #1968
- fix(cli): wire tagline and fixCard severity call sites by @RapierCraft in #1970
- Fix: stepHeader STEP_STATUS lookup leaks Object.prototype members by @RapierCraft in #1971
- fix(ci): allowlist maintainer identities in DCO check by @RapierCraft in #1972
- test(doctor): add --fix coverage for Check 7 (GitHub workflow labels) by @RapierCraft in https://github.com/RapierCraftStud...
v1.1.8
What's Changed
- fix(autopilot): resolve safety-rule contradictions and P0-override bypasses by @rapiercraft-forge[bot] in #1758
- feat(quality-gate): wire-through proof for guards; doctor checks fail closed by @rapiercraft-forge[bot] in #1762
- fix(pipeline): wire validated/false-positive verdicts into finding lifecycle by @rapiercraft-forge[bot] in #1760
- feat(memory): module dossiers — auto-maintained per-module files in devdocs by @rapiercraft-forge[bot] in #1761
- feat(engine): checkable invariants — hook preconditions + run-log temporal rules by @rapiercraft-forge[bot] in #1763
- feat(memory): persistent repo map — blob-hash-keyed orientation index by @rapiercraft-forge[bot] in #1764
- feat(spec-graph): clone-drift check for blocks shared across sibling specs by @rapiercraft-forge[bot] in #1765
- fix(autopilot): delegate label hygiene to /cleanup, document no-direct-mutation rule by @rapiercraft-forgedock[bot] in #1777
- feat(protocol): route all annotation writes/reads through packages/protocol by @rapiercraft-forge[bot] in #1769
- feat(security): systemic secret-gist guard — hook block + doctor audit by @rapiercraft-forge[bot] in #1759
- refactor(autopilot): add per-issue terminal-state verification after dispatch by @rapiercraft-forgedock[bot] in #1778
- feat(orchestrate): claims board — interface claims for claim-level parallelism by @rapiercraft-forgedock[bot] in #1781
- feat(memory): Forge Ledger — incremental knowledge index + forge recall CLI by @rapiercraft-forgedock[bot] in #1782
- fix(autopilot): fix-target selection query contradicts spec ranking by @rapiercraft-forge[bot] in #1784
- feat(quality-gate): learned rules — run gate.d/ and promote recurring patterns by @rapiercraft-forge[bot] in #1786
- feat(memory): auto-ADRs from TRAJECTORY decisions with staleness anchors by @rapiercraft-forge[bot] in #1789
- feat(investigate): dedup via forge recall — verify deltas, not re-derive by @rapiercraft-forge[bot] in #1785
- feat(pipeline-health): confidence calibration from run outcomes by @rapiercraft-forge[bot] in #1787
- Feat: danger zones + persisted co-change matrix from the ledger by @rapiercraft-forge[bot] in #1788
- Feat(spec-doctor): evidence-backed spec evolution PRs gated by eval corpus by @rapiercraft-forge[bot] in #1790
- feat(autopilot): durable cycle state — FORGE:AUTOPILOT_CYCLE + baseline deltas + resume by @rapiercraft-forge[bot] in #1792
- feat(orchestrate): economic scheduling — value/cost DAG order + exploration by @rapiercraft-forgedock[bot] in #1794
- feat(context): danger-zone rule cards in a fixed 400-token context slot by @rapiercraft-forge[bot] in #1797
- feat(ecosystem): pattern exchange — cross-repo stack-tagged pattern feeds by @rapiercraft-forge[bot] in #1798
- feat(autopilot): declared autonomy policy in forge.yaml — headless approval + budget by @rapiercraft-forge[bot] in #1800
- feat(review-pr): provenance-based trust escalation for review breadth by @rapiercraft-forge[bot] in #1799
- refactor(autopilot): genericize recon — config-gated collectors, timeouts, node not python3 by @rapiercraft-forge[bot] in #1805
- fix(autopilot): route issue creation and dedup through canonical paths by @rapiercraft-forge[bot] in #1808
- feat(pipeline): add workflow:awaiting-merge state for remediated + re-approved needs-human PRs (#1810) by @rapiercraft-forge[bot] in #1816
- feat(orchestrate): emit consolidated merge-ready summary + single batch-merge command at human-gated boundary by @rapiercraft-forge[bot] in #1821
- fix(orchestrate): reconcile needs-human DAG-readiness/failure contradiction by @rapiercraft-forge[bot] in #1824
- feat(orchestrate): auto-club cascade P3 review-findings by surface area by @rapiercraft-forge[bot] in #1831
- fix(review-findings): resolve 26 staging review findings blocking deploy by @rapiercraft-forgedock[bot] in #1839
- fix(review): resolve CONFIRMED findings from PR #1838 staging re-review by @rapiercraft-forgedock[bot] in #1840
- Ship staging → main: protocol, ledger, orchestration & autopilot batch (67 commits) by @rapiercraft-forgedock[bot] in #1838
New Contributors
- @rapiercraft-forgedock[bot] made their first contribution in #1777
Full Changelog: v1.1.7...v1.1.8
v1.1.7
What's Changed
- fix(devdocs): mark closed milestones as shipped in architecture.md by @rapiercraft-forge[bot] in #1721
- feat(journey): add GitHub App install prompt to
npx forgedockonboarding by @rapiercraft-forge[bot] in #1723 - fix(ux): reframe forgedock-CLI-not-in-PATH as INFO not WARNING by @rapiercraft-forge[bot] in #1726
- Release: bot rename, onboarding install prompt, architecture updates by @rapiercraft-forge[bot] in #1724
Full Changelog: v1.1.6...v1.1.7