Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -414,3 +414,4 @@ windows CI), брать MAX как worst-case; если worst-case <100ms — CL




Original file line number Diff line number Diff line change
Expand Up @@ -110,3 +110,4 @@ Agent SDK). The spawn-only boundary is the same trust seam rule 22 uses for the
| ADR-003 | ADR | informs (the bin/ allow-list this preserves) |
| RFC (Pillar C daemon, pending) | RFC | based_on (the RFC that presumes this packaging) |


8 changes: 5 additions & 3 deletions .forgeplan/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@ integrity:

# ─── LLM provider (uncomment to configure) ───────────────────────────
llm:
provider: gemini # openai | claude | gemini | ollama | custom
model: gemini-3-flash-preview
api_key_env: GEMINI_API_KEY # env var containing API key
provider: claude-code
model: claude-opus-4-8
# provider: gemini # openai | claude | gemini | ollama | custom
# model: gemini-3-flash-preview
# api_key_env: GEMINI_API_KEY # env var containing API key
# # base_url: https://... # override for custom endpoints
# max_tokens: 4096
# temperature: 0.7
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ last_modified_by: claude-code/2.1.201
links:
- target: RFC-032
relation: informs
- target: PRD-038
relation: informs
status: active
title: 'E3 layer-render seam checkpoint: 165 tests PASS + CI green + live-verified emitted-layer render'
---
Expand Down Expand Up @@ -105,3 +107,4 @@ descend into `z.decisions` → emitted 8-zone layer renders.
- **PR #165** — the branch carrying the E3 seam code (commit `e9c21b5` + follow-ups).



Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ last_modified_by: claude-code/2.1.201
links:
- target: RFC-033
relation: informs
- target: PRD-038
relation: informs
status: active
title: 'Onboarding tour (Pillar B) build checkpoint: 186 tests + svelte-check 0 + 4-surface review PASS'
---
Expand Down Expand Up @@ -83,3 +85,4 @@ evidence_type: test
tour narration next map-pack run.



Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ last_modified_by: claude-code/2.1.201
links:
- target: RFC-034
relation: informs
- target: PRD-038
relation: informs
- target: ADR-010
relation: informs
status: active
title: 'Pillar C live agent works end-to-end: daemon + local CC answered grounded + drove show_on_map camera; 153 tests, smoke PASS'
---
Expand Down Expand Up @@ -93,3 +97,5 @@ evidence_type: test
`show_on_map(node)`.




Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
---
depth: standard
id: EVID-098
kind: evidence
last_modified_at: 2026-07-07T14:19:25.320158+00:00
last_modified_by: claude-code/2.1.202
links:
- target: RFC-035
relation: informs
status: active
title: 'RFC-035 chat panel v2 fully verified: window + status + tabs + live tokens/instances + magic launcher (771 tests, live)'
---

## Summary

RFC-035 (chat panel v2) is fully implemented across four commits on
`feat/idef0-onboard-agent-phase1` and verified by automated gates **and**
live browser testing. Supersedes the pre-fix BLOCKER EVID-097 (which reviewed
the incomplete Wave-1 integration).

Commits: `286ced8` (Wave 1 — window/status/tabs/Info scaffold), `1cb6edb`
(Wave 2 — live tokens + instance discovery + corner resize), `18bf9f8`
(polish — /health carries instance data so Info populates on open),
`60ae14a` (magic launcher moved to onboard header).

## Automated gates (run against MAIN)

| Gate | Result |
|---|---|
| `node agent/scripts/smoke.mjs` | exit 0 |
| `npx vitest run src/widgets/map-chat src/shared/ui` | pass |
| full `npx vitest run` | 58 files / 771 tests pass |
| `npx svelte-check --threshold error` | 0 errors (7 pre-existing warnings, unrelated) |
| rule-24 grep | OK — FloatingWindow + magic Button are clean shared/ui primitives; no upper-layer `:global()` re-skin |

## Live browser verification (Playwright, real daemon)

- **FR-1 window**: dock↔float toggle detaches/re-docks; 8 resize grips (4 edges
+ 4 corners) present with `nwse/nesw/ew/ns` cursors; geometry persists +
clamps to viewport on restore (I4).
- **FR-2 status**: compact `online` / `offline` dot reflects daemon liveness
(verified both — killing the daemon flips it).
- **FR-3 tabs**: Chat|Info switch cleanly (fixed a real CSS-cascade stacking
bug where an author `display:flex` defeated `[hidden]`); switching preserves
the mounted chat/stream.
- **FR-4/FR-5 Info tokens**: after a real turn, Info shows
`input 105,932 · output 702 · $3.0390` + cumulative — the NATIVE SDK
`result.usage` / `total_cost_usd` fields, forwarded verbatim.
- **FR-6 instances**: with a 2nd daemon live, Info shows
`sees 1 other · Work:7432`; the daemon registers in
`~/.forgeplan-web/instances.json` with `kind:agent`; the /health probe
carries the data so the row populates on chat open with zero WS/subprocess.
- **Magic launcher**: the Ask button (animated iridescent rainbow gradient +
twinkling sparkles) sits in the onboard header off the map, opens the
chat, toggles to Close chat.

