Skip to content

id-95 Feedback

Last response received, before the session closed out (no handoff available)

Section titled “Last response received, before the session closed out (no handoff available)”

“Done. Full report below.

  1. Branch review — what moves to canonical

Branch is strict superset of canonical-pipeline-setup (zero divergence — canonical is ancestor). Recommend: fast-forward canonical to this branch tip (5a2b11e75, now pushed). Contents all belong there:

  • 96d4e5305 e2e fix (ID-105 — workspaces smoke red on main, T2 fixture alignment) — needed everywhere
  • 8 ledger commits (ID-105 close, {95.2} journals, bl-287/288) — OoO session needs this ledger state
  • Nothing to cherry-pick selectively; nothing to leave behind. Working tree clean.

Docs-site: all ID-95 artefacts tracked + pushed. PRODUCT revision committed b7fce720, pushed.

  1. PRODUCT.md updated (ready for TECH)

Approach taken: 4 parallel read-only research agents, then main-session synthesis + edits. Applied:

  • PI-10/11/12 rewritten — tenant_config pivot. Your suggestion won the evaluation outright: branding = tenant_config row + private Storage bucket in client’s own Supabase, hydrated by generic prebuild fetch using env creds already in each Vercel project (SUPABASE_SERVICE_ROLE_KEY mandatory per lib/env-server.ts:49). Existing codegen/loader/contrast-gate unchanged — script just writes the files the glob expects before generate:branding. Latency concern moot: fetch is build-time, zero runtime cost; branding change = redeploy (same as repo-overlay design — branding is build-inlined either way). Fail-closed: client build with no row FAILS (S196 analogue); default/no-creds no-ops → AC-E3 control build stays green. Second instance of the signup_policy config-as-data template. Per-client provisioning repo scored worse (re-creates credential fork per client, heavyweight for 1 JSON + 5 images); Coolify/VPC can’t serve Tier 1 at all (Phew has no Coolify server).
  • Open decision 1 DISSOLVED — no private-repo read anywhere in deploy path; neither GH-Actions nor Vercel-token arm survives. oq-618a70db51ab78c3 closes “neither”.
  • Decision 2 resolved: knowledge-hub-platform, APP_URL=https://kh.aisolutionhub.co.uk; Phew-first sequencing pinned in PI-3.
  • Decision 3 resolved: demo-bootstrap-spec archives now (PI-17).
  • PI-13/14: MCP plugin seven-kappa refs carved out to ID-71; rename gate = runtime+CI sweep + deploy-gate check-name only. Your MCP-settings precedent located: components/settings/mcp-url.ts:11-17 (getMcpUrl() derives from NEXT_PUBLIC_APP_URL) — cited in PI-13 as the pattern.
  • PI-20 generalised: per-instance re-seed manifest (signup_policy + tenant_config + bucket) post-recut.
  • New open decisions: 0 (ratify pivot final form), 5 (tenant_config scope — branding-only vs general config doc; phew.json already carries classificationDisambiguation), 6 (durable master copy of brand assets — recut-to-new-project wipes Storage).
  1. Answers to your questions

