ForgeKitFORGEKIT

Build Log

Forge — The Front Door Decision

July 8, 2026

A real plumber prospect (new Housecall Pro user, phone flooded with customer texts) forced the sidecar-vs-fit-shop fork — and Zeb's pushback on a hedged 'both' answer produced the real decision: Forge is the front door, not the back office.

ForgeProduct DecisionPositioningStrikeOS
1
product identity decided
1
Strike + Anvil pair captured
3
stale doc claims corrected (Gino, gino-pilot.md, key-docs table)

Timeline

Start
Ignite + Charge received
Plumber feedback + Housecall Pro competitive analysis (GPT exchange) delivered as the Charge
Early
Orientation + pulse
Found the 2026-06-21 Strike ('memory and attention system, not a CRM') — the engine had pre-decided the positioning question
Mid
Two corrections from Zeb
Gino is a test org, not the demo target; the plumber discovery conversation had already happened (flooded phone)
Mid-late
The pushback
'It's now both? really?' — hedged both-segments answer rejected; front-door reframe produced
Close
Decision made durable
docs/forge-front-door-decision.md written; Anvil + Strike captured; CLAUDE.md + PROJECT_INDEX corrected
Post-wrap
Journal under-reporting found and fixed
Zeb noticed the live page showed none of the 3 spins engine-health counted — renderer never displayed chapters[].spins; fixed with a public/internal split (option 2)

What shipped

docs/forge-front-door-decision.md — the durable decision record: identity (front door), rejected options with reasons (HCP sidecar, fit-shop CRM identity), the defensibility argument (shop memory/judgment vs. platform AI roadmaps), plumber pilot scope, v1 build table, positioning language, open items

forgekit-os/journal/anvils.md — 'Is Forge a sidecar to Housecall Pro, or a fit-shop CRM?' (the fork evaporated when the question changed from segment selection to product placement)

forgekit-os/journal/strikes.md — 'Forge is the front door, not the back office.' Sharpens the 2026-06-21 Strike from what Forge is into where it lives

CLAUDE.md + PROJECT_INDEX.md — Gino's Electric corrected from 'pilot/first client' to 'test org modeled on the real electrician'; dead docs/gino-pilot.md reference replaced with the new decision doc; Forge status now points at the front-door identity

build-session.mjs — chapter renderer added with a public/internal split: public build-log pages stay summary-level (engine is private, per the Phase 2A IP boundary), full chapters[].shipped/spins/wins render to forgekit-os/journal/build-log/<slug>.html which never deploys. Both recent session pages rebuilt.

inferred-gates.config.mjs — DIFF_EXCLUDE + INFERRED_RULES moved out of build-session.mjs per the engine-guard line-limit split (the script's own FREEZE note called for exactly this); stale docs/forge-journal/ exclude paths fixed to forgekit-os/journal/

retro.mjs — forgekit-os/journal/build-log/ added to the safe-generated commit globs so internal pages are auto-committed by the retro pipeline

What happened to the decision between being the sidecar or the fit shop? it's now both? really?

Zeb — the pushback that rejected the hedge and produced the front-door Strike