## Invariants held

- **I1** read-only preserved (no mutation path; /health is GET-only, rule 22
intact — browser to daemon direct, no /api change).
- **I2** no subprocess regression — lazy `query()` holds; probe / idle chat /
Info-open spawn zero `claude` subprocesses (the earlier P0 CPU meltdown fix,
commit `e42040e`, is not regressed; the /health-carries-instances polish
opens no WS).
- **I3** forward-compatible wire — usage/capabilities/otherInstances additive;
PROTOCOL_VERSION 1 to 2; old browser ignores unknown, defaults arrays empty.
- **I4** never restore off-screen — clampFloating on restore (unit-tested).
- **I5** single registry writer — `agent/lib/registry.mjs` reuses the
instances.json FORMAT (atomic tmp+rename) with `kind:agent`; does NOT
import the core `bin/lib/registry.mjs` (cross-package). Known:
simultaneous-startup write race can briefly drop a row; self-heals via the
30s heartbeat — pre-existing registry contention, not introduced here,
acceptable for same-machine multi-project use.

## Notes

Two real bugs were caught by LIVE testing that the unit suite structurally
cannot catch (documented for future contributors): (1) the tab-stacking
CSS-cascade bug; (2) the `.map-chat-pos` stacking-context trapping the
FloatingWindow's `position:fixed`. Both fixed + re-verified live.

## Structured Fields

verdict: supports
congruence_level: 3
evidence_type: test


Original file line number Diff line number Diff line change
Expand Up @@ -301,3 +301,4 @@ And neither directory contains a `node_modules/` subdirectory




2 changes: 2 additions & 0 deletions .forgeplan/prds/PRD-036-composed-map-graft-onboarding-t4.md
Original file line number Diff line number Diff line change
Expand Up @@ -206,3 +206,5 @@ Capability language only; component/file mapping is informative and lives in Con





Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ links:
relation: based_on
- target: PRD-037
relation: based_on
status: draft
status: active
title: Composed-map onboarding tour + live local-agent guide (T4 Phase-3)
---

Expand Down Expand Up @@ -570,3 +570,7 @@ Handed to the T4 Phase-3 **RFC** and **ADR**:







Original file line number Diff line number Diff line change
Expand Up @@ -484,3 +484,4 @@ Targets for the downstream `tester`/`coder` (hooks, not full cases):




Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ last_modified_by: claude-code/2.1.202
links:
- target: RFC-034
relation: based_on
status: draft
status: active
title: Chat panel v2 — floatable/dockable/resizable window + agent Info tab (status, model, settings, token usage, instance discovery)
---

Expand Down Expand Up @@ -232,3 +232,5 @@ the web switcher — no new discovery mechanism.
internals from map-chat).




Original file line number Diff line number Diff line change
Expand Up @@ -312,3 +312,4 @@ Structured `{ path, message, severity }`, all errors collected, never thrown. Re




5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ dist-*/
.forgeplan/claims/
.forgeplan/journal/
.forgeplan/session.yaml
.forgeplan/anomalies-journal.jsonl
.forgeplan/map/.work/

# local-only scratch (never shared)
.local/

# editor / OS
*.log
Expand Down
106 changes: 106 additions & 0 deletions docs/CLAUDE-PLUGINS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# Claude Code plugins

