diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index c660d6e..72ae644 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -156,11 +156,14 @@ forgekit/ ledger.js # PCM core: content-addressed claims, oracle taxonomy, decayed Beta val, Eq. 3 retrieval, semilattice merge (ADR-0006) ledger_store.js # git-native on-disk ledger (.forge/ledger/): sharded claims, append-only evidence/tombstone logs, normal-form verify ledger_bridge.js # legacy-store bridge: cortex/recall/brain shadow-writes + idempotent `ledger import` + ledger_read.js # merged legacy∪ledger read path: cortex lesson/fact injection, `recall list`, brain's AGENTS.md index all see teammate knowledge from `ledger merge` reuse.js # proof-carrying artifact cache: fingerprint (MinHash+LSH), exact→near→adapt→miss ladder, atlas revalidation + embed.js # optional embeddings tier (ADR-0005): FORGE_EMBED=cmd:|http:, swaps MinHash/Jaccard for cosine in `reuse query`/`ledger query`, disk-cached at .forge/embed-cache.jsonl, silent fallback to MinHash context.js # budgeted context assembly + completeness gate: R(edit) set cover, compression ladder, computed missing-set diagnose.js # doom-loop diagnosis: normalized failure signatures; 3× = diagnosis claim + one-tier escalation imagine.js # consequence simulation (Eq. 4): predicted breaks + minimal dry-run suite via greedy set cover uifingerprint.js # deterministic design fingerprint + slop-distance / conformance gate (no LLM, no screenshots) + taste.js # taste-profile system: applies design-taste profiles (brutalist, corporate, editorial, minimalist, playful; JSON in global/taste/) to parameterize `uicheck design` gate thresholds via --taste dash.js # localhost-only read-only dashboard over the ledger, metrics, and blast radius (node:http, one HTML page) metrics.js # stage-tagged .forge/metrics.jsonl — the measured events every cost figure is computed from cost_report.js # per-stage cost factors as pure arithmetic over metrics.jsonl; composes ONLY measured stages @@ -174,7 +177,14 @@ forgekit/ .claude-plugin/ .codex-plugin/ # plugin manifests → point at global/ + skills/ (no dup beyond the codex skill mirror) install.sh # hardened: idempotent, symlink, backup, no curl|sh bin/ # back-compat shims → src/cli.js + landing/ # hand-authored public landing page; design tokens shared with `forge dash` + scripts/ + build-pages.mjs # generates public/index.html, the live status page, from real repo data ``` +Public site deploy (two independent Pages targets, both built from `landing/` + +`scripts/build-pages.mjs`): `.github/workflows/static.yml` (GitHub Pages — assembles +landing + status page into one `_site/`) · `.gitlab-ci.yml` (GitLab Pages — status +page only). plugin.json, install.sh, and the npm bin **all reference `global/` + `source/`** — no duplication; each channel just runs `forge sync` at the end. A test asserts all three resolve to `global/`. diff --git a/README.md b/README.md index fee7375..a62ad3b 100644 --- a/README.md +++ b/README.md @@ -183,16 +183,20 @@ load-bearing statistic re-graded against primary sources, is the [cognitive-substrate white paper](docs/cognitive-substrate/). -## GitLab Pages landing page +## Public site -Forgekit includes a generated, professional GitLab Pages landing page in [`public/index.html`](public/index.html). It is intentionally static and auto-updated from real repository data (`package.json`, `README.md`, `CHANGELOG.md`, and `reports/benchmarks.md`) by the generator in [`scripts/build-pages.mjs`](scripts/build-pages.mjs). +Forgekit ships two static pages. [`landing/index.html`](landing/index.html) is a hand-authored landing page — the project's front door. [`public/index.html`](public/index.html) is a generated status page, intentionally static and auto-updated from real repository data (`package.json`, `README.md`, `CHANGELOG.md`, and `reports/benchmarks.md`) by the generator in [`scripts/build-pages.mjs`](scripts/build-pages.mjs). ```bash npm run pages:build # offline, deterministic repo-data build BUILD_PAGES_LIVE=1 npm run pages:build # also refresh public GitHub counters ``` -The optional live mode uses the no-auth GitHub repository API with timeouts, retries, jitter, and ETag/Last-Modified caching. GitLab Pages deployment is defined in [`.gitlab-ci.yml`](.gitlab-ci.yml). +The optional live mode uses the no-auth GitHub repository API with timeouts, retries, jitter, and ETag/Last-Modified caching. + +Both pages share one design system (the same tokens as `forge dash`) and are gated by `forge uicheck design` and the rendered `forge uicheck visual` check. + +GitHub Pages is the primary deployment, via [`.github/workflows/static.yml`](.github/workflows/static.yml): the landing page is published at the site root and the status page at `/status/`. GitLab Pages ([`.gitlab-ci.yml`](.gitlab-ci.yml)) is unchanged and only deploys the status page at its root — it does not get the landing page. ## Documentation diff --git a/ROADMAP.md b/ROADMAP.md index 1496233..a9bb853 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -3,7 +3,7 @@ Direction, not promises — shaped by the two field reports this project is grounded in (the SDLC pain-point map and the ecosystem landscape). Open a Discussion to weigh in. -## Now (`master`, v0.5.0) +## Now (`master`, v0.6.0) Cross-tool config for nine agents (Claude Code, Codex, Cursor, Gemini, Aider, Copilot, Windsurf, Zed, Continue) plus MCP config for Roo & VS Code, verification layer (`forge verify`), security gate (`forge scan`), portable memory (`forge brain`), cost @@ -25,6 +25,20 @@ protocol** (ADR-0006) — every stored thing is a claim that carries its evidenc confidence only from independent oracles, and merges across teammates conflict-free (git-native CRDT ledger). +## Shipped — 0.6.0 +- **Embeddings tier** — optional vector backend (`src/embed.js`, ADR-0005 dependency + tier, stdlib fallback kept): `FORGE_EMBED=cmd:` or + `FORGE_EMBED=http:` (OpenAI-compatible), disk-cached at + `.forge/embed-cache.jsonl`; `forge reuse query` and `forge ledger query` replace the + MinHash `rel` term with embedding cosine and print which backend served + (`sim: minhash` / `sim: embed(cmd)`), degrading silently to MinHash on failure. +- **Public site redesign** — the landing page (`landing/index.html`) and generated + status page (`scripts/build-pages.mjs` → `public/index.html`) are rebuilt on one + 8-color/4px design system and gated by `forge uicheck design` and the rendered + `forge uicheck visual` gate; `.github/workflows/static.yml` builds and deploys an + assembled `_site/` to GitHub Pages — landing at the site root, status page at + `/status/`. + ## Next - **Legacy store retirement** — the read-path flip has shipped: every read surface (cortex injection/status, the substrate advisory, routing, `recall list`, brain's @@ -32,13 +46,9 @@ confidence only from independent oracles, and merges across teammates conflict-f so teammate knowledge from `forge ledger merge` reaches injection. The legacy formats (`lessons/*.md`, recall/brain fact files) are still written as the canonical local state; the remaining step is retiring them so the ledger is the only store. -- **Embeddings tier** — optional vector backend (ADR-0005 dependency tier, stdlib - fallback kept) for Eq. 3 retrieval and `forge reuse` near-match, where MinHash is - weak on short specs. -- **Playwright loop** — shipped as `forge uicheck visual` (rendered computed-style - fingerprint through the design gate + 2-viewport screenshots, optional-tier - playwright); still open: interaction checks and feeding verdicts back as oracle - evidence on design claims. +- **Playwright loop** — still open: interaction checks and feeding verdicts back as + oracle evidence on design claims (fingerprinting itself shipped as + `forge uicheck visual`). - **Advisory → gated promotions** — outcome-calibrated routing weights, consolidation promotion (ʿilm→fahm), M6 hazard estimates: advisory today, become blocking only once fixtures measure them (overview §4 honesty register).