Releases: RapierCraftStudios/ForgeDock
Releases · RapierCraftStudios/ForgeDock
v1.0.17
What's Changed
- Feat: /scope command — complexity estimate before work-on by @RapierCraft in #621
- Feat: /changelog command — auto-generate release notes from FORGE annotations by @RapierCraft in #622
- Feat: /status command — pipeline-wide situational awareness by @rapiercraft-forge[bot] in #620
- Feat: /explain command — plain-English breakdown of FORGE annotations by @RapierCraft in #623
- Feat: /diagnose command — trace pipeline annotation chain and identify failure point by @RapierCraft in #629
- Feat: /replay command — read-only playback of pipeline runs by @RapierCraft in #625
- feat(commands): /resume — context recovery after compaction by @RapierCraft in #624
- Feat: /adopt command — bootstrap existing repos for ForgeDock by @RapierCraft in #627
- Fix: session-start.mjs hook registration in settings.json by @RapierCraft in #631
- chore: merge stranded Wave 1 code into staging (lane routing fix) by @RapierCraft in #640
- Fix: grep -oP not portable on macOS in /adopt issue count (#638) by @RapierCraft in #644
- Fix(adopt): correct phase skip target from Phase 5 to Phase 6 by @RapierCraft in #645
- Fix: remove dead awk CONTRACT extraction in /explain Phase 3 by @RapierCraft in #646
- Fix(adopt): Investigation type maps to 'feature' label instead of 'documentation' by @RapierCraft in #642
- fix(diagnose): correct FORGE:INVESTIGATOR:COMPLETE → INVESTIGATION:COMPLETE in F3/F4 by @RapierCraft in #647
- Fix: emit 'no PRs found' message when changelog range yields empty result by @RapierCraft in #643
- fix(status): replace grep -oP with portable sed for macOS compatibility by @RapierCraft in #641
- Fix: /replay triple-quote injection via env var body pass by @RapierCraft in #648
- Feat: inject ForgeDock behavioral rules into project CLAUDE.md on install by @RapierCraft in #649
- Feat: stub-based command install to reduce context load by ~99% by @RapierCraft in #656
- Fix: add enable/disable/status CLI commands (#608) by @RapierCraft in #660
- Fix: uninstall fully reverses all install side-effects by @RapierCraft in #661
- Feat: forgedock doctor — installation health check by @RapierCraft in #662
- Feat: wire premium install TUI into forgedock.mjs (#605) by @RapierCraft in #664
- feat(devdocs): create devdocs/agent/github-cli-patterns.md — GitHub CLI cheat sheet for pipeline agents by @RapierCraft in #695
- feat(bin): merge /scope command to main — pre-flight complexity estimate (#681) by @RapierCraft in #696
- feat(devdocs): DevDocs v2 frontmatter schema — add lifecycle fields to all template files by @RapierCraft in #697
- Fix: gh api --jq --arg broken pattern in review-pr.md and review-pr-agents.md by @RapierCraft in #698
- Fix: gh gist edit stdin pipe — use temp file in investigate.md by @RapierCraft in #700
- Feat(docs): claude-breakpoints.json — structured registry of known Claude Code version breakpoints by @RapierCraft in #699
- Feat(scripts): transition-label.sh — label state machine with validation by @RapierCraft in #702
- feat(scripts): classify-lane.sh — deterministic lane routing from issue milestone by @RapierCraft in #703
- Feat(scripts): scaffold .forgedock/scripts/ directory and gitignore integration on init by @rapiercraft-forge[bot] in #704
- Feat: validate-pr-target.sh — hard-fail if PR base doesn't match classified lane by @rapiercraft-forge[bot] in #712
- feat(installer): symlink scripts/ to ~/.claude/scripts/ and wire classify-lane.sh into orchestrate.md by @rapiercraft-forge[bot] in #713
- Feat: universal vs adaptive scripts boundary — precedence rules and override semantics by @rapiercraft-forge[bot] in #714
- fix(work-on): branch existence validation + PR_BASE computed before worktree creation by @rapiercraft-forge[bot] in #718
- Feat(commands): /compat-audit — on-demand Claude Code compatibility and feature parity report by @rapiercraft-forge[bot] in #717
- Feat: DevDocs v2 index format + selective loading by @rapiercraft-forge[bot] in #720
- Feat: DevDocs self-dogfooding — scaffold own devdocs/ with v2 schema by @rapiercraft-forge[bot] in #729
- Feat: machine-readable phase checkpoint — deterministic resume without prose parsing by @rapiercraft-forge[bot] in #730
- feat(scripts): forge.yaml learned section and pattern capture (#667) by @rapiercraft-forge[bot] in #728
- feat(work-on): complexity-proportional fast-path — skip phases for simple and investigation tasks by @rapiercraft-forge[bot] in #736
- Feat(commands): /optimize command — generate per-repo adaptive scripts (#668) by @rapiercraft-forge[bot] in #735
- feat(orchestrate): stall detection and structured auto-resume (#683) by @rapiercraft-forge[bot] in #737
- perf(docs): measure and document token savings from per-repo adaptive scripts (#673) by @rapiercraft-forge[bot] in #741
- docs(quality-gate): clarify adaptive behavior and stack-specific checks by @rapiercraft-forge[bot] in #751
- fix(compat-audit): export FORGE_HOME_PATH before Node.js heredoc by @rapiercraft-forge[bot] in #749
- Fix: format-commit.sh template — add TYPE arg to fix SCOPE used as type prefix by @rapiercraft-forge[bot] in #748
- feat(ci): add test gate before npm publish by @rapiercraft-forge[bot] in #750
- Fix: replace hardcoded user-specific paths in devdocs with generic placeholders by @rapiercraft-forge[bot] in #753
- docs(readme): soften benchmark claim to avoid unverifiable specifics by @rapiercraft-forge[bot] in #754
- fix(cli): use os.homedir() instead of process.env.HOME by @rapiercraft-forge[bot] in #755
- fix(scripts): guard -R flag against missing value in classify-lane.sh by @rapiercraft-forge[bot] in #752
- fix(work-on): add FORGE:HEARTBEAT inline at Phase 1/3/5 entry points (#740) by @rapiercraft-forge[bot] in #756
- Fix: gitignore dedup guard uses line-by-line active-line check (#708) by @rapiercraft-forge[bot] in #757
- fix(build): sanitize issue labels before AWK domain matching to prevent injection by @rapiercraft-forge[bot] in #759
- fix(work-on): resolve correction capture owner login via tiered lookup by @rapiercraft-forge[bot] in #758
- fix(work-on): clarify AC for TRIVIAL fast-path — Builder Contract is retained, not skipped by @rapiercraft-forge[bot] in #760
- Fix(compat-audit): use npx forgedock update in breakpoints advisory by @rapiercraft-forge[bot] in #761
- fix(scripts): strip git-invalid chars from classify-lane.sh slug (#707) by @rapiercraft-forge[bot] in #762
- fix(devdocs): remove closed issues #619 and #635 from milestone table by @rapiercraft-forge[bot] in #763
- docs: document yq as prerequisite tooling for forge commands by @rapiercraft-forge[bot] in #764
- fix(hooks): replace ghost enable/disable commands in session-start hook by @rapiercraft-forge[bot] in https://github.com/RapierCraftStudios...
v1.0.16
What's Changed
- chore(package): declare @anthropic-ai/claude-code as peerDependency by @RapierCraft in #690
Full Changelog: v1.0.15...v1.0.16
v1.0.15
Full Changelog: v1.0.14...v1.0.15
v1.0.14
What's Changed
- Feat: add runSteps() live-checklist orchestrator to tui.mjs (#594) by @rapiercraft-forge[bot] in #596
- Feat: render ForgeDock F-monogram as colored half-block art in splash (#593) by @rapiercraft-forge[bot] in #598
- Feat: rebuild all npx forgedock subcommands on runSteps + polished TUI (#595) by @rapiercraft-forge[bot] in #601
- fix(tui): remove xterm-256/screen-256 false-positives from USE_TRUECOLOR by @rapiercraft-forge[bot] in #603
- Release: project-agnostic milestone + launch campaign by @rapiercraft-forge[bot] in #604
Full Changelog: v1.0.13...v1.0.14
v1.0.13
What's Changed
- Fix: copy fallback so npx forgedock works on Windows without symlink permission (#587) by @RapierCraft in #591
- Deploy: staging → main — Windows installer copy fallback (#587) by @RapierCraft in #592
Full Changelog: v1.0.12...v1.0.13
v1.0.12
What's Changed
- Fix: guard npx forgedock against unwritable/non-project cwd (#585) by @RapierCraft in #588
- Feat: restore ForgeDock splash screen removed in refactor (#586) by @RapierCraft in #589
- Deploy: staging → main — onboarding crash + splash fixes by @RapierCraft in #590
Full Changelog: v1.0.11...v1.0.12
v1.0.11
What's Changed
- fix(work-on): raise context budget threshold from 6 to 10 files by @rapiercraft-forge[bot] in #527
- fix(init): log which section fails parseEnrichedDraft sanity check under FORGEDOCK_DEBUG by @rapiercraft-forge[bot] in #528
- Fix: truncateVisible drops trailing RESET at exact visible-length boundary (#519) by @rapiercraft-forge[bot] in #529
- Fix: merge install + init into single npx forgedock command by @rapiercraft-forge[bot] in #530
- fix(installer): escape double quotes in README description for valid forge.yaml by @rapiercraft-forge[bot] in #533
- fix(forgedock-init): stop asking questions that auto-detection already answered by @rapiercraft-forge[bot] in #534
- fix(installer): skip code fences, horizontal rules, and tables in README description extractor by @rapiercraft-forge[bot] in #536
- fix(forgedock-init): auto-detect owner/repo from git remote on placeholder values by @rapiercraft-forge[bot] in #535
- fix(forgedock-init): replace non-greedy sed quantifiers with two-step strip by @rapiercraft-forge[bot] in #539
- fix(init): add CLAUDE.md fallback for project.description auto-detection by @rapiercraft-forge[bot] in #540
- fix(forgedock-init): scope sed owner replacement to project: section by @rapiercraft-forge[bot] in #556
- Feat: add distribution submissions tracker and content playbook by @rapiercraft-forge[bot] in #557
- fix(forgedock-init): replace per-section Y/N prompt with --preserve flag by @rapiercraft-forge[bot] in #558
- feat(marketing): add GitHub social preview image 1280x640 by @rapiercraft-forge[bot] in #559
- feat(marketing): add VHS tape script and README demo GIF slot by @rapiercraft-forge[bot] in #561
- feat(docs): YouTube demo video production guide by @rapiercraft-forge[bot] in #565
- Feat: 'Built with ForgeDock' badge, star history chart, and pr_footer config by @rapiercraft-forge[bot] in #562
- Feat: add GitHub issue templates, SECURITY.md, enable Discussions by @rapiercraft-forge[bot] in #560
- Feat: dev.to article draft — How I Built an AI Agent That Never Forgets by @rapiercraft-forge[bot] in #563
- feat(distribution): add Claude Code Plugin Marketplace manifest by @rapiercraft-forge[bot] in #564
- Docs: FORGE Annotation Protocol — open standard specification by @rapiercraft-forge[bot] in #566
- Feat(docs): SEO content — 5 high-intent landing pages by @rapiercraft-forge[bot] in #568
- Fix: remove duplicate /quality-gate entry in bug-report.yml dropdown by @rapiercraft-forge[bot] in #569
- Feat: Add Anthropic DevRel outreach playbook by @rapiercraft-forge[bot] in #570
- Feat: restructure README for star conversion by @rapiercraft-forge[bot] in #571
- feat(marketing): draft Hacker News Show HN launch post by @rapiercraft-forge[bot] in #572
- feat(marketing): Twitter/X launch thread + ongoing content strategy by @rapiercraft-forge[bot] in #574
- feat(marketing): Reddit multi-subreddit launch campaign post drafts by @rapiercraft-forge[bot] in #575
- milestone/project-agnostic → staging by @rapiercraft-forge[bot] in #573
- Fix: unescaped backslashes in description produce invalid YAML by @rapiercraft-forge[bot] in #580
- fix(installer): narrow catch to ENOENT in install() and uninstall() by @rapiercraft-forge[bot] in #582
- Fix: init() prompts before overwriting existing forge.yaml by @rapiercraft-forge[bot] in #583
- fix(installer): escape backslashes in path fields before YAML embedding (#581) by @RapierCraft in #584
- Deploy: staging → main (v1.0.9) by @rapiercraft-forge[bot] in #579
Full Changelog: v1.0.10...v1.0.11
v1.0.10
What's Changed
- docs(init-detect): fix stale catch comment in detectDefaultBranch by @RapierCraft in #499
- docs(registry): document downgrade behaviour for realpath-keyed registry entries by @RapierCraft in #500
- fix(init): extend parseEnrichedDraft guard to validate meta section by @RapierCraft in #501
- fix(tui): suppress ANSI tokens from cut region in truncateVisible by @RapierCraft in #502
- chore(tui): remove duplicate local stripAnsi closures in box() and table() by @RapierCraft in #509
- fix(init): replace falsy guards with typeof checks in parseEnrichedDraft by @RapierCraft in #508
- Fix: strengthen phase boundary routing — prevent end_turn stalls and context overflow by @RapierCraft in #512
- test(init): add meta:{} truthy empty object acceptance test by @RapierCraft in #513
- Test: add boundary tests for truncateVisible(0) and ANSI-only input by @RapierCraft in #514
- fix(init): correct parseEnrichedDraft guard comment — arrays also pass typeof check by @RapierCraft in #516
- test(tui): remove tautological ESC-absence assertion in truncateVisible boundary test by @RapierCraft in #517
- fix(init): add Array.isArray() guard to parseEnrichedDraft section checks by @RapierCraft in #518
- Deploy: post-1.0.9 polish — tui ANSI hardening, meta guard, docs (staging → main) by @RapierCraft in #507
Full Changelog: v1.0.9...v1.0.10
v1.0.9
What's Changed
- Refactor: extract init-detect into pure module emitting ConfigDraft + per-field confidence by @RapierCraft in #358
- Feat(forgedock-init): upgrade to init-enrich skill backend consuming ConfigDraft by @RapierCraft in #359
- Feat: per-directory state registry module (resolveState / setOptOut) by @RapierCraft in #360
- Feat: annotated review-render screen (source/confidence/why, accept/edit, TODO flags) by @RapierCraft in #361
- Feat: enable/disable/status CLI commands + .forgedock marker handling by @RapierCraft in #362
- Feat(init): wire autopilot init end-to-end with backend-selection ladder by @RapierCraft in #363
- Feat: SessionStart hook - context injection, opt-out, and nudge by @RapierCraft in #368
- feat(validate): self-healing validate with plain-language remediation by @RapierCraft in #369
- Feat: --manual/--verbose escape hatch for the full guided wizard by @RapierCraft in #370
- Feat: BYO-key Anthropic API enrichment backend behind init-enrich interface by @RapierCraft in #372
- Fix: showSources option silently dropped by annotatedReviewScreen by @RapierCraft in #374
- Fix: _parseEnrichedDraft brace-matching for repos with curly braces in field values by @RapierCraft in #375
- Fix: pipe _enrichViaSkill prompt via stdin to avoid ARG_MAX by @RapierCraft in #376
- fix(init): remove false-positive secondary signal from _detectBackend by @RapierCraft in #377
- fix(init): align enrichmentSucceeded with compound meta?.enriched check by @RapierCraft in #378
- Refactor: remove _parseEnrichedDraft duplicate, import from init-enrich-api.mjs by @RapierCraft in #379
- fix(updater): add shell: true to execFileSync in queryNpmRegistry for Windows .cmd shim resolution by @RapierCraft in #391
- fix(init): replace greedy regex with string-aware brace scanner in parseEnrichedDraft by @RapierCraft in #392
- Fix: session-start.mjs registry import inside try/catch (fail-open contract) by @RapierCraft in #393
- Fix: execFileSync("claude") ENOENT on Windows — skill enrichment silently dead by @RapierCraft in #394
- fix(onboarding): sanitize project_board IDs through _sanitizeYamlValue() by @RapierCraft in #395
- fix(prereq): use execFileSync for org label query to fix Windows quoting by @RapierCraft in #397
- fix(hooks): normalize SessionStart hook path to forward slashes on Windows by @RapierCraft in #398
- fix(installer): show platform-correct removal command on command conflict by @RapierCraft in #399
- fix(installer): add Windows FORGE_HOME persistence via setx by @RapierCraft in #400
- chore(polish): fix 4 LOW-severity polish findings from PR #380 review by @RapierCraft in #402
- fix(forgedock): sanitize optionIds key names as YAML keys in _buildOptionIdsBlock() by @RapierCraft in #403
- fix(installer): escape single quotes in FORGE_HOME for PowerShell guidance string by @RapierCraft in #406
- fix(forgedock): add tab stripping to _sanitizeYamlKey() regex by @RapierCraft in #407
- fix(onboarding): normalize spaces in _sanitizeYamlKey() for idiomatic YAML keys by @RapierCraft in #408
- Ship: Intelligent, Idiot-Proof Onboarding by @RapierCraft in #409
- fix(installer): tolerate JSONC in readClaudeSettings() via stripJsonc() by @RapierCraft in #420
- fix(init): log debug warning when enrichment response truncated by max_tokens by @RapierCraft in #421
- fix(registry): normalize drive-letter casing for registry key lookups on Windows by @RapierCraft in #422
- fix(hooks): sanitize forge.yaml values before session context injection by @RapierCraft in #423
- fix(installer): remove FORGE_HOME from Windows user env on uninstall by @RapierCraft in #425
- fix(updater): replace unconditional shell:true with platform-conditional flag in queryNpmRegistry by @RapierCraft in #428
- fix(installer): detect setx 1024-char truncation before success message by @RapierCraft in #429
- fix(init): normalize CR/CRLF in review.context before block scalar emit by @RapierCraft in #430
- fix(installer): use REG delete to remove FORGE_HOME on Windows uninstall by @RapierCraft in #431
- fix(hooks): sanitize project.owner and project.repo before session context injection by @RapierCraft in #432
- fix(installer): detect Windows unconditionally for FORGE_HOME cleanup by @RapierCraft in #433
- docs(config): add nudgeSeen to registry schema docs by @RapierCraft in #454
- fix(hooks): use /\r?\n/ split in parseForgeYaml to handle CRLF forge.yaml by @RapierCraft in #455
- docs(init): correct --manual flag description from wizard to annotated review screen by @RapierCraft in #456
- fix(init): rewrite API-mode SYSTEM_PROMPT to remove false codebase/gh-CLI capability claims by @RapierCraft in #457
- Fix: derive lowConfidenceKeys live at every return site in annotatedReviewScreen by @RapierCraft in #459
- fix(scripts): guard empty ROUTE_SEGMENT to prevent false-positive warnings by @RapierCraft in #458
- fix(hooks): strip single backticks in sanitizeContextValue by @RapierCraft in #461
- Fix: registry read-modify-write race loses concurrent updates (#438) by @RapierCraft in #460
- Refactor: hoist OPTIONAL_SECTION_CHOICES and section name map to module scope by @RapierCraft in #463
- Fix: ANSI-aware column padding/truncation in annotated review screen by @RapierCraft in #464
- fix(registry): dereference symlinks in normalizeDir for consistent registry keys by @RapierCraft in #467
- fix(hooks): sanitize process.cwd() before context output interpolation by @RapierCraft in #465
- Fix: strip C0/C1 control chars from review.context block scalar by @RapierCraft in #470
- Fix: writeClaudeSettings() tmp cleanup on renameSync failure by @RapierCraft in #472
- test(bin): add node:test unit tests for 5 onboarding modules by @RapierCraft in #473
- fix(init): add section tracking to _injectTodoComments() to prevent false TODO on project_board.owner by @RapierCraft in #476
- refactor(installer): extract SESSION_START_HOOK_TIMEOUT_SECONDS constant by @RapierCraft in #477
- refactor(onboarding): migrate gh auth login to execFileSync arg array by @RapierCraft in #478
- fix(installer): escape double quotes in sessionStartHookCommand hook path by @RapierCraft in #479
- Refactor: extract _initNonTTY and _collectOptionalSections from init() (#453) by @RapierCraft in #480
- fix(init): route enrich() apiKey-absent warning to stderr by @RapierCraft in #481
- docs(registry): replace misleading Pure JSDoc claim in writeRegistry by @RapierCraft in #483
- fix(sanitize): add C0/C1 control char stripping to _sanitizeYamlValue() by @RapierCraft in #485
- fix(tests): add GIT_CONFIG_GLOBAL guard to makeLocalRepo initial commit by @RapierCraft in https://githu...
v1.0.8
What's Changed
- docs(config): document review.layout.worker_main in forge.yaml.example by @RapierCraft in #328
- fix: gate SOPS env-var checks on deploy.secrets_backend in work-on-monolithic (#322) by @RapierCraft in #330
- Fix: $PROJECT_ROOT undefined in deploy-info.md yq layout reads by @RapierCraft in #329
- Fix: review-pr-staging.md — move Config Resolution before first var use by @RapierCraft in #331
- Fix: autopilot.md add explicit yq binding for BILLING_ENABLED by @RapierCraft in #332
- fix(scripts): preserve WARNINGS counter in verify-sops-chain.sh — use process substitution by @RapierCraft in #333
- fix(review-pr): replace for-loop subshell with while-read to prevent word-splitting by @RapierCraft in #334
- fix(scripts): use grep -F and shell expansion to prevent pattern injection in verify-route-registration.sh by @RapierCraft in #335
- fix: docsInit() TOCTOU — re-validate target path after mkdir by @RapierCraft in #336
- fix(deploy-info): resolve unsubstituted {deploy.secrets_backend} placeholder — restore SOPS advisory cross-check by @RapierCraft in #337
- fix(commands): replace awk indentation-anchored reads with yq for verification.commands.* by @RapierCraft in #338
- Deploy: 11 PR #315 staging-review fixes → main by @RapierCraft in #339
Full Changelog: v1.0.7...v1.0.8