This repo enables 11 Claude Code plugins from the
[`ForgePlan/marketplace`](https://github.com/ForgePlan/marketplace).
The marketplace is **not vendored** — Claude Code clones it into
`~/.claude/plugins/cache` on first start.

**Source of truth:** [`.claude/settings.json`](../.claude/settings.json)
keys `extraKnownMarketplaces.forgeplan` and `enabledPlugins`. To add /
remove a plugin for the whole team — flip the boolean there.

---

## Trust handshake (once per machine)

On first open of this repo Claude Code prompts:

1. **Trust folder** → `extraKnownMarketplaces` activates.
2. Install the `forgeplan` marketplace → **Yes**.
3. Install each enabled plugin → **Yes to all**.
4. Run `/reload-plugins` (or restart). Commands appear in `/help`,
agents in `/agents`.

If the prompt didn't fire (e.g. resumed session): `/plugin marketplace
add github:ForgePlan/marketplace` then `/reload-plugins`.

---

## Installed plugins

| Plugin | What it gives | Entry points |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
| `dev-toolkit` | `/audit` (4-agent review), `/sprint`, `/recall`, `/report`, dev-advisor agent, safety hook, `forge-report` skill | `/dev-toolkit:audit`, `/dev-toolkit:report`, ... |
| `forgeplan-workflow` | `/forge-cycle`, `/forge-audit`, forge-advisor agent, methodology KB | `/forgeplan-workflow:forge-cycle` |
| `forgeplan-orchestra` | `/sync`, `/session` — **requires Orchestra MCP server `orch`**, not wired here. Plugin loads silently; `/sync` is a no-op. | `/forgeplan-orchestra:session` |
| `forgeplan-brownfield-pack` | C4 / DDD / MADR ingest mappings + playbooks (alpha) | mappings, no commands |
| `fpf` | First Principles Framework: `/fpf`, `/fpf-decompose`, `/fpf-evaluate`, `/fpf-reason` + 224-section knowledge base | `/fpf:fpf`, `/fpf:fpf-reason` |
| `laws-of-ux` | `/ux-review`, `/ux-law`, ux-reviewer agent, auto-hint hook on `.html` / `.css` / `.jsx` / `.tsx` / `.vue` / `.svelte` | `/laws-of-ux:ux-review` |
| `agents-core` | 11 agents: debugger, code-reviewer, error-detective, performance-engineer, production-validator, coder, planner, researcher, reviewer, tester, tdd-london | `Agent({subagent_type: "agents-core:<name>"})` |
| `agents-domain` | 11 framework specialists: typescript-pro, frontend-developer, nextjs-developer, golang-pro, mobile-app-developer, ... | `Agent({subagent_type: "agents-domain:<name>"})` |
| `agents-pro` | 21 agents: security-expert, adr-architect, ddd-domain-expert, ml-developer, ui-designer, ... | `Agent({subagent_type: "agents-pro:<name>"})` |
| `agents-github` | 7 agents: pr-manager, issue-manager, release-manager, repo-architect, multi-repo-manager, project-board-manager, workflow-engineer | `Agent({subagent_type: "agents-github:<name>"})` |
| `agents-sparc` | SPARC: specification → pseudocode → architecture → refinement + sparc-orchestrator (**experimental**) | `Agent({subagent_type: "agents-sparc:<name>"})` |

---

## When to use what

| Situation | Reach for |
| ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- |
| Standard+ Forgeplan cycle in chat | `/forgeplan-workflow:forge-cycle "<task>"` (wraps `route → new → validate → score → activate`) |
| Decision / system decomposition (Deep+) | `/fpf:fpf-decompose` or `/fpf:fpf-reason` (3+ hypotheses → ADI), free even without LLM provider in `.forgeplan/config.yaml` |
| Frontend UX review of a Svelte / HTML change | `/laws-of-ux:ux-review` |
| Quick parallel code audit (smoke) | `/dev-toolkit:audit` |
| Multi-step task report (build / audit / migrate) | `/dev-toolkit:report` or `forge-report` skill |
| Need to spawn a typed expert agent | `Agent({subagent_type: "<plugin>:<name>"})` from `agents-{core,domain,pro,github}` |

**Avoid for production work without explicit ask:** `agents-sparc`
(marked experimental).

---

## Conflicts and stacking

- **`forge-safety-hook.sh` runs from two sources** — the local
`.claude/hooks/forge-safety-hook.sh` and `forgeplan-workflow/hooks/
scripts/forge-safety-hook.sh` both subscribe to `PreToolUse:Bash`.
Hooks run sequentially; both are read-only checks, no state mutation.
The duplicate is intentional defence in depth on `git push --force` /
`rm -rf /` / `npm publish`.
- **Slash-command namespacing** prevents collisions — every plugin
command is `/<plugin>:<cmd>`. Project-local commands (none here yet)
would not need the prefix.
- **`agents-core:code-reviewer`** has no project-local override in this
repo (`.claude/agents/` is absent). The plugin agent is what runs
when you call `Agent({subagent_type: "agents-core:code-reviewer"})`.
- **`forgeplan-orchestra`** is enabled but inert — it needs the
Orchestra MCP server `orch`, which is not wired in `.mcp.json`.
Calling `/forgeplan-orchestra:sync` is a no-op (does not error). Wire
`orch` separately if you want bidirectional Orchestra sync.

---

## Update / disable

```bash
# inside Claude Code:
/plugin marketplace update forgeplan # pull newer plugin versions
/plugin disable <name>@forgeplan # disable one plugin
/plugin uninstall <name>@forgeplan # remove entirely

# or for the whole team — flip the boolean:
$EDITOR .claude/settings.json # enabledPlugins.<name> = false
```

After editing `settings.json`, run `/reload-plugins` (or restart
Claude Code) for the change to take effect.

---

## Verification

After install, `/help` should list namespaced commands from each
plugin (e.g. `/dev-toolkit:audit`, `/fpf:fpf`, `/laws-of-ux:ux-review`).
`/agents` should show pluginned agent names. If commands are missing —
`/reload-plugins` and re-check `enabledPlugins` in `settings.json`.
Loading
Loading