By ForgePlan
v0.19.0: forgeplan-web dogfood re-run follow-ups (findings A/B/C, after v0.18.0 proved the pipeline completes end-to-end on a real repo -- top map confirmed + 4/4 layers confirmed, GC-9 + parent_zone live-PASS). (A) map-emit.mjs input PRE-FLIGHT: refuse a wrong-shape (pre-v0.18) scratch instead of silently degrading. Resuming an old scratch under the new script had nested repo_head/project under meta. + a flat {edges:[]} shape, so the emit silently produced a 'nogit:' fingerprint, dropped title/description_ru, and would have shipped 0 edges -- against the pack's honest-failure discipline. The script now names the mismatch (repo_head/project must be top-level; edges must be {typedLink,codeDep} with id+namespace) and writes NOTHING; +2 test/emit-script.mjs scenarios. (B+C) scoped-layer ROLE DECOMPOSITION now mandatory in the orchestrator Scoped-pass rules + /map-build-layer + a map-emitter HARD RULE: a layer build routes input-prep through zone-extractor (scoped .extract.json + persisted .composition.json) + edge-verifier (scoped .edges.json), and map-emitter does ONLY flows + the script -- it never self-authors scoped inputs (the dogfood saw 3/5 emitters overstep, and one self-authored layer forgot repo_head -> a nogit: fingerprint on that one layer). 81 assertions green across 4 suites. Plugin v0.18.0 -> v0.19.0, catalog 1.117.0 -> 1.118.0. v0.18.0: DETERMINISTIC EMIT -- the headline fix from the 2026-07-15 forgeplan-web dogfood, which proved the LLM-typed emitter cannot scale to a real repo. On 274 nodes / 316 edges (~4,000 lines) map-emitter blew the 64,000-token output cap 3 runs out of 3; round 3 suppressed prose to five lines and STILL died, proving THE DOCUMENT is the cap-breaker, not agent chattiness (round 1 only 'barely fit': 553k tokens, 56 min -- so even the first write was at the edge, and anything larger fails outright). Neither proposed workaround was enough: granting Edit only fixes CORRECTION loops (the initial write stays at the cap), and chunked writes need Edit/Bash anyway while still having an LLM re-type 4,000 lines. Root cause is architectural -- an LLM re-typing a mechanical document whose every content DECISION was already made upstream (.extract.json=zones/nodes, .edges.json=edges, composed composition=layout). NEW scripts/map-emit.mjs (deterministic, dependency-free Node, mirroring map-guardian.mjs) now owns everything clerical: meta + 'git:<sha>' build anchor, tier-row layout + CM-22 accent de-collision, CM-07 canonical layer meta + B5 CONTENT seed_fingerprint, CM-01 visible() collapsed-child rewrite + CM-05 edge_ids resolution, CM-23 _content_sig drop + found_at hoist, the assembly-guard trio with reject-before-write, atomic tmp-rename, status:'proposed', and the NEEDS_CONFIRM sentinel. The map-emitter AGENT now decides ONLY the flows (the sole judgment call) into a tiny .work/.emit-plan.json and invokes the script (Bash granted for that one purpose; Edit + every forgeplan_* mutator still denied; it no longer writes map.json at all). The script's plain fs write is invisible to the write-hook BY CONSTRUCTION -- the same sanctioned shape ADR-017 blesses for the guardian -- and GC-5's git audit remains the single-writer backstop. Orchestrator SELECT now persists the composed base+overlays as .work/.composition.json (the script parses no YAML). NEW test/emit-script.mjs (35 assertions) including the end-to-end one that matters: emit a document, then run the REAL guardian over it and require exit 0 (GC-2/GC-7/GC-10/GC-11 PASS, GC-9 PASS on a layer) -- proving emitter and gates agree. No token cap, deterministic, instant, scales to any repo. Plugin v0.17.0 -> v0.18.0, catalog 1.116.0 -> 1.117.0. v0.17.0: first-live-dogfood fix -- /map-doctor now handles a LEGACY (pre-v0.16) map gracefully. Running the v0.16.0 /map-doctor on a REAL forgeplan-web map (generated by the OLD v0.7.1 map-pack; source_fingerprint 'fpw-map-...' is not a git anchor) surfaced 2 real command-prose defects the deterministic gates + the self-audit could NOT catch -- they test v0.16-generated maps, not legacy ones. (A) A legacy map produced a wall of GC-7/GC-9/GC-10 BLOCKERs that READ as corruption but are just schema drift (the old generator never emitted found_at / canonical layer-meta / grouped-mega-kind); /map-doctor now DETECTS a legacy map (non-git source_fingerprint, or layers lacking scope:'layer'/parent_map_id) and LEADS with a 'LEGACY MAP -> rebuild once with /map-build' banner, tagging those BLOCKERs legacy-schema-gap instead of a dozen alarming per-layer failures. (B) A layer with a MISSING meta.parent_zone was wrongly flagged an ORPHAN; orphan now means ONLY a present-but-dangling parent_zone (a zone deleted from the top map), while a missing parent_zone is non-canonical meta (GC-9's job), not orphan. The doctor itself verified WORKING on the live run (fast, read-only, accurate 11+2 checks, readable digest, correct fix commands) -- the real-run gap is now closed for /map-doctor. Plugin v0.16.0 -> v0.17.0, catalog 1.115.0 -> 1.116.0. v0.16.0: dogfood-brief batch 5 (CM-25) -- two new commands + content-aware staleness, closing the 25-finding v0.7.1 dogfood brief. Folds in an 18-finding adversarial self-audit remediation (a generator!=verifier workflow over the 5 batches of agent-prose): reconciled the E5 auto-cascade seed_fingerprint to the content-aware B5 form (it still read as membership-only, re-introducing the exact staleness-blindness B5 fixed on the default --layers path), gave the guardian a `--check-only` read-only deep flag so /map-doctor --deep exercises Layer B WITHOUT the proposed->confirmed write it previously performed (+ guardian-layer-b.mjs Scenario 7), realigned the zone-extractor AGENT body to the grouped-collapse contract its own SKILL uses (the body still taught the 170->1 single-blob dump), dropped the unfulfillable 'fold the narrating doc blob SHA' staleness claim (docs-scanner has no Bash to compute one), threaded manifests[] to edge-verifier, fixed the _content_sig/contentSig producer/consumer key drift, and corrected ~9 cross-file prose drifts (smoke-coverage GC-7..GC-11, stale GC enumerations, mtimes vs git-anchor, mega ref prefix, project shape). NEW /map-refresh: rebuild ONLY the layers whose content changed since the map was built, not the whole cascade. It rests on a real upgrade -- meta.seed_fingerprint is now a CONTENT fingerprint (sha1 over each member's id + its git blob signature / artifact updated-stamp), not the old membership-only id-set hash; so EDITING a file inside a card (git) or updating a doc now marks its layer stale, which the v0.8.0 idempotent-skip was blind to. The top map's meta.source_fingerprint becomes a robust git build anchor 'git:<HEAD-sha>' (was fragile mtimes); /map-refresh diffs `git diff <anchor>..HEAD` UNION uncommitted, maps changed files to stale zones via node provenance.ref paths + doc narration, recomputes each layer's content fingerprint, and rebuilds only the mismatched layers in parallel (the orchestrator's new Refresh mode). code-scanner records per-file git blob content_sig + repo HEAD; forgeplan-scanner records per-artifact updated; zone-extractor threads a scratch-only _content_sig (dropped before ship, CM-23) that map-emitter folds into seed_fingerprint. NEW /map-doctor: fast, read-only triage -- runs the deterministic guardian (--smoke Layer A) over the top map + every layer, flags stale layers via the same git anchor, finds orphan layers (zone gone), and prints a fix-oriented digest (which command repairs each issue) WITHOUT regenerating anything or dispatching an agent. Doctor diagnoses, refresh fixes. All agent-prose + 2 command files; no guardian/schema change. Plugin v0.15.0 -> v0.16.0, catalog 1.114.0 -> 1.115.0. v0.15.0: dogfood-brief batch 4B (CM-10/CM-15/CM-21/CM-22/CM-23/CM-24) -- layout + grouping prose, completing batch 4 (the 25-finding v0.7.1 dogfood brief is now closed except batch 5 = new /map-doctor + /map-refresh commands). CM-24: edge-verifier dedupes edges globally by (from,to,relation) (the edge id's own key), keeping the higher-trust survivor -- a relationship the graph AND a grep both surfaced no longer ships twice or double-lights a flow (A->B and B->A stay distinct). CM-22: map-emitter tier-row layout de-collides accents -- no two grid-neighbour zones share a --map-accent-* token (GC-11); minimal reassignment keeps authored accents and only breaks a colliding tie. CM-15: zone-extractor collapses at EVEN density -- ~ceil(sqrt(N)) comparably-sized group cards (sub-split a lopsided giant), never one blob next to slivers. CM-10: the decision zone can group by narrative ARC (Shape/Design/Decide/Prove) on the TOP map when the composition provides decision_grouping:"arc" + kind_to_arc (promoting the arc derivation the extractor already did one level down), instead of a bag-of-kinds. CM-21: a scoped layer build selects its sub-composition from a catalogue keyed on the target zone's KIND (store->data-shaped, surface->UI-shaped, truth->decision-arc) instead of flooring every drill-down to generic. CM-23: field discipline -- emit only schema-defined + named-consumer fields uniformly (all-or-none); drop speculative extras like the inconsistent description_ru_source / edge note the dogfood shipped. All agent-prose; GC-7..GC-11 gates + 3 test suites catch regressions. Plugin v0.14.0 -> v0.15.0, catalog 1.113.0 -> 1.114.0. v0.14.0: dogfood-brief batch 4A (CM-11/CM-16/CM-17/CM-19/CM-20) -- flows + labels prose. CM-19: a flow is a CONNECTED edge-path, not an arbitrary node set -- map-emitter walks the edge graph and, when a hint's path splits into two edge-disconnected arcs, emits two separate flows instead of one spliced one (the v0.7.1 decision flow lit two islands with a dead gap). CM-11: every flow (hint- and entrypoint-derived) carries a short EN chip name + RU steps (GC-8). CM-17 + CM-20: ONE label policy (zone-extractor Algorithm 5c) -- a code node's label is the basename/curated short name (full repo-relative path in provenance.ref), an artifact node's label is "<ID> -- <title>" (bare artifact_id in provenance.ref); the full machine ref never renders on the card. CM-17: forgeplan-scanner now carries title + a one-line summary per artifact; zone-extractor builds the artifact node's description_ru from that summary (omit when absent, never faked). CM-16: a scoped layer build narrates at FULL budget (one zone = room to explain each node richly) and the richer description propagates up so the top card never carries a thinner description than its own layer produced. All agent-prose; the GC-7..GC-11 gates + 3 test suites catch regressions. Plugin v0.13.0 -> v0.14.0, catalog 1.112.0 -> 1.113.0. v0.13.0: dogfood-brief batch 3 (CM-06/CM-07/CM-08/CM-18) -- content-provenance + meta canonicalization prose the v0.11.0 GC-7..GC-11 gates guard against regression. CM-06: real `found_at` -- code-scanner gains a NARROW git-read Bash (git log --diff-filter=A first-add date, argv-safe, read-only; same edge-verifier precedent + GC-5 git-audit backstop, user-approved) to record per-file first_seen; forgeplan-scanner records each artifact's `created`; zone-extractor Algorithm 5b stamps found_at from a REAL first-seen (code node=git first_seen, artifact node=created, mega=earliest child, deterministic repo-level fallback) -- NEVER now(), which churns the GC-7 append-stability sort key (the v0.7.1 constant/missing-found_at defect). CM-07: map-emitter Algorithm 4 freezes the canonical layer-meta struct GC-9 requires (scope:"layer" + parent_map_id + parent_zone + map_id==<parent>::<zone> frozen :: separator + no needs_confirm floor + seed_fingerprint; the top map writes NONE of these layer keys). CM-08: docs-scanner extracts a project {title, description_ru} from the real README H1 + tagline (omit if absent, never invented); zone-extractor carries it through .extract.json; map-emitter stamps meta.title + meta.description_ru (additive, meta.additionalProperties:true) -- the map finally carries a human heading instead of a bare map_id. CM-18: zone-extractor Algorithm 5 -- a group mega's kind is ALWAYS the literal "mega" (GC-10 BLOCKERs is_mega!==(kind==mega); never the members' leaf kind, which inflated counts) and its provenance.ref carries the machine-recoverable preimage mega:<zoneId>:<groupKey>, not a human sentence. The one security-surface change (code-scanner narrow git-read Bash) is user-approved and lint-safe (code-scanner stays C-coder-class: denies every forgeplan_* mutator + Edit/NotebookEdit). Plugin v0.12.0 -> v0.13.0, catalog 1.111.0 -> 1.112.0. v0.12.0: dogfood-brief batch 2 (P0 prose fixes CM-01/CM-02/CM-05) -- the flow + id-stability defects the v0.11.0 deterministic gates now guard against regression. CM-02: node `kind` is frozen as an ALTITUDE-INVARIANT identity property (zone-extractor skill Algorithm 2a) -- only a node's `zone` is re-computed per scope, so `sha1(kind:ref)` is byte-identical on the top map and inside a drilled-in layer; keeps GC-6 valid and lets forgeplan-web's deriveSubDocument carry a node across altitudes (id-carry no longer breaks when a scoped pass would classify the same entity differently). CM-05: edge-verifier now mints a stable content-hash edge id (sha1("edge:"+from+"|"+to+"|"+relation)[:12] over the REMAPPED endpoints, doubling as the CM-24 dedup key) so flows can reference edges; map-emitter carries edge.id through verbatim and resolves each consecutive flow node pair into flow.edge_ids -- GC-8 had WARNed on the always-empty edge_ids chip. CM-01: after grouped mega-collapse, map-emitter rewrites every flow's node_ids through a visible() map (a hidden collapsed-child -> its containing mega) with consecutive-dedup, so selecting a flow lights RENDERED mega cards the user can expand instead of hidden children (which lit nothing). All three are agent-prose (skills/zone-extractor, skills/edge-verifier, skills/map-emitter + a map-orchestrator scoped-layer note) -- no gate or schema change; the GC-7..GC-11 gates + the 3 test suites catch any regression. v0.11.0: five new deterministic guardian gates (CM-13, from the 5-audit v0.7.1 dogfood brief) -- GC-7 found_at completeness (BLOCKER), GC-8 flow completeness (WARN: multi-node flows must carry edge_ids + RU steps), GC-9 layer-meta canonicalization (BLOCKER: frozen keys + <parent>::<zone> map_id + no auto-confirmed needs_confirm floor), GC-10 is_mega<=>kind==mega (BLOCKER), GC-11 accent-neighbour collision (WARN). All Layer A (doc-only, run under --smoke). They deterministically catch the content defects the dogfood shipped (CM-05/06/07/18/22). Covered by test/guardian-content-gates.mjs (13 assertions). v0.10.0: composition library COMPLETE -- 7 more abstract base archetypes (data-pipeline / ml-project / ai-agent / cms / mobile-app / desktop-app / docs-site), for a full set of 13 base archetypes + 6 pattern overlays. Any common project type -- frontend, backend, CLI, library, data, ML, agentic, CMS, mobile, desktop, docs, fullstack, or the generic floor -- now has a tuned archetype, and hybrids compose base + overlays into one map. v0.9.0: composition BREADTH -- the base-TYPE + pattern-OVERLAY engine (COMPOSITIONS-GUIDE). The orchestrator SELECT stage now detects ALL active pattern overlays independently (not just one base) and composes base + overlays into one effective composition; the emitter lays the merged zones out by tier row (entry/core/data/decisions) for any zone count. Ships 6 overlays (microservices / serverless / cqrs-eventsourcing / mcp-server / api-gateway / monorepo -- the last a regroup-by-package modifier) + 4 new abstract base archetypes (web-frontend / backend-api / cli-tool / library-sdk) alongside web-fullstack / generic (rust-cli-mcp kept as a legacy forgeplan-core specialization). A hybrid repo (e.g. monorepo + backend-api + microservices) now composes into one coherent map instead of falling to the generic floor. v0.8.0: E5 auto-cascade layer generation (PRD-076 FR-5 / ADR-018) -- after the top map is CONFIRMED, /map-build (default --layers) auto-fans-out one scoped per-zone layer build IN PARALLEL (disjoint map/layers/<zone>.json write targets, own scratch + guardian pass), gated by 3 cost controls: seed-fingerprint idempotent skip (unchanged zone not rebuilt), thin-zone threshold (~6 members), depth policy (first level auto; deeper on demand via /map-build-layer or --layers-depth N). meta.seed_fingerprint doubles as forgeplan-web's staleness check. Rejected eager (top map still mutates in gate loops) + sequential (sum-of-zones wall-clock). 8-agent orchestrated pipeline that scans any forgeplan-enabled project and emits a validated .forgeplan/map/map.json (schema forgeplan.map/v1) for forgeplan-web's composed-map renderer. EMITTER profile throughout: a fail-closed PreToolUse hook + agent denylist + a deterministic map-guardian.mjs gate make it structurally impossible for the pipeline to write anywhere except the derived map/layer files or to mutate any forgeplan artifact. v0.7.0: understanding-map quality wave (PRD-076). E1 -- architecture-quality content: over-capacity zones collapse GROUPED by kind (PRD/RFC/ADR/EVID/...) instead of one opaque 170-artifact card; zones carry an abstract RU region description + meaning-subtitle; nodes get a rich RU description synthesized from GROUNDED scanned facts (code-scanner now records module facts -- top-comment, exports, role -- never fabricated from a filename). E2 -- richer flows: web-fullstack ships 4 flow_hints + the emitter derives entrypoint flows to reach 6+ named journeys. E3/E4 -- per-zone generated layers: new /map-build-layer "<zone>" command + orchestrator scoped mode emit a zone's own validated sub-map to .forgeplan/map/layers/<zone>.json (hook + guardian GC-5 extended to sanction map/layers/**); rendering the layer needs forgeplan-web's deriveSubDocument seam (cross-repo contract, PRD-076 FR-3). v0.6.0: output-quality pass on the first rendered real map -- (O-1) node.meta is now a SHORT card subline (full prose -> description_ru), fixing cards that overflowed ~5x; (O-2) the emitter derives flows[] from a composition's flow_hints (short chip name + path + RU steps), so the flow-navigation chips are no longer dark on real data; (O-3) web-fullstack lays zones out in a 2D grid instead of a tall single-column ribbon. Adds COMPOSITIONS-GUIDE.md (the abstract-archetype authoring contract: base TYPE + pattern OVERLAY model, 7-accent convention, shared canvas constants, depth-agnostic hints, flow_hints) and flow_hints on the two curated templates. v0.5.0: dogfood tail-stage fixes -- the write+validate defects the first end-to-end forgeplan-web run surfaced. (F4) map-emitter-gate.sh normalizes the plugin-qualified dispatch identity (forgeplan-map-pack:map-emitter) before its single-writer check -- an exact-string test was denying the emitter's OWN write. (F6) guardian XC-2 + the edge-verifier grep now scope every re-grep with --exclude-dir (node_modules/.git/build/... -- an identical set both sides share) -- an unbounded grep -rlF over the whole repo hung the guardian on any repo with dependencies. (F5) documents honestly that the Write-hook cannot police a Bash-mediated write (edge-verifier needs Bash for grep), so GC-5's after-the-fact git audit is the real single-writer backstop, not the hook. Adds test/emitter-gate-identity.sh + a node_modules-exclusion scenario in test/guardian-layer-b.mjs. v0.4.0: first-dogfood hardening -- fixes the 3 defects the first real forgeplan-web run surfaced. (1) Guardian XC-1 now compares typed-link edges in content-hash id-space (v0.2.0 compared them against artifact-id-keyed scan edges, failing EVERY edge). (2) Guardian GC-5 is now a write-SCOPE check that passes whether map.json is committed (forgeplan-web ships it tracked as the P0 render-proof) or gitignored -- v0.2.0 BLOCKER-ed any committed-map repo and carried a porcelain leading-space parse bug. (3) The web-fullstack composition detection + zone_hints are depth-agnostic, so a nested app root (template/src/**) is recognized instead of falling to the generic floor. Adds test/guardian-layer-b.mjs, a non-smoke regression test covering the Layer-B checks --smoke never exercised (XC-1/GC-5/GC-6/XC-2). v0.3.0: /map-build slash command as the human-facing entry point. v0.2.0: full P1 implementation -- all 8 agents, 3 skills, 3 MVP composition templates, the map-build playbook, and the guardian/hook pair. Pre-1.0: guardian fixes are regression-tested; the depth-agnostic detection fix awaits final confirmation on a full forgeplan-web re-run.
Generate ONE zone's drill-down layer (a validated sub-map with its own zones/nodes/edges/flows) for an already-built .forgeplan/map/map.json, on demand and append-only, by dispatching the forgeplan-map-pack pipeline in SCOPED mode. Usage: /map-build-layer "<zone-id>" [repo-root]. Deeper: /map-build-layer "<zone-id>/<subzone-id>".
Scan the current forgeplan-enabled repo and generate a validated .forgeplan/map/map.json (schema forgeplan.map/v1) for forgeplan-web's composed-map view, by dispatching the forgeplan-map-pack 8-agent pipeline. Usage: /map-build [repo-root]
Fast, read-only health check for an already-built .forgeplan/map/map.json + its layers — runs the deterministic guardian on every file, flags stale layers (content changed by git/docs), and finds orphan layers, WITHOUT regenerating anything. Says what's broken and which command fixes it. Usage: /map-doctor [repo-root] [--deep]
Incrementally refresh an already-built .forgeplan/map/map.json — find what changed by git + docs since the map was built and rebuild ONLY the affected layers, leaving fresh layers untouched. The cheap counterpart to a full /map-build. Usage: /map-refresh [repo-root]
EN: THE HEART of the forgeplan-map-pack pipeline (RFC-023's own words). EMITTER-profile agent for the EXTRACT stage: merges the three SCAN-stage scratch files (code/forgeplan-graph/docs) into zones/layers/nodes/mega-nodes, using the orchestrator-selected composition's zone_hints. Mints content-hash node ids (sha1(kind+":"+path_or_slug)[:12] — never a name or counter, INV-2), pins every zone's cols from the composition (never derived from node count, append-stability), and collapses an over-capacity zone into GROUPED is_mega:true/collapsed:true nodes (one per kind/package/arc group, singletons flat; capacity from the composition, 8 when null) -- never one zone-wide blob. Writes ONLY its own extraction scratch under .forgeplan/map/.work/ — never map.json. Denied Edit and every forgeplan_* mutator; never touches the forgeplan artifact graph. Dispatched after gate G1 (SCAN → G1 → TYPE → SELECT → EXTRACT), checked by gate G2. RFC-023 Proposed Direction SS1/SS4 (FR-3 / PRD-075 FR-3), SPEC-003 SS C1 INV-2 + SS D4, ADR-016 (roster decision), ADR-017 (companion — the deterministic-gate decision this stage's output is later checked against). RU: СЕРДЦЕ конвейера forgeplan-map-pack (формулировка самого RFC-023). EMITTER-агент стадии EXTRACT: сливает три scratch-файла стадии SCAN (код / граф forgeplan / документация) в zones/layers/nodes/mega-nodes по zone_hints выбранной оркестратором композиции. Формирует id узлов через content-hash (sha1(kind+":"+path_or_slug)[:12] — никогда не имя и не счётчик, INV-2), фиксирует cols каждой зоны из композиции (никогда не вычисляет из числа узлов — стабильность при добавлении), схлопывает зону сверх ёмкости в СГРУППИРОВАННЫЕ узлы is_mega:true/collapsed:true (один на группу kind/package/arc, одиночки плоско; ёмкость из композиции, 8 при null) -- никогда не в один блоб на всю зону. Пишет ТОЛЬКО свой extraction-scratch в .forgeplan/map/.work/ — никогда map.json. Запрещены Edit и все forgeplan_*-мутаторы; никогда не трогает граф forgeplan-артефактов. Запускается после гейта G1 (SCAN → G1 → TYPE → SELECT → EXTRACT), проверяется гейтом G2. RFC-023 SS1/SS4 (FR-3 / PRD-075 FR-3), SPEC-003 SS C1 INV-2 + SS D4, ADR-016, ADR-017. Triggers: "extract zones from scan", "merge scan scratch files", "mint content-hash node ids", "bin nodes into zones", "collapse mega-node", "extract stage", "zone-extractor", "слей scan-файлы в zones"
EN: SCAN-stage EMITTER agent for the forgeplan-map-pack pipeline: scans the target project's source tree, package manifests, and entry points into raw facts (modules, entry points, manifest-declared dependencies) for the downstream `zone-extractor` to bin into zones and mint into content-hash nodes. Runs in parallel with `forgeplan-scanner` and `docs-scanner` (RFC-023 Proposed Direction SS1/SS2, PRD-075 FR-1); writes ONLY its own scratch file `.forgeplan/map/.work/.scan.code.json`, never touching the other two scanners' files or `map.json` -- the PROB-060 single-writer-per-scratch-file discipline RFC-023 SS3 exists to prevent. Denied `Edit` and every `forgeplan_*` mutator; touches no forgeplan artifact at all (that is `forgeplan-scanner`'s exclusive scope). RU: EMITTER-агент стадии SCAN конвейера forgeplan-map-pack: сканирует дерево исходников, манифесты пакетов и точки входа целевого проекта в сырые факты (модули, точки входа, зависимости из манифестов) для последующего распределения по зонам и content-hash минтинга агентом `zone-extractor`. Работает параллельно с `forgeplan-scanner` и `docs-scanner` (RFC-023 SS1/SS2, PRD-075 FR-1); пишет ТОЛЬКО свой scratch-файл `.forgeplan/map/.work/.scan.code.json`, никогда не трогая файлы двух других сканеров или `map.json` -- дисциплина «один сканер -- один scratch-файл» (RFC-023 SS3), введённая из-за гонки PROB-060. Запрещены `Edit` и все forgeplan_*-мутаторы; вообще не трогает граф forgeplan-артефактов (это исключительная зона `forgeplan-scanner`). Triggers: "scan source tree for map-pack", "code-scanner SCAN stage", "map-build code scan", "просканируй исходники для карты", "/map-build"
EN: SCAN-stage EMITTER agent for the forgeplan-map-pack pipeline: scans README/docs prose into raw narration facts for the downstream `zone-extractor`'s `description_ru` attachment step, extracting RU narration from REAL prose ONLY -- never invented; a zone/node with no docs source gets no narration field at all, omitted entirely (SPEC-003 SS D5 language rule, SS E3 dropped-not-faked rule, MASTER-SPEC SS15/SS22). Runs in parallel with `code-scanner` and `forgeplan-scanner` (RFC-023 Proposed Direction SS1/SS2, PRD-075 FR-1); writes ONLY its own scratch file `.forgeplan/map/.work/.scan.docs.json` -- the PROB-060 single-writer-per-scratch-file discipline (RFC-023 SS3). Denied `Edit` and every `forgeplan_*` mutator. RU: EMITTER-агент стадии SCAN конвейера forgeplan-map-pack: сканирует README/docs в сырые факты нарратива для последующего шага прикрепления `description_ru` агентом `zone-extractor`, извлекая RU-нарратив ТОЛЬКО из реальной прозы -- никогда не выдумывая; у зоны/узла без источника в документации поле нарратива просто отсутствует, полностью опускается (SPEC-003 SS D5 -- языковое правило, SS E3 -- «опущено, не подделано», MASTER-SPEC SS15/SS22). Работает параллельно с `code-scanner` и `forgeplan-scanner` (RFC-023 SS1/SS2, PRD-075 FR-1); пишет ТОЛЬКО свой scratch-файл `.forgeplan/map/.work/.scan.docs.json` -- дисциплина «один сканер -- один scratch-файл» (RFC-023 SS3, PROB-060). Запрещены `Edit` и все forgeplan_*-мутаторы. Triggers: "scan docs for map-pack narration", "docs-scanner SCAN stage", "map-build RU narration extraction", "извлеки RU-описания для карты", "/map-build"
EN: EMITTER-profile agent for the VERIFY stage of forgeplan-map-pack. Splits candidate edges into typed-link (sourced from forgeplan_graph via .scan.fpl.json, high trust, relation must be one of the 11 VALID_RELATIONS: informs/based_on/supersedes/contradicts/refines/supports/demonstrates/covers/triangulates/references/belongs_to) versus code-dep (requires an actual Bash grep pass recording a non-empty verified_by="grep:<pattern>" string). An UNVERIFIED code-dep edge is DROPPED before it ever reaches map-emitter — never emitted as noise. Writes ONLY its own edge scratch under .forgeplan/map/.work/ — never map.json. Denied Edit and every forgeplan_* mutator; never touches the forgeplan artifact graph. Dispatched after gate G2 (EXTRACT → G2 → VERIFY), checked by gate G3. RFC-023 Proposed Direction SS1/SS4 (FR-4 / PRD-075 FR-4), SPEC-003 SS D2 (the 11 relations) + SS D3 (namespace default rule), ADR-016 (roster decision), ADR-017 (companion — the edges this stage verifies feed the deterministic gate ADR-017 governs). RU: EMITTER-агент стадии VERIFY в forgeplan-map-pack. Делит кандидатов на рёбра типа typed-link (источник — forgeplan_graph через .scan.fpl.json, высокое доверие, relation обязан входить в 11 VALID_RELATIONS: informs/based_on/supersedes/contradicts/refines/supports/demonstrates/covers/triangulates/references/belongs_to) и code-dep (требует реального grep-прохода через Bash с непустым verified_by="grep:<паттерн>"). НЕПОДТВЕРЖДЁННОЕ ребро code-dep ОТБРАСЫВАЕТСЯ до того, как попадёт к map-emitter — никогда не публикуется как шум. Пишет ТОЛЬКО свой edges-scratch в .forgeplan/map/.work/ — никогда map.json. Запрещены Edit и все forgeplan_*-мутаторы. Запускается после гейта G2 (EXTRACT → G2 → VERIFY), проверяется гейтом G3. RFC-023 SS1/SS4 (FR-4 / PRD-075 FR-4), SPEC-003 SS D2 + SS D3, ADR-016, ADR-017. Triggers: "verify edges", "classify typed-link vs code-dep", "grep verification pass", "verify stage", "edge-verifier", "drop unverified edge", "проверь рёбра", "grep-подтверждение"
EN: SCAN-stage EMITTER agent for the forgeplan-map-pack pipeline: scans the `.forgeplan/` artifact graph via READ-ONLY MCP (`forgeplan_graph`, `forgeplan_list`, `forgeplan_get` -- no mutator ever called) into raw artifact/edge facts for the downstream `zone-extractor` to bin and mint. Runs in parallel with `code-scanner` and `docs-scanner` (RFC-023 Proposed Direction SS1/SS2, PRD-075 FR-1); writes ONLY its own scratch file `.forgeplan/map/.work/.scan.fpl.json`, never the other two scanners' files or `map.json` -- the PROB-060 single-writer-per-scratch-file discipline (RFC-023 SS3). The only SCAN-stage agent granted forgeplan MCP access, and even then strictly read-only: `Edit` and every `forgeplan_*` mutator are still denied. RU: EMITTER-агент стадии SCAN конвейера forgeplan-map-pack: сканирует граф артефактов `.forgeplan/` через READ-ONLY MCP (`forgeplan_graph`, `forgeplan_list`, `forgeplan_get` -- мутаторы не вызываются никогда) в сырые факты об артефактах и связях для последующего распределения и минтинга агентом `zone-extractor`. Работает параллельно с `code-scanner` и `docs-scanner` (RFC-023 SS1/SS2, PRD-075 FR-1); пишет ТОЛЬКО свой scratch-файл `.forgeplan/map/.work/.scan.fpl.json`, никогда файлы двух других сканеров или `map.json` -- дисциплина «один сканер -- один scratch-файл» (RFC-023 SS3, PROB-060). Единственный агент стадии SCAN с доступом к forgeplan MCP, и даже тот строго read-only: `Edit` и все forgeplan_*-мутаторы всё равно запрещены. Triggers: "scan forgeplan graph for map-pack", "forgeplan-scanner SCAN stage", "map-build artifact-graph scan", "просканируй граф forgeplan для карты", "/map-build"
Edge trust-classification and grep-verification algorithm for forgeplan-map-pack's VERIFY stage (RFC-023 Proposed Direction SS1 roster row 6; PRD-075 FR-4; SPEC-003 SS D2 the 11 VALID_RELATIONS, SS D3 the typed-link/code-dep namespace default rule). Covers: the namespace classification rule, the exact 11-relation allowlist for typed-link edges, the mandatory Bash grep-verification pass for code-dep edges with the verified_by="grep:<pattern>" format map-guardian.mjs's XC-2 re-runs verbatim, the unconditional drop-if-unverified rule (never emit a code-dep edge as noise), and argv-safe grep discipline (no shell interpolation of untrusted pattern content). Invoked by the edge-verifier agent only. Triggers: "classify edge namespace", "verify code-dep edge", "grep verification pass", "11 valid relations", "drop unverified edge", "verified_by format".
Document-assembly, pre-write invariant-guard, and atomic-write algorithm for forgeplan-map-pack's EMIT stage (RFC-023 Proposed Direction SS1 roster row 7 + Invariant #1; PRD-075 FR-5; SPEC-003 SS C0 the one-sentence contract, SS C3 gate G4). Covers: assembling meta/canvas/composition/zones/nodes/edges from the extraction+edges+composition inputs, the pre-write self-check trio RFC-023's own function signature assigns to this stage (no zone-cell overlap, every edge endpoint in nodes, every node.zone in zones -- independently re-derived afterward by the guardian's GC-2, NOT to be confused with SPEC-003's differently-numbered C1 INV-1/2/3 trio which this stage satisfies by disciplined passthrough construction instead), the reject-own-output-before-write rule, the exact tmp-rename atomic-write recipe mirroring map-guardian.mjs's own write, and the status:proposed + NEEDS_CONFIRM sentinel contract. Invoked by the map-emitter agent only. Triggers: "assemble map.json", "invariant guard before write", "atomic tmp-rename write", "NEEDS_CONFIRM sentinel", "status proposed".
Zone/node/mega-node extraction algorithm for forgeplan-map-pack's EXTRACT stage (RFC-023 Proposed Direction SS1 roster row 5, "THE HEART"; PRD-075 FR-3; SPEC-003 SS C1 INV-2, SS D4). Covers: the merge-then-dedup rule across the 3 scan scratch files, the content-hash node-id formula (sha1(kind+":"+path_or_slug)[:12], INV-2 -- never a label or counter), zone_hints binning with the z.core default-home fallback, why zone.cols is pinned from the composition and never derived from node count (append-stability), the GROUPED (per-kind) mega-node collapse rule for over-capacity zones (never one opaque zone-wide dump), and RU narration attachment into description_ru from real docs only. Invoked by the zone-extractor agent only -- not a general-purpose codebase-summarization skill. Triggers: "mint node id", "content-hash id formula", "zone binning", "mega-node collapse", "pin zone cols", "merge scan scratch files", "description_ru narration".
Modifies files
Hook triggers on file write and edit operations
Uses power tools
Uses Bash, Write, or Edit tools
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
Official plugin marketplace for Claude Code from ForgePlan — UX, workflow, engineering, and developer tools.
20 plugins | 41 marketplace-aware agents (91 total) | 38+ skills | 9+ knowledge bases
ForgePlan ecosystem: this marketplace +
forgeplanCLI (artifact lifecycle) +@forgeplan/web(browser viewer with time-travel + graph). Three siblings; install what you need.
| Guide | When to read |
|---|---|
| 👋 Onboarding | Read this first — pocket guide, friendly tone, get from zero to autonomous agent dispatch in 30-60 min. Hindsight setup + command cookbook + when-you're-needed matrix |
| 🚧 Brownfield guide | Companion to Onboarding — existing codebases, Discover Agent, Strangler Fig + DDD + ACL with concrete examples |
| 🚀 Developer Journey | Longer 30-min walkthrough from zero to your first shipped feature, with 4 persona Day 0 walkthroughs |
| 🧭 Smith — master orchestrator | Routing map: 14 routing rows × 29 methodologies. When and how to dispatch /smith as the BMAD-style master that picks the right workflow for the task |
| 📋 Playbook | Use-case matrix: which command for which scenario (empty project, brownfield, night-run, …) |
| 📖 Usage Guide | Reference manual: 18 commands, hooks, agent activation rules, troubleshooting |
| 🏛 Architecture | 4-layer mental model — Orchestra (where) · Forgeplan (what) · FPF (how to think) · SPARC (how to code) |
| 🔬 Methodologies | What's built into forgeplan (BMAD, OpenSpec, ADI, F-G-R, DDR, Verification Gate) vs what's external |
| 🔁 Autoresearch integration | Combining uditgoenka/autoresearch (metric-driven loops) with /forge-cycle lifecycle |
| 🧭 AI-SDLC mapping | Phase-by-phase map for users coming from AI-SDLC vocabulary (Concept → Research → Design → Build → Test → Release → Operate → Maintain) |
| 📚 Upstream methodologies | Bibliography — pointers to Quint-code, BMAD, OpenSpec, FPF, Karpathy autoresearch, git-adr, ccpm, adr-tools |
| 🛠 Setup Guide for new repo | End-to-end bootstrap (~20 min): forgeplan + Claude Code plugins + GitHub Projects v2 + auto-add workflow + convention. Use when adding a new ForgePlan repo to the ecosystem. |
| 🚚 Migration: dev-toolkit → fpl-skills | Switching plugins safely (side-by-side or clean-cut, with rollback plan) |
| 🗂 Tracker Integration | Recipes for Orchestra · GitHub Issues · Linear · Jira · local TODO |
| 🌐 Forgeplan Web | Browser viewer — time-travel slider + artifact graph + health dashboard |
| 🔄 Process Reference (EN) / RU | Full process from idea to commit — 5 agent profiles, 10 artifact kinds, 4-layer pipeline, methodologies (BMAD/FPF/SPARC/RIPER-5/CANVAS) |
| 📜 Changelog | Release history |
| 🤝 Contributing | Add a new plugin to the marketplace |
# 1. Add the ForgePlan marketplace
/plugin marketplace add ForgePlan/marketplace
# 2. Install your first plugin (works with any project, no dependencies)
/plugin install dev-toolkit@ForgePlan-marketplace
# 3. Reload to activate
/reload-plugins
# 4. Try it — run a code audit
/audit
New here? Pick the row that matches you. Each row is a complete setup — no need to read the full catalog.
| Your role | Install these | Why |
|---|---|---|
| I want a master orchestrator | fpl-skills + agents-pro | Start here → /smith routes 14 routing rows to 29 methodologies |
| Forgeplan user (recommended) | fpl-skills | One install, 38 skills, full route → ship loop |
| Any developer (no forgeplan) | dev-toolkit + agents-core | Universal tools, no CLI dependency |
| Frontend | fpl-skills + laws-of-ux + agents-domain | UX + framework agents |
| Architect | fpl-skills + fpf + agents-pro + agents-sparc | Thinking + SPARC |
| Multi-session / team | fpl-skills + forgeplan-orchestra | Coordination + Inbox Pattern |
| Brownfield migration | fpl-skills + forgeplan-brownfield-pack | Ingest legacy docs + C4/DDD/research analyses |
| Everything | All 18 plugins | Complete ecosystem |
ForgePlan Hindsight memory plugin for Claude Code. Long-term cross-session memory wrapping Hindsight (vectorize-io). Provides 13 MCP tools (memory_* + mental_model_* + document_ingest_*), 3 auto-hooks (recall on UserPromptSubmit, retain on Stop, force-retain on SessionEnd), and 5 helper skills (/status, /bootstrap, /mental-model, /diagnose, /export-bank). Three activation modes: plugin install (default-on, bank derived from cwd), per-project setup CLI (explicit `.mcp.json`), or direct MCP wire-up (standalone bundle). Source code colocated under plugins/fpl-hsmem/src/. Implements Ruflo-style outcome-feedback patterns (NOTE-004).
Practical cookbook of forgeplan CLI recipes — task-oriented how-to guides covering getting-started, PRD authoring, Evidence patterns, workflow cycles, multi-plugin discipline, AI-pair dispatch, troubleshooting Sprint A-O anomalies, and CLI/MCP quick-reference. Each recipe: Цель → Команда → Пример → Common errors. / Практическая поваренная книга рецептов forgeplan CLI — пошаговые руководства по онбордингу, PRD, Evidence, рабочим циклам, мультиплагинной дисциплине, диспетчеризации AI-агентов, устранению аномалий и справочнику CLI/MCP.
UX laws knowledge base and frontend code reviewer. Analyzes HTML/CSS/JS/React/Vue/Svelte code against 30 Laws of UX principles. Provides actionable recommendations for improving user experience. Use when building UI components, reviewing frontend code, or learning UX best practices. v1.4.1: ux-reviewer agent canonical-lint compliant (LR-1..LR-3).
First Principles Framework (FPF) — thinking amplifier for structured reasoning, system decomposition, and decision-making. Enhanced version with applied patterns, forgeplan integration, and practical commands. Based on the FPF specification by Anatoly Levenchuk. v1.4.1: fpf-advisor agent canonical-lint compliant (LR-1..LR-3).
Unified workflow: Forgeplan artifacts + Orchestra task tracking + Claude Code AI execution. Bidirectional sync, Session Start Protocol with Inbox Pattern, and methodology knowledge base. Requires forgeplan CLI (private app, access via project admin) + Orchestra MCP server. v1.4.1: orchestra-advisor agent canonical-lint compliant (LR-1..LR-3).
npx claudepluginhub forgeplan/marketplace --plugin forgeplan-map-packComprehensive skill pack with 66 specialized skills for full-stack developers: 12 language experts (Python, TypeScript, Go, Rust, C++, Swift, Kotlin, C#, PHP, Java, SQL, JavaScript), 10 backend frameworks, 6 frontend/mobile, plus infrastructure, DevOps, security, and testing. Features progressive disclosure architecture for 50% faster loading.
Harness-native ECC plugin for engineering teams - 67 agents, 279 skills, 94 legacy command shims, reusable hooks, rules, MCP conventions, and operator workflows for Claude Code plus adjacent agent harnesses
A growing collection of Claude-compatible academic workflow bundles. Covers scientific figures, manuscript writing and polishing, reviewer assessment, citation retrieval, data availability, paper reading, literature search, response letters, paper-to-PPTX conversion, and evidence-grounded Chinese invention patent drafting. Rules are organized as reusable skill folders with explicit workflows and quality checks.
Upstash Context7 MCP server for up-to-date documentation lookup. Pull version-specific documentation and code examples directly from source repositories into your LLM context.
Consult multiple AI coding agents (Gemini, OpenAI, Grok, Perplexity, plus codex, antigravity, and grok CLIs when installed) to get diverse perspectives on coding problems
Tools to maintain and improve CLAUDE.md files - audit quality, capture session learnings, and keep project memory current.