FORGE Project State

reference· current· updated Tue Apr 07 2026 00:00:00 GMT+0000 (Coordinated Universal Time)· decay daily· CCoS

Current State

Phase: 3 — Read path SHIPPED. Ready for npm run build and first real Claude query. Last commit: 66a4bf7 ignore .next.nosync and node_modules.nosync (Phase 3 code written in sandbox, not yet committed). What shipped this session:

  • Verified production build clean on Damir's machine: next build → compiled in 4.4s, 4 static pages, 102 kB First Load JS.
  • Fixed iCloud build-artifact corruption. .next and node_modules now live in .next.nosync and node_modules.nosync behind symlinks. iCloud ignores .nosync paths, so no more "file 2.ts" duplication.
  • Fixed tsconfig.json to exclude node_modules.nosync and .next.nosync from the TS include glob (otherwise tsc scans Next's source and trips on webpack/module.d.ts).
  • Cleaned up stray ~/package-lock.json left in home from a mis-targeted earlier attempt.
  • Confirmed repo is live at github.com/dsim-oss/forge, visible in GitHub Desktop after remove + re-add.

What's blocked:

  • Nothing on the build side. tsconfig change needs a commit + push.
  • Vercel deploy still pending (separate step, not blocking Phase 3 work).

What shipped this session (Phase 3):

  • Design system in app/globals.css: dark near-black bg, Inter + JetBrains Mono via Google Fonts, forged-copper accent (#e58a3a), namespace dot colors (personal emerald, work sky, ventures amber, external violet, sensitive rose, agents fuchsia, meta zinc), full .prose styles for markdown pages, keyboard hint kbd styling.
  • app/layout.tsx — sticky top bar with FORGE mark, home / meta nav, phase marker, footer with the "capture frictionless, commit deliberate" tagline.
  • lib/namespaces.ts — namespace metadata (label, color, description, hidden flag for sensitive + raw). Single source of truth for namespace colors across components.
  • lib/indexes.ts — loaders for concepts.json, entities.json, dates.json. Falls back to empty when indexes not built.
  • lib/markdown.ts — remark + remark-gfm + remark-html pipeline.
  • lib/vault.ts — added listSearchEntries() producing lightweight {slug, title, type, namespace, snippet} records for the client search index.
  • components/SearchBar.tsx — client component. MiniSearch index built on mount. / to focus, ↑↓ to navigate, Enter to open, Esc to close. Namespace dot rendered per hit.
  • components/QueryPanel.tsx — client component. Textarea + submit button, ⌘↵ shortcut, renders answer and clickable citations.
  • app/api/query/route.ts — POST endpoint. Scores vault pages by keyword overlap, picks top 6, excludes sensitive by default. Calls Claude Sonnet 4.6 via raw fetch (no SDK dep) using ANTHROPIC_API_KEY. Dry-run mode when the key is missing: returns the candidate list and a canned explanation so the plumbing is verifiable without a key.
  • app/wiki/[...slug]/page.tsx — dynamic route. generateStaticParams() enumerates every non-sealed page. Renders header with type/status/updated/decay/owner, prose markdown body, sidebar with tags, linked entities, linked concepts, linked dates, and sources. Breadcrumb shows namespace dot + slug.
  • app/page.tsx — rewritten homepage. Hero, search bar, query panel, namespace grid with counts, recent pages list.
  • package.json — added minisearch@^7.1.0.
  • Sandbox npx tsc --noEmit passes clean.
  • Vault indexes rebuilt: 9 pages, 0 entities, 0 dates (no frontmatter has linked_entities or linked_dates yet, which is expected for Phase 2 seeds).

What's blocked:

  • Next npm run build verification on Damir's machine (sandbox can't cleanly rebuild inside iCloud).
  • Commit + push of Phase 3 code.
  • ANTHROPIC_API_KEY in .env.local to flip the query endpoint from dry-run to real answers.

Next task:

  1. On Damir's machine: npm install (pulls minisearch on the real side), then npm run build.
  2. Commit + push Phase 3.
  3. Add ANTHROPIC_API_KEY to .env.local (gitignored). Hit the homepage, ask "what is FORGE?" as the first real query.
  4. Phase 4 starts with ingest: voice capture, photo capture, text paste, diff preview, confirm-to-commit.

History

  • 2026-04-07 19:35 — Phase 2 scaffold written to disk. Build verification deferred to Terminal.
  • 2026-04-07 22:30 — Phase 2 build verified clean. iCloud build-artifact corruption diagnosed (iCloud was duplicating files in .next causing TS2300 Duplicate identifier). Fixed with .nosync symlink trick. tsconfig exclude list updated. Phase 2 closed.
  • 2026-04-07 23:10 — Phase 3 shipped: design system, wiki dynamic route, MiniSearch search bar, QueryPanel, Claude query endpoint with dry-run fallback. Typecheck clean in sandbox.

Open Questions

  • Is forge.simunac.com already pointed at Vercel, or does the DNS still need a CNAME?
  • Do we want the nightly lint + index rebuild to run as Vercel Cron, GitHub Actions, or a local LaunchAgent on the machine that holds the iCloud copy?
  • Should the .nosync symlink pattern be documented in README.md as a setup step for anyone else who clones the repo, or is this permanently a one-machine repo?