Sprint Plan: Repository, Pipeline, and Order of Work
Final pass, written 2026-07-27 for the 2026-07-28 kickoff. The wireframe prototype is scaffolding, not the target: the feature surface comes from the recommended sprint-1 cut at heading 3 of kg-wireframe-feature-register-2026-07-27, and the working method comes from the seven stages in section 1 of feature-development-process-guide. Neither is restated here. This document supplies the three things those two assume and do not carry: the repository, the pipeline, and the ordering.
Success condition: an issue can be opened, a branch cut, and a prototype merged, with the registries and gates the specs already assume.
Revised 2026-07-28 by 2026-07-28-sprint-decisions. Six changes land in this plan: D-8 and P-7 are closed rather than pending (section 5); WI-02 is rescoped from four readers to one (section 5);
route-gate.pygained four checks (section 4); the template gates stay blocked and now also depend on D-9; View A leaves the build list (section 6); and the first Claude Design pass is replaced by a single-screen prompt.
0. What is true today
Stated up front so nothing below reads as already built.
| Piece | State on 2026-07-27 |
|---|---|
Report Studio repository, production branch main |
Live |
| GitHub org and monorepo | Do not exist. Blocked on the slug decision (section 2) |
| Jira project | Does not exist |
registries/channels.yaml, forms.yaml, readers.yaml |
Drafted 2026-07-27 in monorepo-seed/registries/ (this folder), staged for the repo; adjudication pending. Visibility columns and R-02 to R-04 names stay open for the session |
route-gate.py |
Drafted 2026-07-27, extended 2026-07-28 at monorepo-seed/gates/route-gate.py, selftest 13 of 13 passing; not yet in a repo or CI |
| Four template gates (primitive spec Part E.3) | Not written. Blocked on P-8 and on the registries existing |
grammar-gate.py |
Exists as a script in projects/shur/report-grammar/. Decided 2026-07-17 to move into CI when CI exists |
| Work-item store | None. TaskNotes retired 2026-07-25 with no replacement (decision D-4 open) |
| Reader records | R-01 Thomas, 2 of 4 work modes written. R-02 to R-04 removed 2026-07-28 (C-2) |
| Route declarations | Zero real routes exist as files |
1. The monorepo
Layout synthesized from the adjudicated destinations in repo-inventory, the kickoff coordinates in 2026-07-26-dashboard-delivery-grammar section 9.1, and the CI needs below. The routing model, which repo-inventory did not state, is the addition: routes are YAML config under PR review, and the registries are files in the repo, not notes in the vault.
<slug>/ # name pending the org decision, section 2
├── apps/
│ ├── report-studio/ # canonical copy is the OUTSIDE repo (~/Documents/projects/shuriq-report-studio/), adjudicated 2026-07-17; vault app/ copy archives after migration
│ ├── command-center/ # View B. Renders armed routes. KG's export enters as intake, not as source
│ └── atlas/ # static ops site, or stays a deploy artifact (repo-inventory open note)
├── modules/
│ ├── dashboard-design-studio/ # View A. DEFERRED 2026-07-28 (F-1); no build this sprint
│ ├── slack-agent/ # from projects/shur/slack-agent/
│ └── viz-studio/ # from ~/Documents/projects/viz-studio/
├── engines/
│ ├── kg/ # shuriq_kg package
│ └── competitive-intel/ # SBPI semantic layer; client data and deliverables stay in the vault
├── interfaces/
│ └── okf/ # vault-to-code bridge: mirror, extractor, serving Worker, MCP server
├── registries/
│ ├── channels.yaml # CH-01 to CH-12 plus the three missing fields per channel: address, freshness SLA, visibility constraint
│ ├── forms.yaml # F-01 to F-20. F-21-onward closed 2026-07-28 (C-5): modules carry names until built
│ ├── readers.yaml # R-01 to R-04
│ └── routes/<client>/*.yaml # one file per route; the system of record for what a client sees
├── intake/
│ └── <slug>/manifest.yaml # deposits per process guide stage 1; KG's Command Center export is deposit 1
├── gates/
│ ├── route-gate.py # to be written, work item WI-03
│ ├── template-gates/ # the four checks from primitive spec Part E.3, after P-8
│ └── grammar-gate.py # moves from projects/shur/report-grammar/; rules ship, rationale stays vault-private per repo-inventory adjudication 3
└── .github/
├── ISSUE_TEMPLATE/ # route-proposal.md, channel-registration.md, feature-spec.md
└── workflows/ # CI wiring for the gates
Satellites for sprint 1, behind interfaces, per repo-inventory adjudication 4: Aethelgard, totem-agent-framework, myKG. Simulation Studio is a monorepo module per adjudication 2, and Nicholas works there. The report grammar canon, voice spec, and mega-eval rationale stay in the vault permanently.
Issue labels from day one: view:studio, view:command-center, layer:channel, layer:form, per the delivery grammar's kickoff coordinates.
2. The GitHub org and slug
The one decision that blocks everything in this section, and it is Jonny's.
The 2026-07-25 sprint brief locked "the monorepo goes up under the ShurIQ GitHub org." The stealth rule requires the product go unnamed publicly, and org names are publicly discoverable. The relaxation of 2026-07-21 permits "ShurIQ" for the GitHub org and slug specifically, so both options are open on paper:
- Option 1:
shuriqorg. Permitted by the 2026-07-21 relaxation. Matches the sprint brief. The org name is discoverable, and discovery reveals only a name, not the framework. - Option 2: neutral slug. The 2026-07-17 position. Maximum stealth, at the cost of a rename later and a mismatch with the sprint brief.
Day-one checklist once the slug is picked, parameterized so it runs either way (fuller checklist: projects/shur/slack-agent/30DAY-ACTIONPLAN.md section 12):
- Create the org, record the slug in
project_dev_sprint_1memory the moment it exists (sprint brief gate zero, item 1). - Create the monorepo private, default branch
main, branch protection onmain: PR required, Jonny is the sole merger. - Seed the layout from section 1 with empty registries committed as headers-plus-schema comments, so the first registry PR is a diff against something.
- Issue templates and labels from section 1.
- Invite KG, Alex, Nicholas (Nicholas pending his weareshur email, open since the 2026-07-25 brief), Diana.
- Gate zero item 2 from the sprint brief rides along: give
~/.dotfiles/ai/skills/a git home. Still unversioned as of 2026-07-27.
3. The Jira process
KG owns the surface; this fixes what the surface renders. GitHub is the system of record for rows 1 to 14 of the function-to-platform table in process-map-draft, and Jira renders views of it. Where they disagree, GitHub wins and the sync gets fixed.
Issue types.
| Jira type | Maps to | Notes |
|---|---|---|
| Epic | E-01 to E-12 from the feature register, plus one Registries epic | Channels render as Jira components |
| Story | S-01 to S-20 and successors | Route line first, then the prose user story, exactly as the register formats them. One story format, not two |
| Task | Registry seeding, gate scripts, migrations | Work that has no reader |
| Decision | D-2 to D-7 and P-1 to P-6, P-8. D-8 and P-7 closed 2026-07-28; D-9 to D-12 are recorded as closed | One ticket per open decision, so "blocked by" links have a real target instead of a memory |
Definition of ready is the four-field spec standard from process guide section 2, verbatim: outcome, reason, local exceptions, how we will know it is right (three to six checks, at least one negative), plus any open question addressed to a named person. A story missing any field is not ready. This goes into the Jira description template so the standard is the default, not a review catch.
Workflow states, mapped onto the seven stages:
| Jira state | Process guide stage | Transition is |
|---|---|---|
| Intake | 1. Design concept | Manual |
| Pool | 2 and 3. Spec written, awaiting adjudication | Manual, Jonny's verdict recorded on the ticket |
| Ready | Approved for sprint, definition of ready met | Manual |
| In Progress | 5. Prototype and build | Manual on day one. Later: first commit on the branch |
| In Review | 6. Review | Manual on day one. Later: PR opened |
| Done | 7. Production | Manual on day one. Later: merge closes it. Deploy stays a separate human decision permanently |
Honest automation statement. On day one, every transition is manual and the Jira-to-GitHub link is a URL pasted both ways by hand. That matches process guide section 4, which is explicit that none of the arrows are automatic yet. The order in which automation arrives: (1) GitHub issue auto-created from an approved story, (2) In Progress and In Review transitions from branch and PR events, (3) Done on merge. Nothing else. No transition automation ships before the manual version has run for at least one sprint, because feeling the manual version is how we find out which steps matter.
Two habits carried as process, not preference, from the guide: answers land on the ticket, not in Slack; "blocked by" links are load-bearing and every gated story below carries one.
4. The gates that run in CI
Three gate families, in the order they can exist.
grammar-gate.py. Exists today, and covers less than this plan assumed. It globs**/*.htmland nothing else, so every markdown document in the vault is ungated by construction. Found 2026-07-30 after Limore could not read the Slack integration plan; see section 4.1. Moves into the monorepo atgates/and wires into Actions on report-producing branches and on any PR that touches generated prose a reader sees. Generated narrative inside the app (S-16 and the narrative register) is subject to the full canon and the mega-eval, not a lighter standard, because it appears in a dashboard. This was the sharpest constraint in the feature register's E-07 note and it holds.route-gate.py. Drafted 2026-07-27, extended 2026-07-28, atmonorepo-seed/gates/route-gate.py. Fails a PR when a route references an unregistered channel, form, or reader; when a channel'sinputslist names an unregistered channel or forms a cycle; when the action field is absent or names a parked type; whenattenuatescarries fewer than two numbers; and when an armed route cites a channel no client surface reaches. Plus the structural checks those rest on (id-to-path match, work mode on the reader,arm-rulewith a target, closed status vocabulary). Deterministic, no model calls, selftest 13 of 13. The register listed it as open gap 5; the remaining work is Jonny's review and the merge as the monorepo's first PR, so the gate exists before the first route does. Until that merge, the check is a person reading the register, and the process guide says so. Work item WI-03.- The four template gates from primitive spec Part E.3 (module fit, field availability, evidence reachability, attenuation stated). Blocked on P-8 (whether they run in CI) and on the registries existing as files. Deferred as sprint work under F-3. Their inputs also changed on 2026-07-28: under D-9 a lane binds routes, so module fit resolves through a route rather than reading a module binding directly. They enter as
gates/template-gates/when P-8 signs and P-1/P-2 settle enough schema for the checks to have inputs.
4.1 Style coverage, added 2026-07-30
Limore read the Slack integration plan and could not follow it, and asked for plain English. Jonny's answer to the team commits us to a dedicated style guide for each thing the system writes, with technical documentation on Google developer documentation style until we write our own. He told Limore this is reflected going forward, so these items are committed rather than proposed.
Three things line up to produce the failure and each is independently sufficient. The gate
reads only HTML. The house voice canon scopes itself, in its own text, to one client
report's editorial prose. And audience: takes three values, none of which names a reader
or selects a guide. Nothing was bypassed, because there was no rule to bypass.
| Item | What | State on 2026-07-30 | Depends on |
|---|---|---|---|
| WI-14 | STYLE-REGISTRY.md, artifact type to style guide to gate |
Written 2026-07-30 at projects/shur/report-grammar/STYLE-REGISTRY.md. Applied by hand until WI-15 lands |
Nothing |
| WI-15 | Extend grammar-gate.py to markdown |
Not started. Needs a per-type rule set, because Google developer documentation style and the house voice canon fail on different things, and a technical doc should not be failed for saying "click" | WI-14, and WI-16 for the routing signal |
| WI-16 | style_guide: and reader: in the frontmatter schema |
Done 2026-08-01. Jonny approved both. They are in SCHEMA-REFERENCE.md under "Style Guide and Reader"; style_guide takes house-voice-canon \| google-developer \| asd-ste100 \| none, reader takes a named person or role and never internal. system/tools/style-router/style_router.py wrote both to 1,670 documents. Additive, so none of the 42 .base views changed |
Closed |
| WI-17 | A Shur technical documentation style guide | Parked. Google's is the interim answer and is working until it is not | WI-15 running first, so we learn what it actually fails on |
The reader constraint that shapes all four: Limore will not route our own documents through an external model to make them readable, because that feeds our material to someone else's system. So readability is a build requirement with no repair step after it.
5. Registry seeding and the missing records
Every story in the register assumes these five land first (its closing line). They are the sprint's first work items.
| ID | Work item | State | Blocked on | First branch |
|---|---|---|---|---|
| WI-01 | registries/channels.yaml with address, freshness SLA, and visibility constraint per channel |
Drafted 2026-07-27 in monorepo-seed/registries/; SLA values marked PROPOSED, visibility open for session block 6, address scheme undecided. S-20 wires it live |
Adjudication | feature/s20-run-health |
| WI-02 | registries/readers.yaml: R-01 only |
Rescoped 2026-07-28, decision C-2. R-02 to R-04 were removed rather than named. Three invented people carrying nine null work modes read as eight to twelve views somebody has to draw, for a client with one reader. A reader returns when a named person exists. The removed work-mode names and the naming conflict are preserved in the file's header comment | Nothing. Closed as scoped | registry/readers |
| WI-03 | gates/route-gate.py |
Drafted 2026-07-27, extended 2026-07-28, selftest 13 of 13 passing. Four checks added: parked action types refused (C-3), attenuates must carry two numbers, channel inputs validated with cycle detection (D-10), and an armed route may not cite an unbuilt or local-only channel. Enters as the repo's first PR |
Repo existing | gates/route-gate |
| WI-04 | Five real route declarations under registries/routes/dbm-global/ |
Zero exist. Session block 4 produces five from KG's modules; the gate that will check them is drafted | Session block 4, WI-01 | route/dbm-global-first-five |
| WI-05 | registries/forms.yaml for F-01 to F-20 |
Drafted 2026-07-27, revised 2026-07-28. D-8 / P-7 closed by C-5, neither contested range allocated. F-12 to F-20 marked deferred under F-2 | Nothing | registry/forms |
6. Sprint-1 cut, with owners and first branches
The cut itself is the feature register's heading 3 and is not re-argued here. Owners follow the standing split: KG writes and sequences stories, agents build from specs, Jonny reviews and merges everything, Alex owns form rendering, Nicholas builds in the monorepo once his email exists. "Owner" below means the person who accepts the ticket and confirms acceptance on the running product.
| Item | Owner | First branch | Blocked on |
|---|---|---|---|
| S-20 Run health readout | KG accepts, agent builds | feature/s20-run-health |
Nothing. Ships first |
| S-01 Attention queue | KG | feature/s01-attention-queue |
D-7 for the taxonomy; ships with KG's three severity labels marked as placeholder labels, per the register's warning not to let them become the taxonomy by default |
| S-02 Evidence drawer | KG | feature/s02-evidence-drawer |
Nothing |
| S-04 Score dimension drilldown | KG, Alex on the form shape | feature/s04-score-drilldown |
Was blocked on D-1. D-1 closed 2026-07-27: unblocked. Dimension names come from the approved registry in projects/shur/value-flows/sbpi-dimension-ontology-inventory.md |
| S-05 Score strip | KG, Alex | feature/s05-score-strip |
Was blocked on D-1. Unblocked. Ships with S-04 so no tile is a dead end |
| S-06 Stack rank | KG | feature/s06-stack-rank |
Nothing. The pipeline ships weekly today |
| S-08 Biggest movers | KG | feature/s08-movers |
Noise floor needs a value; carried as a named open question on the ticket, not a guess |
| E-01 thin slice: entity label, freshness state, reading-mode switch, ambient ticker | Alex | feature/e01-shell-thin |
D-2 and D-3 for tokens and type; the thin slice ships on the cream field per the standing 2026-07-23 decision while D-2 is formally closed |
What proceeds in parallel with open decisions, and what waits.
- D-1 closed 2026-07-27. Nothing in the cut waits on it any longer. S-04, S-05, S-07, S-11 and every score render build against the canonical dimension registry.
- D-8 / P-7 closed 2026-07-28 by C-5. Neither contested F-21-onward range is allocated. Nothing is blocked on it. Any story carrying an F-21-plus tag (S-05 is the one) drops the tag and refers to the module by name until it is built, at which point it takes the next free number.
- P-2 (
chain_idrequired) blocks nothing in the sprint-1 cut, and blocks the entire pathway surface of the Claude Design package. It should be signed before any Part B module is built. - D-4 (work-item store) blocks S-13 and E-11 entirely, which are correctly out of the cut. It also decides where
review-and-assigndispatches, so S-01's assign affordance ships asopen-evidenceplus manual handoff until D-4 lands. - D-2, D-3 (tokens, type system) block full E-01, not the thin slice.
7. The eight directives we are not doing, folded in as work items
Directive 15 of the OKF concept space index requires that anything described in Jonny's notes that we are not doing gets recorded in the sprint plan as a work item. These are the eight rows marked "No" in that index, each with a state. None is in the sprint-1 cut; each now has a home and a condition for leaving it.
| ID | Directive (OKF index number) | State | Condition to activate |
|---|---|---|---|
| WI-06 | Blind Spot Operations skill, council-of-experts first (2) | Parked | Scope as connective work per the OKF structural-gap note, not a standalone skill. Enters when the method gap it depends on is written, which Deliverable A of this session starts |
| WI-07 | Run claude doctor to right-size skills and CLAUDE.md (4) |
Done 2026-07-28. Full doctor run recorded: install healthy, v2.1.220 current, CLAUDE.md files confirmed lean post-refactor. One follow-on surfaced: the 88 vault skill descriptions total roughly 105K characters against a listing budget near 8K, so entries truncate and skill routing degrades. Description-shortening pass applied 2026-07-28: 34 files rewritten, listing total cut from 29,805 to 12,855 characters with triggers and routing disambiguations preserved | Closed |
| WI-08 | Concept-space scaffolding as a design primitive (5) | In progress as of 2026-07-27 | The primitive spec, the method archaeology, and the Claude Design package (this session) are this directive being done. Closes when the package produces a design |
| WI-09 | Order-of-magnitude-profit business model explanation for investors (8) | Parked | Needs the method primitive's section 6 evidence framing as its base; write after the design package lands so the two tell one story |
| WI-10 | Google Earth style layer toggling and altitude control (10) | In progress as of 2026-07-27 | Part D of the primitive spec (Z0 to Z3, L1 to L6) is the spec for exactly this. Closes when a built module honors zoom_levels declarations |
| WI-11 | Dashboard design post in the speculative futures series (14) | Parked | Content work, not sprint work. Enters the content pipeline, not this repo |
| WI-12 | Design research agent roster on Kimi Swarm, Osaurus, Claude Code (16) | Parked | Harness lab work item. Activates if the design package output needs a second research pass |
| WI-13 | Sales team observability router (18) | Parked, hard gate | The one directive with a consent and access dependency outside our control. Does not activate without Thomas's explicit agreement and the opsroom ethic written into the channel registry visibility column first |
8. Order of work, one list
- Jonny picks the org slug (section 2). Everything below waits on nothing else.
- Org and repo created, layout seeded,
~/.dotfiles/ai/skills/gets its git home. - WI-03
route-gate.pyas the first PR. WI-01 channels.yaml via S-20. - Kickoff session runs per delivery grammar section 13 as revised: the walked DBM chain opens it, the reader-naming block does not run (C-2), five routes declared (WI-04).
- Sprint-1 cut builds in the order of section 6, S-20 first.
- Jira project mounts once epics and the first stories exist to render (section 3).
- Registry adjudication pass completes WI-05. D-8 and P-7 are already closed.
- P-2 signs, and the pathway modules from the primitive spec Part B become buildable.
- WI-15 extends
grammar-gate.pyto markdown and puts style coverage in CI alongside the other gates (section 4.1). Unblocked: WI-16 signed 2026-08-01, so the routing signal exists. WI-14 is written and applies by hand meanwhile. - The vertical intelligence block enters at 2026-07-30-vertical-intelligence-block. It is one system covering every vertical with a client or prospect, insight write-back to the graph, RDF-star for client reasoning, the frontmatter query surface, and the Slack agent as its edge. Two questions gate it and both are Jonny's: RDF-star support in Oxigraph, and what produces week two of the AI-agent vertical.
Related
- 2026-07-30-vertical-intelligence-block, the vertical intelligence system, one block
- 2026-07-28-sprint-decisions for D-9 to D-12 and the keep, cut, defer list
- 2026-07-28-walked-chain-dbm, the team demonstration
- kg-wireframe-feature-register-2026-07-27, heading 3 for the cut, heading 5 for decisions D-1 to D-8
- feature-development-process-guide, section 2 for the spec standard this plan enforces
- dashboard-primitive-layer-spec-2026-07-27, Part E.3 and Part G for the template gates and P-1 to P-8
- 2026-07-26-dashboard-delivery-grammar, sections 4 to 6 for the registry vocabulary, section 12 for the GitHub and Jira pipeline this plan instantiates
- repo-inventory for component destinations, process-map-draft for the function-to-platform table
- 2026-07-25-sprint-brief-from-session-sync for gate zero and the docs-alignment canon list
- 2026-07-27-claude-design-package-pathway for Deliverable A of the same session
- Dev Sprint 1 index