A single afternoon of work moved ShurIQ from an implicit data model — where every client's knowledge graphs and reports were trapped inside the artifact that produced them — to an explicit one. Account, project, composite knowledge graph, business model canvas. All shipped to local and remote D1, no impact on the manual report runs we do every day.
This page is the Day 1 status of a two-week build. The brief I wrote to myself opens with the line that prompted all of it:
The information lives and dies inside of the report. Every client has multiple knowledge graphs — the ontology, the grammar, the value-flow, the business model canvas — and there's no explicit system for the client to log in and see them in an active way. They just get the report, and that's it. ShurIQ Data Model Specification Notes · 2026-05-07
The fix is structural, not cosmetic. The report studio becomes one app inside a larger ShurIQ ecosystem. Above it sits an account view that owns projects; each project owns its composite knowledge graph (five named layers), its business model canvas, its reports, its sources, and its nightly delta log. The business model canvas is the join key — the place where weekly stack-rank deltas, nightly autoresearch findings, and the initial business intelligence report all converge into one canvas the client can actually read.
Account // the client (AHA, Hasbro, Arc Capital portco, ShurIQ-self) ├── people[] ├── projects[] // unlimited per account; gating is a subscription concern │ ├── archetype // editorial brief · pressure test · cold read · weekly stack rank │ ├── business_model_canvas // 9 BMC blocks · the integration loop │ ├── kg_layers[] // the composite knowledge graph (DKR) │ │ ├── domain_ontology // extractEntitiesOnly · vertical-scoped │ │ ├── discourse_grammar // claims · evidence · sources │ │ ├── value_flow // REA semantics │ │ ├── bmc_overlay // BMC blocks as ontology │ │ └── sbpi_score // 5 dimensions, vertical-weighted │ ├── reports[] // existing report studio rows roll up here │ ├── chat_sessions[] // scoped to project context │ ├── sources[] // transcripts, briefs, search corpora │ └── kg_deltas[] // nightly autoresearch tracking └── dashboard_views[] // composite KG viewport config
The five layer names are deliberate. Domain ontology is the entity-only graph for the vertical. Discourse grammar is the claim-evidence-source layer that makes every score traceable. Value flow uses REA (resource-event-agent) semantics. BMC overlay puts the nine canonical canvas blocks into the graph as concept nodes. SBPI score is the five-dimension brand power layer. Together they compose into one analyzable surface — the client's custom knowledge repository, what we've been calling the DKR.
0006_account_project_hierarchy.sqlFive new tables and two new columns on the existing reports row. Foreign keys, indexes, an inline SQL backfill, and a clean separation from the v0.6 grammar linter work that was already in flight.
accounts id · name · vertical · owner_email · subscription_tier · status projects id · account_id · name · archetype · status · sources kg_layers id · project_id · layer_type · infranodus_graph_ref · extract_mode · counts · version business_model_canvas project_id (PK) · 9 BMC blocks · source_report_id kg_deltas id · project_id · kg_layer_id · delta_type · summary · payload reports.account_id nullable · backfilled from client_id reports.project_id nullable · backfilled to 'default-' || client_id
| Account | Vertical | Default project | Reports |
|---|---|---|---|
| hasbro | consumer | default-hasbro | 2 |
| academy-of-general-dentistry | nonprofit | default-academy-of-general-dentistry | 1 |
| aha | healthcare | default-aha | 1 |
| trudata | sap-services | default-trudata | 1 |
Five new interfaces (Account, Project, KGLayer, BusinessModelCanvas, KGDelta) added to app/src/lib/types.ts and mirrored as *Row shapes in app/functions/lib/types.ts for the Worker. Existing Report and ReportRow got account_id and project_id fields at the top, leaving every other field — including the v0.6 linter columns added last week — untouched.
All of this lives on feat/account-project-hierarchy. Master is unchanged. The v0.6 grammar work in your modified-but-uncommitted files (generate.ts, publish.ts, grammar.ts, linters.ts) was not touched. The manual reports we run every day are unaffected by anything in this commit.
| Day | Date | Work | Status |
|---|---|---|---|
| D1 | May 7 | Schema migration. Account/project/KG-layer/BMC tables. Backfill local + remote. TypeScript types. | shipped |
| D2 | May 8 | Cold-read brief on ShurIQ-self. Template applied. GTM plan kicks off in parallel. | queued |
| D3 | May 9–10 | Populate BMC table for ShurIQ. Wire intelligence-brief skill into the BMC autopopulate. Run extractEntitiesOnly graph for the ShurIQ ontology layer. | queued |
| D4 | May 11 | Account dashboard route in the report studio. Lists projects, latest reports, latest stack rank, BMC snapshot. | queued |
| D5 | May 12 | Composite KG viewer. Multi-graph viewport with gaps, concepts, and topical-cluster modes borrowed from the InfraNodus app. | queued |
| D6 | May 13 | Weekly stack-rank → BMC overlay delta wired. First ShurIQ-self stack rank deployed. | queued |
| D7 | May 14 | Nightly InfraNodus delta scan via the scheduler skill. "What changed last night" card on the account dashboard. | queued |
| D8–9 | May 15–16 | Telegram Totem revival, round one: Orchestrator → /intake (0–20 rubric), Scout → /scout, Content Factory → /cf-create. Skills-first. | queued |
| D10 | May 17 | ShurIQ Business Intelligence Report. Competitive analysis. Fair-dimensions stack rank. Deploys at shuriq-self-bi.pages.dev. |
queued |
| D11 | May 18 | Investor artifact — What ontology engineering needs to become, and what we're already shipping. Editorial page deployed. | queued |
| D12–14 | May 19–21 | Telegram Totem revival, round two: Memory (Letta-backed three-tier), Knowledge (unified ontology slash command), Gap Minder (multi-platform scheduled scan). | queued |
$1k/mo offer to 3–4 existing Shur Creative customers, end of week 1. Goal: $9k of commitments by end of week 2.
v0.6 grammar already deployed. Add image swap-out for graph-view snapshots per the session transcript. Republish on the legacy account so the existing URL stays live.
Same template as the ShurIQ-self run. Waiting on a name from you.
Investigation found that letta-cowork is an Electron desktop app, not the Obsidian plugin we remembered. Pivot: ship a ShurIQ skill bundle on top of the existing Claude Cowork plugin. Custom plugin deferred.
feat/account-project-hierarchy until the data model is proven against a real account dashboard.Why: the manual reports we run every day cannot be allowed to break. A feature branch is the safest container for the schema buildout.The spec names SHACL as part of KG Build. There is no runtime validator today; the cost-benefit favors letting the layer schema stabilize first. Revisit after D7.
No local fork exists, only clippings. The intelligence-brief and mapupdate skills already cover the synthesis loop sufficiently for the MVP. Revisit post-week-two.
Tangential to the data model. Belongs in a separate creative session, not on the critical path.
Investigation found no existing bridge from the Letta subconscious agent to external chat surfaces. You confirmed this is a separate workstream, out of scope for the two-week plan.
projects/shur/business-model/, or somewhere else?This is an internal status report. It documents what changed in the data model on May 7, 2026, the sequence I'm running for the next two weeks, and the decisions you and I made along the way. It is not a client deliverable. It is not pitch material. It is the receipt for one day of structural work.
The investor-facing version of some of this content lands on D11 as a separate editorial page — What ontology engineering needs to become, and what we're already shipping. That page reframes the same shipped capabilities as a market position. This page documents the build.