OQ-1 — unaddressed seeds/domains/compose/secrets? Mostly no. Compose: deploy/coolify/** is platform-generic (aisolutionhub.co.uk hosts, placeholder env). Secrets: none real in either repo. Seeds: all synthetic. Two genuine gaps:

  1. main_session_output.md — tracked at KH repo root (committed S329), client-name mentions, outside every guard perimeter and PENDING_DEID exclusion — fails identity-guard simulation today.
  2. Migration 20260609093000 carries hook_restrict_signup_to_phew_domain literal — purge map covers it only if the contested R8 bare-stem rule is ratified IN (ID-68 OQ-H), and it’s missing from the guard exclusion list either way.

Plus guard-list drift: ID-95.md, s328–s332 continuation prompts, cmux-brief-s267 not in PENDING_DEID though categorically inside PI-23’s perimeter.

OQ-4 — docs-site root content. Important correction: not historic accident — ratified Option S-B ({68.12}: “private docs-site + internal harness”). Your “docs only” position overturns S-B; that ratification is the root decision. Per-item: scripts/, e2e/, tests/, vercel.json = legitimately docs-site-specific, stay. harness/ = two things glued: docubot/skills drivers (stay — they ARE docs automation) + relocated KH eval lane (misplaced; its live-mode imports are already broken — harness/scripts/eval-classification.ts:383 imports ../lib/ai/classify etc. which don’t exist under harness/lib/). eval-fixtures/ = client bid prose, moves with eval lane (or → DB rows). ops/classification-prompt.md = strongest signup_policy-style candidate — taxonomy section already DB-codegen’d. ops/identity-denylist.json = stays private (or future ops repo). Note: ID-68 Inv-14 plans ledgers INTO docs-site — conflicts with “docs only”; ledgers-as-DB-table would dissolve that too.

Taxonomy-sync. Verdict: redesign required; automation shell removable now. It’s a DB→repo codegen loop (prod taxonomy → snapshot/prompt/plugin-vocab commits to public main). Already broken since 08/06 ({68.23} prompt relocation: workflow never sets KH_PRIVATE_DOCS_DIR → fail-loud; can’t commit the now-private prompt anyway; last run 28/04 — de facto manual for 6 weeks). Not deletable outright: taxonomy_snapshot.json is load-bearing for cocoindex re-ingest validation (extraction.py:79-176). Ontology doesn’t subsume the client-extension leg (it owns baseline/seed only; client_extensible: true, admin-UI-authored). End-state: baseline via ontology + PI-18 fan-out; per-tenant artefacts generated point-of-use from target client DB. PI-15 now pins this incl. “snapshot embeds client-provenance rows in public repo” as a transitional must-not-grow.

  1. Recommended next steps

  2. You: ratify the revised PRODUCT (decision 0) + new decisions 5–6; ratify/overturn Option S-B (gates all docs-site root moves).

  3. OoO session: FF canonical to this branch; curate findings → backlog (main_session_output.md de-ID/untrack, R8+guard-drift, harness eval imports, taxonomy-sync shell retirement, docs-site root vitest unwired in its CI).

  4. {95.3} TECH in fresh session (Q-PLANNER-2 fresh-planner rule): tenant_config schema/RLS, prebuild fetch script, re-seed manifest, taxonomy point-of-use mechanics. PRODUCT is ready as input now.”

  • Clarification - the current coolify setup is for Phew, so I think these are incorrect “Phew has no Coolify server” and “deploy/coolify/** is platform-generic (aisolutionhub.co.uk hosts, placeholder env)” - the setup was built for Phew, the only reason aisolutionhub.co.uk was used here was to enable us to complete DSN setup - the domain will be changed to Phew, when we handover. Similar to Vercel, and Supabase, we’ll need our own Platform-version of the coolify setup - unless there’s something I’m misunderstanding here.

  • OQ-1 - main_session_output.md is an easy fix - we just need to update the script that generates it, which is under the global Claude setup in the tools/ directory, and then update the script so that when an output is generated, the default location is to a new folder within the docs-site repo - something like .session-transcript - the files don’t need to be tracked and are transient. So the only reason it’s used is I run the script if we get to a state where a session is no longer cached and handoff hasn’t been completed, so the script generates an output that I can then share with you in the next session. So this isn’t load-bearing and I imagine it’s something that a sub-agent could resolve quite easily.

  • OQ-4 - Noted and agreed. By “historic design”, what I actually meant here was that we previously architected something in a way that wasn’t designed at the time for a platform which could have multiple clients and wasn’t environment driven. Ledgers INTO docs-site approved as the ledgers are development workflow specific not client specific, for clarity the doc site isn’t a public facing site it’s the mechanism by which you and I are able to share platform related content like the specs ledgers and any documentation that is used as part of the platform understanding.

  • None of the following items are backlog: “curate findings → backlog (main_session_output.md de-ID/untrack, R8+guard-drift, harness eval imports, taxonomy-sync shell retirement, docs-site root vitest unwired in its CI).” - they need to move to the correct task id as new sub-tasks.

    1. Ratified, but note the coolify server clarification, above.
    1. Covered by ID-68.
    1. TECH to propose.
    1. TECH to propose.