The build log
One entry per shipped build prompt — what was built, what was deliberately left out, and the tests behind it. Generated from the product repository's own implementation notes rather than written for this page.
Why this is public
A logo wall is an argument from other people's confidence. This is an argument from evidence: every entry names a segment, a date and a decision, and the decisions include the ones that went the other way. It is also the only asset on this site a competitor with a marketing team cannot reproduce, because reproducing it would mean publishing their own gaps.
Import & migration engine [S11]
Import as a product surface, not a utility (S-04). Closes S11.
Search [S10]
Three engines, one permission model. Closes G-46, and lays the groundwork G-53 needs by putting the object revision on every embedding now rather than in the AI phase.
Component risk & supplier portal
"a supplier's session cannot fetch an unshared part by direct ID."
Suppliers, manufacturers & AML/AVL
A supplier already existed as a thin record. B-22 adds three more, and the separations are not bureaucratic:
Workflow engine, rules engine & approvals
"Durable: an instance survives restart and resumes correctly."
Impact analysis & mass change
The prompt opens with a constraint worth repeating: "No AI in this prompt — the agent in B-29 will call these services, not replace them." Everything here is a query and a rule, and the same question asked twice returns the same bytes. A test asserts that, bec
Change management
Problem Report, ECR, ECO, ECN, Deviation, Waiver and Stop Ship are one ObjectType discriminated by changeType, not seven types. They share every field, every relationship and every lifecycle state; what differs is which fields matter and who approves.
Compare, where-used and saved views
The prompt's rule — "Both sources go through B-15, so the diff always compares like with like" — is not an optimisation. A comparison with a resolution on one side and a stored bill on the other reports every effectivity and variant decision as a difference: a
Data grid and BOM workbench
The prompt says "treat performance and paste fidelity as requirements, not polish." Both are decided in src/lib/grid/model.ts, which has no DOM in it and is tested without a browser; src/components/grid/DataGrid.tsx renders over it.
Effectivity, variants and baselines
B-15 already had variant option sets, rules, selection validation and baselines, because the engine could not be built without something to consume. So this prompt is mostly one substantial replacement and one genuinely new construct.
Configuration resolution engine [GATE]
Closes G-02, the largest omission in the original inventory, plus the engine-side of G-16 (effectivity) and G-17 (variants). Segment S05 complete.
Structure model [GATE]
Along with B-06 and B-08, this is foundation. It also closes two limitations recorded earlier — B-09's workspaces do not stage relationships and B-10's the closure ignores workspaces — because both had the same root cause and this is where it lives.
Document management
Almost nothing here is new machinery. A document is an ObjectType with B-08's revision and lifecycle semantics, B-09's locking and B-12's bytes; this prompt is the seam where the three meet plus the things that are genuinely document-specific — markup, control
File vault
Infrastructure, not a feature — which mostly means the failure modes are storage failure modes and the tests are about them.
UOM, materials, specifications and localisation
Four subsystems that have nothing to do with each other except that everything else depends on all of them.
Item master and classification
Schema — ClassNode (environment-scoped, so in the config snapshot), StructurePath, RelationshipType.buildsStructure, and the part attribute set from §4: criticality, hazardous, regulatory flags, preferred status.
Workspaces, locking and deep copy
Every feature here is about the same situation: two people and one part. The assertions worth reading are the ones where the second person's work survives.
Revision, lifecycle and numbering [GATE]
This is the prompt the sequence flags as most likely to be wrong in a way that is expensive later. Everything here is identity, and identity is the one thing a customer cannot change after the first drawing is printed.
Tenant config lifecycle & sandbox
Schema — ConfigEnv discriminator (PRODUCTION / STAGING / SANDBOX) on ObjectType, RelationshipType and LifecycleDef; ConfigVersion for immutable snapshots.
Object engine
Definition layer — ObjectType, AttributeDef, RelationshipType, LifecycleDef, LifecycleState, LifecycleTransition.
Entitlement, branding & terminology
Plans and seats — Plan, TenantPlan, src/lib/billing/features.ts, src/lib/billing/seats.ts.
RBAC, audit trail & notifications
RBAC — src/lib/authz/: actions.ts (9 verbs, 16 resources), policy.ts (grants for all 10 roles), can.ts (the single entry point) with assertCan / ForbiddenError.
Application shell
Schema — Entitlement (shape adopted from crm-vb-co), NotificationAggregate, UserPreference, SavedView.
Tenancy, identity & isolation
Schema (prisma/schema.prisma) — Tenant, BusinessUnit, Plant, Department, Team, Membership, ExternalOrg, plus User/Account/Session/VerificationToken for Auth.js. Every tenant-scoped model carries tenantId with an index leading on it.
Scaffold
Config: package.json, tsconfig.json, tsconfig.scripts.json, next.config.ts, postcss.config.mjs, eslint.config.mjs, vitest.config.ts, components.json, Dockerfile, .env.example, .gitignore.