Add Motion: the go-to-market operating system on top of the ledger

The ledger answers which contracted capacity is sold, to whom, at what
margin. It says nothing about the motion — the repeatable practice that
turns a customer conversation into a scoped deployment, and turns that
deployment into something the next one reuses.

Motion is deliberately not a parallel entity tree. DEMAND_STAGES already
is the motion, so Motion binds reusable artefacts to the stages of a
demand deal that already exists: an engagement hangs off one deal,
cascade deleted, one per deal by unique constraint.

Nine closed kinds, each declaring which stages it serves, and a starter
library of twelve templates covering all eight open stages.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-17 18:27:03 -07:00
parent 99d165b5e5
commit 516685526c
61 changed files with 13013 additions and 29 deletions
+12
View File
@@ -55,6 +55,7 @@ import { seedCompliance } from './compliance';
import { seedDemandPaper } from './contracts';
import { seedDemand } from './demand';
import { seedHostedLearn, seedLearn } from './learn';
import { seedMotionEngagements } from './motion';
import { seedSupply } from './supply';
const db = createDatabase();
@@ -173,6 +174,12 @@ export async function seedDemo(context: DemoContext): Promise<void> {
// because it is not demo data and must not be removed with `--clear`.
const hosted = await seedHostedLearn(context);
// After the demand book, which owns the deals both engagements hang off, and
// after the base seed has put the starter library in place — an engagement
// whose artifacts came from nothing would demonstrate the folder rather than
// the loop. Run `pnpm db:seed` before `pnpm db:demo`, as the README says.
const motion = await seedMotionEngagements(context);
const facts = await seedFacts(context);
console.log(' 5 capacity commitments (4 live, 1 lapsed), with sites, MSAs and negotiated SLAs');
@@ -197,6 +204,11 @@ export async function seedDemo(context: DemoContext): Promise<void> {
console.log(
` ${learn.total} illustrative concept videos (${learn.added} new), members-only`,
);
console.log(
` ${motion.engagements} Motion engagement(s) with ${motion.artifacts} artefact(s) and ` +
`${motion.scores} qualification score(s) — ${motion.promoted} artefact promoted back into ` +
'the library as a version 2',
);
console.log(
` ${hosted.present} PIG-hosted learn videos (${hosted.added} new)` +
`${hosted.missing > 0 ? `, ${hosted.missing} manifest entries with no file yet` : ''}`,