Sprint plan: repository, pipeline, and order of work

projects/shur/dev-sprint-1/sprint-plan-2026-07-27.md

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.py gained 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:

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):

  1. Create the org, record the slug in project_dev_sprint_1 memory the moment it exists (sprint brief gate zero, item 1).
  2. Create the monorepo private, default branch main, branch protection on main: PR required, Jonny is the sole merger.
  3. 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.
  4. Issue templates and labels from section 1.
  5. Invite KG, Alex, Nicholas (Nicholas pending his weareshur email, open since the 2026-07-25 brief), Diana.
  6. 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.

  1. grammar-gate.py. Exists today, and covers less than this plan assumed. It globs **/*.html and 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 at gates/ 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.
  2. route-gate.py. Drafted 2026-07-27, extended 2026-07-28, at monorepo-seed/gates/route-gate.py. Fails a PR when a route references an unregistered channel, form, or reader; when a channel's inputs list names an unregistered channel or forms a cycle; when the action field is absent or names a parked type; when attenuates carries 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-rule with 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.
  3. 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.

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

  1. Jonny picks the org slug (section 2). Everything below waits on nothing else.
  2. Org and repo created, layout seeded, ~/.dotfiles/ai/skills/ gets its git home.
  3. WI-03 route-gate.py as the first PR. WI-01 channels.yaml via S-20.
  4. 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).
  5. Sprint-1 cut builds in the order of section 6, S-20 first.
  6. Jira project mounts once epics and the first stories exist to render (section 3).
  7. Registry adjudication pass completes WI-05. D-8 and P-7 are already closed.
  8. P-2 signs, and the pathway modules from the primitive spec Part B become buildable.
  9. WI-15 extends grammar-gate.py to 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.
  10. 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