Skip to content

Release: CDT workshop case studies + code-quality stack - #825

Merged
chrisdburr merged 23 commits into
mainfrom
staging
Jun 19, 2026
Merged

chrisdburr merged 23 commits into
mainfrom
staging

Conversation

@chrisdburr

Copy link
Copy Markdown
Collaborator

Production release: CDT workshop case studies + code-quality stack

Promotes the accumulated staging delta (23 commits) to main. Chris has approved releasing the whole delta, not just the case studies. Follows the established release pattern (#799 / #796 / #792). Merging triggers Build → Release (semantic-release) and a live production deploy.

Workshop content (Birmingham CDT, 24 June) — visually checked on staging

  • 4b6121f3 Refine census and clinical-trial case studies for CDT use
  • 2af5dc75 Add adaptive clinical trial and census disclosure-control case studies

Code-quality / SSOT stack (the other 21 commits)

Verification

  • Dropped _workshop-evidence-mining.md example is untracked and absent from this diff — it does not ship.
  • .secrets.baseline change is a line_number 21→22 bump only (no plaintext secrets).
  • Net 145 files, +1,662 / −156,489 — the large deletion is the now-untracked generated Prisma client, expected.

🤖 Prepared with Claude Code

…t numbering

Aligns with GSN Community Standard v3 which permits recursive
decomposition: Goal → Strategy → Claim → Strategy → Claim → Evidence.

Strategies under property claims use "transparent" numbering — property
claims are numbered as children of their nearest property claim ancestor,
skipping intervening strategies. Strategies remain flat-sequential (S1, S2).

Example: P1 → S2 → P1.3 (not P3)

Changes:
- Update VALID_CHILDREN to allow strategy under property_claim
- Extend generateElementName() with one-hop ancestor lookup for transparent numbering
- Extend calculatePropertyClaimLevel() with same ancestor logic
- Make generateHierarchicalNames() pass through ancestor info for transparent strategies
- Populate strategies array in buildPropertyClaimStructure() API response
- Add "Add Strategy" option to property claim node popover
- Fix handleStrategyAdd to use correct parent ID for property claim parents
- Update tree traversal and orphan collection for nested strategies
- Fix missing CONTEXT prefix in identifier-service TYPE_PREFIXES
- Fix Dockerfile.dev missing patches directory during pnpm install
- Use exact error string in moveElement rejection test
- Use raw SQL to create CONTEXT element, bypassing validation middleware
The Prisma model AssuranceElement maps to table assurance_elements.
The raw SQL insert was using the model name instead of the table name.
Prisma model fields use camelCase but the actual DB columns are
snake_case via @Map directives.
Runs pnpm run test:integration when TypeScript files are staged.
Skips gracefully with a warning if PostgreSQL is not running on
port 5432, so developers without Docker running can still commit.
Canonical architecture slice, hard rules, and do-not-imitate list for
agent-maintained development. AGENTS.md documented the retired beads
workflow. claude-dir.zip (pre-atelier config archive) is ignored as it
contains a local seed credential.
Excludes generated code and MDX content, declares Next.js and
MDX-imported entry points so dead-code analysis reports against an
honest baseline.
- src/generated/prisma-new/: orphaned second Prisma client from the
  migration; nothing imports it
- orphan-elements.tsx + _orphan-elements/: superseded by the inline
  orphan handling in flow.tsx/case-container.tsx; no importers
- demo landing faq/mailing-list: unreferenced by the landing page

Verified by import-graph analysis (fallow + MDX cross-check) against
latest staging; typecheck and full unit suite green.
- lint/format scripts called ultracite verbs that do not exist
  (lint/format vs check/fix); CI bypassed them so it went unnoticed
- .githooks/pre-push runs lint + typecheck before pushes to
  staging/main, armed via the prepare script; CI remains authoritative
- ajv had zero references (zod is the sole validation library)
Runs fallow on files changed against the PR base and posts a sticky
comment (dead code, duplication, cycles, complexity). Never fails the
build; flip to blocking once the config has bedded in.
src/generated/prisma/ predates its gitignore entry, so 51 stale
generated files were tracked. CI and both Dockerfiles run prisma
generate; the committed copy only polluted diffs and quality metrics.
Local dev regenerates via npx prisma generate.
…d-untrack-client

ci: report-only fallow check + untrack generated Prisma client
…components

26 unreachable files (~9,400 lines) carried over from the Docusaurus
docs migration (Dec 2025) and never wired into the Nextra system:

- enhanced/{dialogs,handles,interactions,demos}: a case-editing
  capability (add-block dialogs, node creation, drag handles) the live
  read-only curriculum viewer never used
- exploration-checklist, task-checkpoint, concept-reveal and friends:
  superseded by the content-local component pattern in content/curriculum/
- two-column-layout + CSS module: pre-Tailwind layout

Verified unreachable including MDX imports and the lazy-loaded viewer
chain; typecheck, lint, and full unit suite green.
…ice-2-curriculum-editor

refactor: remove unshipped curriculum editor (~9,400 lines dead code)
ADR 0001 specifies the machine-writable evidence endpoint and
claim-state model: orthogonal health/timeliness axes (green-but-stale),
append-only hash-chained RuntimeEvidence, scoped ApiToken auth, SSE
claim:state-changed events, a v1 scoring model (defeat-cascade
deferred), staleness sweeper, and ReleaseSnapshot as audit anchor.
DARTER's Interface C and a TEA v1.0 capability, designed to upstream.

Extracted from #816 (authored 2026-06-04), which also carried
since-retired beads tracker data; this supersedes that PR.
…vidence

docs(adr): runtime-evidence endpoint and claim-state model
Removed (zero references, production build verified): @auth/prisma-adapter,
@azure/identity, @tailwindcss/line-clamp, cmdk, neatjson, postgres, motion.

Kept with ignore entries (used in ways static analysis cannot trace):
@prisma/client-runtime-utils (peer of @prisma/client, imported by the
generated runtime), axe-core (peer of vitest-axe, dynamically imported in
test utils), conventional-changelog-conventionalcommits (string preset in
.releaserc.json), @isaacs/brace-expansion override (live security floor).

Quietens fallow's project-level PR findings so new ones stand out.
Two root causes, both inversions of dependency direction:

- store/node-types.ts imported the four node components to build a
  React Flow registry that the store held as state — but nothing read
  it: flow.tsx already owns a module-level registry. Deleting the file
  and the dead state field removes every store↔component cycle (21).
- lib/case/node-operations.ts imported siblings via the @/lib/case
  barrel, which re-exports node-operations. Importing the concrete
  modules (api, node-utils, types) directly breaks the self-reference.

Verified: fallow reports 0 circular dependencies; typecheck and full
unit suite green. New rule already in CLAUDE.md: no store→component
imports.
…-dependencies

chore: remove 7 unused dependencies
…re-component-cycles

refactor: break all circular import cycles (22 → 0)
Two new hands-on case studies, each with a hero image:
- Safe Adaptive Allocation in a Bayesian Platform Clinical Trial (safety + explainability)
- Balancing Privacy and Utility in Census Disclosure Control (privacy)

Register both in the case-studies index table, the domain sections (adding a
Public Sector heading), and the sidebar (_meta.ts) so they are discoverable.
Census disclosure control: trim deliberative sections (considerations 7->5, prompts 6->5, strategies 5->4, techniques 8->5), tighten the top-level assurance goal, move the EU AI Act aside to a footnote, verify footnote citations, and balance the reconstruction/re-identification framing.

Adaptive clinical trial: complete the FDA adaptive-designs citation, add DOIs for the REMAP-CAP and Proschan citations, correct the RECOVERY (platform vs critical-care) and ICH E9 framing, and soften the DMC-oversight description.
@github-actions

Copy link
Copy Markdown

fallow: no structural-quality findings in changed files.

@chrisdburr
chrisdburr merged commit cee24ca into main Jun 19, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant