Skip to content

00 — Phase 0.9 feedback investigation synthesis (S232 + S233 findings)

00 — Phase 0.9 feedback investigation synthesis (S232 + S233 findings)

Section titled “00 — Phase 0.9 feedback investigation synthesis (S232 + S233 findings)”

Audit date: 12/05/2026 (S233 close-out) Scope: consolidates the 6 finding docs in this directory (01-*.md through 06-*.md) plus the corresponding S233 patches in 0.9-decision-graph.md and the refresh of 0.9-collapse-candidates.md.

Review status: DIRECTIONAL — PENDING LIAM REVIEW. Every recommendation traces back to one of the 6 findings, none of which has been Liam-ratified yet. This doc surfaces the decisions Liam must make before WP4 (architecture split into 9 sub-docs) can land cleanly.


#WaveTrigger (from feedback doc 09-decision-graph-feedback-actions.md)Headline output
011B-1 (S232)Q1.9 source_documents over-abstraction question + Q2.4 audit trailOption α (slim-and-keep) or β (drop) for source_documents; content_history kept + extended with op_id; new audit_log for compliance UX; pipeline_runs retain as KH-side rollup
021B-2 (S232)Q2.9 + Q3.2 external-folder write-back + Q1.11 citations + Q1.12 matchesPromote Q&A markdown sidecar emit from v1.1 to v1; extend content_citations in-place (rename → citations); new bid_question_matches table
031B-5 (S232)Q1.13 workspace types + Q5.5 project_id rename + Q3.11 templates + Q4.5 mempalace wingKeep Shape B (workspaces table + type discriminator + JSONB + per-type satellites); rename project_id → workspace_id (2 DB cols + 44 code files); rename templates → bid_templates; mempalace wing = 1:1 to workspace_id, no schema change
041B-3 (S233)Q3.5 historical template extraction + Q3.10 coverage scope + OQ11 form-question-extractionSSQ + Charnwood were manually catalogued (no auto-extraction path); coverage is template-only with 3 gap sources, extend to 4; OQ11 resolved to deterministic XLSX/PDF question-text extractors + AI-assisted-cataloguing skill
051B-4 (S233)Q3.8 bid response → corpus feedback loop (3 UCs)UC-A (prior bid import) needs new ingest path; UC-B (in-platform creation) RATIFIED happy path + new promote-to-Q&A UI; UC-C (/outcome/integrate) extend to accept lost bids + promote 6 JSONB fields to new bid_workspaces satellite
061B-C (S233 sub-agent)CX.33 source-document explorerPer-MIME viewer composed from in-stack primitives (Tiptap + mammoth + react-pdf + Tiptap’s existing ContentEditor). Zero new dependencies for v1

2. Decisions Liam must provide BEFORE WP4 architecture-split can land cleanly

Section titled “2. Decisions Liam must provide BEFORE WP4 architecture-split can land cleanly”

These are the questions that gate the architecture-split work. Each is grouped by the WP4 sub-doc destination that owns the binding. Quick-wins (clean consensus across findings) are not relisted — see §6.

2.1 BLOCKING (cannot start WP4 sub-doc without this)

Section titled “2.1 BLOCKING (cannot start WP4 sub-doc without this)”

B1 — Pattern A/B Q&A parser fate is contradictory across findings

Section titled “B1 — Pattern A/B Q&A parser fate is contradictory across findings”

The tension:

  • Finding 04 §3.5 + decision-graph Q3.5 (S233) say: retire Pattern A/B as a one-shot Phew-content migration helper; post-migration, delete.
  • Finding 02 §3.2 round-trip diagram says: the cocoindex Q&A adapter UPSERTs q_a_extractions keyed by (workspace_id, source_path, pair_anchor) and triggers UC6 AI-suggest review — i.e. assumes a live recurring Q&A markdown adapter post-cutover.

Neither finding names the recurring runtime adapter that would parse YAML-frontmatter .md Q&A files into q_a_extractions rows. Finding 04 §3.2 lists lib/quality/qa-detection.ts + lib/bid-library-ingest/extract-qa-pairs.ts (the Pattern A/B/C parser) as the existing infrastructure — the same code Finding 04 wants to retire.

Decision needed:

  • (a) Pattern A/B is retained as the cocoindex Q&A-markdown adapter (contradicts Finding 04 retirement recommendation); OR
  • (b) A new YAML-frontmatter Q&A-markdown parser is specced as net-new work (currently neither finding owns this); OR
  • (c) Q&A markdown round-trip is genuinely v1.1 (back to the pre-S233 sidecar deferral position), and the recurring adapter question disappears.

Lands in: WP4 05-qa-flow.md (canonical authoring shape) + 02-data-flow.md (recurring adapter ownership).

B2 — Option α vs β for source_documents

Section titled “B2 — Option α vs β for source_documents”

Working recommendation per Finding 01: Option α (slim-and-keep) — retain a thin binary-source manifest, retire versioning columns. Option β = drop entirely; cocoindex source-key + Storage bucket pointer carry binary identity.

Why this is BLOCKING: the choice cascades into:

  • Finding 02 q_a_extractions FK shape (q_a_extractions.source_document_id survives under α; under β, q_a_pair carries cocoindex_source_key TEXT instead).
  • Finding 04 form-source manifest (XLSX/PDF forms land in source_documents under α; cocoindex-only under β).
  • Finding 05 UC-A prior-bid binary ingest (same).
  • Finding 06 source-doc explorer dispatch (gates on Finding 06 OQ-CX33-E “all extractions from this upload” query).
  • Finding 01 itself defers Recommendation 3 (diff UI fate) on α/β choice.

Lands in: WP4 02-data-flow.md (the host doc for the α/β binding).

2.2 IMPORTANT (resolve before WP4 02-data-flow + 04-workspace-types + 05-qa-flow)

Section titled “2.2 IMPORTANT (resolve before WP4 02-data-flow + 04-workspace-types + 05-qa-flow)”

I1 — bid_workspaces shape (Shape B satellite vs typed cols on workspaces)

Section titled “I1 — bid_workspaces shape (Shape B satellite vs typed cols on workspaces)”

Finding 05 §5.3 proposes Option B (new bid_workspaces satellite table — 6 typed columns) as the Shape B precedent for every future workspace type. Finding 03 §3.2 inventories 5 satellite tables for bids — none of which is bid_workspaces. Finding 03’s Shape B principle says satellites where behaviour fundamentally differs — typed-column promotion of JSONB might or might not qualify.

Decision needed:

  • (a) Option A — promote 6 fields to typed columns directly on workspaces (columns only populated when type=‘bid’); OR
  • (b) Option B — bid_workspaces satellite (Finding 05’s recommendation, more Shape B-symmetrical).

The same decision propagates to proposal_workspaces, competitor_workspaces, training_workspaces when those land.

Lands in: WP4 04-workspace-types.md.

I2 — template_requirements rename inventory

Section titled “I2 — template_requirements rename inventory”

Finding 04 §7 + decision-graph Q3.11 (S233) claim template_requirements renames to bid_template_requirements alongside templatesbid_templates. Finding 03 §5 Rec only renames templates + template_fields (2 tables) — explicitly does NOT include template_requirements.

Decision needed: rename inventory is 2 tables or 3 tables. Sequencing matters for the combined-PR scope.

Lands in: WP4 04-workspace-types.md (naming inventory) + the migration sequence doc.

I3 — S9 spike status (cocoindex equal-hash idempotency)

Section titled “I3 — S9 spike status (cocoindex equal-hash idempotency)”

Finding 02 Recommendation 1 (promote markdown sidecar to v1) gates on S9 spike outcome. Decision-graph §5 PENDING-SPIKE-RESIDUAL claims “(None remain) — every spike-gate (S1/S10/S14/S15/S16 + S2-S6/S11-S13) has resolved” — but S9 is not in either list. Either S9 resolved and Finding 02’s gate is satisfiable today, or S9 is open and the decision-graph §5 claim is incomplete.

Decision needed: clarify S9 status. If resolved, fold result into Finding 02 §3.3 gate clearance. If open, add to spike-residuals + defer Finding 02 Recommendation 1 until S9 lands.

Lands in: WP4 02-data-flow.md (round-trip idempotency pattern) + 05-qa-flow.md (sidecar v1 vs v1.1 binding).

2.3 NEEDED for WP4 (less BLOCKING but each gates one sub-doc)

Section titled “2.3 NEEDED for WP4 (less BLOCKING but each gates one sub-doc)”

N1 — Q&A markdown adapter (post-Pattern A/B retire) — same as B1

Section titled “N1 — Q&A markdown adapter (post-Pattern A/B retire) — same as B1”

N2 — Cataloguer skill build-now-or-defer

Section titled “N2 — Cataloguer skill build-now-or-defer”

Finding 04 Rec 5 proposes a template-cataloguer/SKILL.md plugin skill per template-driven-completeness-spec.md §7.3 (proposed but never built). At stake: whether form-cataloguing capability ships pre-launch or post.

Lands in: WP4 05-qa-flow.md (form handling) + 08-new-features.md (cataloguer as feature).

N3 — Naming-cleanup mini-stream PR scope (combined or sequenced)

Section titled “N3 — Naming-cleanup mini-stream PR scope (combined or sequenced)”

Finding 03 Rec 2 + OQ-Q55-A recommend combining: project_id → workspace_id rename + digest → change-reports rename (Q5.1-Q5.4) + OQ12 schema-restructure into one big pre-launch rename PR. Each touches migrations + types + RLS predicates.

Decision needed: combined (high-blast-radius, one PR) or sequenced (lower-risk per PR, more churn).

Lands in: WP4 07-collapse-list.md + WP3 migration sequence.

Finding 04 §4.3 + Finding 05 Rec 5 both call the 4th source bid_response. The actual feeder table is bid_question_matches (per Finding 04 §4.3 step 3 — recompute trigger fires on bid_question_matches inserts). Granularity mismatch (response-level discriminator label, question-match-level feeder).

Decision needed: rename to bid_question or bid_question_match for clarity.

Lands in: WP4 08-new-features.md (cosmetic but aligns with the 1B-2 schema language).

N5 — Upload-route silent-fail fix (OQ-Q19-D)

Section titled “N5 — Upload-route silent-fail fix (OQ-Q19-D)”

app/api/upload/route.ts:444-447 try/catch swallows srcDocErr (“non-fatal — upload continues without lineage tracking”). Either fix to fail-fast or accept the trade-off explicitly. Couples to Option α/β decision (B2) — Option β makes the route moot; Option α requires the fix.

Lands in: WP4 02-data-flow.md.

Finding 01 Rec 8: retain as KH-side rollup of cocoindex runs (insulates UI from cocoindex schema changes). Alternative: retire in favour of cocoindex ops-DB ledger directly.

Lands in: WP4 02-data-flow.md.

N7 — Op_id propagation pattern (OQ-Q24-C)

Section titled “N7 — Op_id propagation pattern (OQ-Q24-C)”

Trigger-driven (clean DB-side) vs app-stamped (simpler but skippable). Finding 01 Rec recommendation: hybrid — trigger-driven where clean, app-stamped where rollback-op cohesion matters.

Lands in: WP4 02-data-flow.md.

Should citations.bid_response_id stay NOT NULL, or be extended with citer_kind to support competitor_research, sales_proposals, training citing q_a_pairs?

Lands in: WP4 05-qa-flow.md.

N9 — Per-match score weighting (OQ-Q112-B)

Section titled “N9 — Per-match score weighting (OQ-Q112-B)”

bid_question_matches.score single hybrid value vs separate embedding_score + fulltext_score. Separate columns more flexible for tuning.

Lands in: WP4 05-qa-flow.md.

N10 — Lost-bid promotion default action (OQ-Q38-A)

Section titled “N10 — Lost-bid promotion default action (OQ-Q38-A)”

skip (Finding 05 rec) or new_entry with confidence penalty.

Lands in: WP4 08-new-features.md.

N11 — q_a_pair ↔ bid_response provenance retention (OQ-Q38-F)

Section titled “N11 — q_a_pair ↔ bid_response provenance retention (OQ-Q38-F)”

When /outcome/integrate promotes a response to q_a_pairs, does q_a_pairs.provenance_source carry the back-pointer {kind: 'bid_response', bid_response_id, bid_workspace_id, integrated_at}?

Lands in: WP4 05-qa-flow.md.

2.4 Operational decisions (not WP4-blocking but Liam must rule)

Section titled “2.4 Operational decisions (not WP4-blocking but Liam must rule)”
OQQuestionRecommendationLands in
OQ-Q310-APhase 4 bid-deadline scoring formulaDefer until first live bid workspace; flag as scheduled future work08-new-features
OQ-Q310-BLow-match-score auto-gap vs draft-quality-triggerGap on low-match (the question is a coverage gap); separately gap on draft-quality08-new-features
OQ-Q35-AIntermediate JSON persistence for form-questions extractionFile-only v1 (no new cache table)05-qa-flow
OQ-Q35-BCataloguer skill output shapeGenerated scripts/catalogue-<slug>.ts seed-script-and-commit05-qa-flow
OQ-Q35-CForm-specific requirement_type='checklist'No — fold into declaration / evidence04-workspace-types
OQ-Q38-DConfidence weighting per prior-bid outcomeConservative defaults; calibrate post-launch05-qa-flow
OQ-Q38-Ebid_workspaces column count6-column minimum (buyer, deadline, submission_date, outcome, outcome_recorded_at, outcome_recorded_by)04-workspace-types
OQ-Q38-GState-machine integration of outcome promotionNo new state; track via bid_response.integrated_at08-new-features
OQ-CX33-ACocoindex re-extract behaviour on edit-backGates on WP3 ledger query pattern02-data-flow
OQ-CX33-BDOCX write-back canonical (sidecar v1 vs full DOCX v1.1)Align with Q2.9 sidecar reopen decision05-qa-flow
OQ-CX33-ESource_documents Option β fallback queryGates on B2 (α/β decision)02-data-flow
OQ-CX33-Fdocx-preview add-or-defer triggerAdd only if mammoth+Tiptap loses critical fidelity03-tech-stack

3. Per-investigation summary (one paragraph each)

Section titled “3. Per-investigation summary (one paragraph each)”

Finding 01 — source_documents + audit trail (1B-1 S232)

Section titled “Finding 01 — source_documents + audit trail (1B-1 S232)”

source_documents table has 0/629 prod fill — platform-not-live + upload-route silent-fail at app/api/upload/route.ts:417-434, NOT over-abstraction. The table is deliberately specced (content-lifecycle-spec.md §5, 20/03/2026) as a binary-source manifest with versioning. Under cocoindex Scenario A, the versioning primitives (version, parent_id, original_filename, source_document_diffs, detect_reupload() RPC) retire because cocoindex source-key history + ops-DB ledger provide stronger provenance. Two viable shapes: Option α (slim-and-keep — recommended) retains a thin manifest; Option β drops entirely. Audit-trail story largely intact today: content_history trigger (1223 prod rows, 5 change_types in use) extends with op_id for rollback per edit-flow §6.0.6; new audit_log table for human-readable compliance UX; pipeline_runs retain as KH-side rollup of cocoindex ledger. Couples to: 1B-2 q_a_extractions FK shape, 1B-5 RLS predicates, content_items 13 AMBIGUOUS columns audit (Q1.2).

Finding 02 — Q&A write-back + citations + matches (1B-2 S232)

Section titled “Finding 02 — Q&A write-back + citations + matches (1B-2 S232)”

Reopens the v1.1 deferral of the markdown sidecar on UC5/UC6 (edit-flow §6.5/§6.6). Reasoning: with OQ10 (predetermined-markdown) as v1 INPUT, the natural OUTPUT is the same file — round-trip via UC1 Candidate A. Pipeline reuses UC1 content-hash idempotency; no new infrastructure. Gates: (a) OQ10 markdown shape locked; (b) S9 spike on cocoindex equal-hash confirmed (status unclear — see I3); (c) lifecycle-only columns (confidence, governance_review_status, superseded_by) explicitly classified as not-round-tripped. Q1.11: extend content_citations in place — rename → citations, add q_a_pair_id NULL + source_chunk_id NULL + chunk offsets + CHECK exactly-one-target. Q1.12: new bid_question_matches table replacing bid_questions.matched_content_ids UUID[] inline cache; per-match score, match_method, recompute_run_id, rank.

Finding 03 — Workspace types + project_id rename + templates + mempalace (1B-5 S232)

Section titled “Finding 03 — Workspace types + project_id rename + templates + mempalace (1B-5 S232)”

Keep Shape B (current — single workspaces table + type discriminator + domain_metadata JSONB + per-type satellite tables). Universal content via content_items + content_item_workspaces M:N (81 prod rows; content_items has NO direct workspace_id). 4 prod workspaces all type='intelligence' — validates “platform not live” framing. Q5.5: project_id → workspace_id rename is lower-risk than reported (2 DB columns, not 6 tables; 44 code files via grep, not 35; 97 = source-line count); use ts-morph + ast-grep code sweep. Combine with Q5.1-Q5.4 digest-rename and OQ12 schema-restructure as one big pre-launch rename PR. Q3.11: keep templates shape; rename → bid_templates + bid_template_fields (2 tables — see I2 contradiction with Finding 04). Q4.5: no schema change — every mempalace MCP call from KH passes wing: <workspace_id>.

Finding 04 — Historical extraction + coverage (1B-3 S233)

Section titled “Finding 04 — Historical extraction + coverage (1B-3 S233)”

SSQ (66 reqs) and Charnwood ITT (30 reqs) were manually catalogued in hardcoded TS arrays (scripts/catalogue-standard-sq.ts from UAT S77; scripts/catalogue-charnwood-itt.ts from UAT S83). No automated PDF/DOCX → template_requirements pipeline exists. Existing extractors (scripts/extract_tender_questions.py, lib/quality/qa-detection.ts) target Q&A pair extraction for the Phew library — different shape, different consumer. Forward path for Shape F forms (XLSX + PDF fixtures already in docs/client-documentation-base/forms/): deterministic question-text extractors (XLSX via exceljs; PDF via pdf-parse/extending scripts/extract_pdf_text.py) feeding an AI-assisted-cataloguing plugin skill per template-driven-completeness-spec.md §7.3. Pattern A/B parser stays as one-shot Phew-content migration helper, retire post-migration (but see B1 contradiction). Coverage is template-only today; 3 gap sources (taxonomy / template / guide); extend with 4th bid_response source (see N4 naming).

Finding 05 — Bid response → corpus feedback loop (1B-4 S233)

Section titled “Finding 05 — Bid response → corpus feedback loop (1B-4 S233)”

Three UCs mapped. UC-A (client supplies prior bid responses): no first-class path today — closest is /api/upload landing DOCX as content_items (loses bid-context). New work: q_a_extractions.extractor_kind='prior_bid_response' (post-S16) + 4 typed prior-bid context columns. Small additive change. UC-B (client creates response in-platform): happy path per edit-flow §6.5 UC5; 11-state machine (draft → questions_extracted → matching → drafting → in_review → ready_for_export → submitted → won|lost|withdrawn). Schema-impact = 1B-2 deliverables (citations rename, bid_question_matches new). New promotion-from-draft UI surface implementing UC5 explicitly. UC-C (outcome → corpus): /api/bids/[id]/outcome/integrate exists today, won-bids-only, admin/editor-driven, dedup-checked. Three gaps: lost/withdrawn carry zero learning; writes to content_items not q_a_pairs (post-S16 migration); BidMetadataSchema parks 16 fields in workspaces.domain_metadata JSONB. Schema-impact: extend /outcome/integrate to accept lost+won; add evaluator_score + evaluator_feedback to bid_responses; add outcome_signal to bid_response_history; promote 6-9 outcome JSONB fields to new bid_workspaces satellite (see I1 ambiguity).

Finding 06 — Source-doc explorer (CX.33 1B-C S233 sub-agent)

Section titled “Finding 06 — Source-doc explorer (CX.33 1B-C S233 sub-agent)”

Per-MIME viewer composed from in-stack primitives, mounted at new app/documents/[id]/page.tsx. Markdown → existing Tiptap ContentEditor; DOCX → mammoth.convertToHtml → Turndown → Tiptap edit mode; PDF → existing PdfReaderView (read-only); XLSX → CTA to forms UI (defer to Wave 1B-3 form-cataloguing). Zero new dependencies for v1. Secondary fallback (if mammoth+Tiptap loses critical fidelity): add docx-preview (~150-200 KB, Apache 2.0) — not pre-emptive. The explorer’s edit mode IS the UC1/UC4/UC6 in-platform-edit surface from edit-flow §6.1 Candidate A — one surface, two affordances. Open: cocoindex re-extract behaviour on user-initiated edit-back; DOCX write-back canonical (sidecar v1 vs full DOCX regen v1.1) — gates on Finding 02 Q&A sidecar reopen.


4. Contradictions + tensions surface (from independent contradiction-check pass)

Section titled “4. Contradictions + tensions surface (from independent contradiction-check pass)”
#SeverityWhat conflictsResolution status
C1BLOCKINGPattern A/B parser fate (Finding 04 retires it; Finding 02 implicitly relies on it for recurring Q&A round-trip)OPEN — Liam to rule (B1 above)
C2IMPORTANTtemplate_requirements rename inventory (Finding 04 includes it; Finding 03 does not)OPEN — Liam to rule (I2 above)
C3MINORCoverage 4th gap source name (label says bid_response; feeder is bid_question_matches)OPEN — cosmetic (N4 above)
C4IMPORTANTMarkdown sidecar gates on S9 spike whose status is unclear in decision-graph §5OPEN — Liam to clarify (I3 above)
C5MINORbid_workspaces shape (Finding 05 introduces it as Shape B precedent; Finding 03 inventory doesn’t enumerate it)OPEN — Liam to rule (I1 above)
C6MINORDecision-graph Q1.9 retire seed omits 3 items from Finding 01 Rec 2 (upload-route state paths, backfill script, diff UI components)OPEN — sync fix
#CouplingStatus
K1Finding 01 Option α/β ↔ Finding 02 q_a_extractions FK shapeTENSE — α/β decision must rule on FK shape simultaneously
K2Finding 05 bid_workspaces ↔ Finding 03 Shape B inventoryTENSE — see C5
K3Finding 04 OQ11 cataloguer skill ↔ Finding 03 Q3.11 form_templates deferralRESOLVED — Finding 04 closes Finding 03 OQ-Q311-A
K4Finding 06 explorer edit-mode ↔ Finding 02 Q&A sidecar round-tripTENSE — different file shapes; no shared write-back contract
K5Finding 05 lost-bid learning ↔ State machine terminal statesPARTIALLY ADDRESSED — OQ-Q38-G defers
K6Finding 01 audit_log ↔ Finding 05 evaluator eventsTENSE — unspecified whether evaluator events flow into audit_log
K7Finding 06 PDF read-only ↔ source_documents Option βTENSE — α ratification is a Finding 06 dependency

Listed in dependency order — items higher in the list unblock items lower:

  1. B2 (Option α/β for source_documents) — unblocks K1, K7, B1’s “(c)” branch, OQ-CX33-E, multiple OQ-Q19 items.
  2. I3 (S9 spike status) — unblocks Finding 02 Recommendation 1 (sidecar v1 vs v1.1 binding).
  3. B1 (Pattern A/B parser ownership) — unblocks C1, the recurring Q&A markdown adapter spec.
  4. I1 (bid_workspaces shape — A or B) — unblocks K2, the Shape B precedent for future workspace types.
  5. I2 (template_requirements rename inventory — 2 or 3 tables) — unblocks the combined-PR scoping.
  6. N3 (combined vs sequenced naming-cleanup PR) — unblocks WP3 migration sequence.
  7. N2 (cataloguer skill build-now or defer) — unblocks Finding 04 forward path.
  8. The 20+ operational OQs in §2.3 + §2.4 — these can be ruled in batch alongside or after WP4 sub-docs draft.

6. Quick wins (clean consensus — minimal review burden)

Section titled “6. Quick wins (clean consensus — minimal review burden)”
ItemWhy it’s a quick win
Q1.13 Shape B confirmationFinding 03 + 05 + decision-graph patch all agree on Shape B retention. Only bid_workspaces shape (I1) is open.
Q4.5 mempalace 1:1 mapping, no schema changeFinding 03 Rec 4 + decision-graph patch align. Only operational wing-filter bug remains.
Q1.11 citations rename + extend in placeFinding 02 Rec 3 is structurally uncontested.
Q1.12 bid_question_matches new tableFinding 02 Rec 4 is structurally uncontested.
CX.32 Knowledge Map = Cocoindex (not Graphify)Already S232 RESOLVED; only surface scope is open.
Q3.10 Coverage extend-not-rebuildFinding 04 Rec 2 + Finding 05 Rec 5 agree; only discriminator name (N4) cosmetic.
CX.33 zero-new-deps explorerFinding 06 §4.1 — every read-side primitive in stack today.
Q5.5 project_id → workspace_id renameFinding 03 Rec 2 is uncontested; only Q5.6 combined-vs-sequenced (N3) is open.
OQ11 historical = manual catalogueFinding 04 §3.1 evidence-locked; forward path is N2.
source_documents.version, parent_id, original_filename, source_document_diffs, detect_reupload() retirementFinding 01 Rec 2 explicitly “independent of Option α/β”.
Q3.5 Pattern A/B retire policy (clean once B1 lands)Finding 04 §3.5 — only B1 conditional.

For each of the 9 WP4 sub-docs, the open decisions that gate the draft:

Sub-docOpen decisions that gate the draft
01-vision-mission(None blocking) — pulls from Knowledge Hub — Platform Overview.md + Claude Integration Guide.md per Liam S232 note. Add workspace-types-as-applications framing post-I1.
02-data-flowB2 (α/β), I3 (S9), B1 (Pattern A/B adapter ownership), N5 (upload-route silent-fail), N6 (pipeline_runs fate), N7 (op_id propagation), OQ-CX33-A (cocoindex re-extract).
03-tech-stackOQ-CX33-F (docx-preview trigger). Otherwise clean — Finding 06 doc is the body.
04-workspace-typesI1 (bid_workspaces shape), I2 (rename inventory), OQ-Q113-A (per-type satellite registry pattern), OQ-Q35-C (form requirement_type), OQ-Q38-E (bid_workspaces column count).
05-qa-flowI3 (S9), N1=B1 (Q&A adapter ownership), N8 (future citers), N9 (per-match weighting), N11 (q_a_pair provenance), OQ-Q35-A, OQ-Q35-B, OQ-Q38-D, OQ-Q38-F, OQ-CX33-B.
06-mcp-toolingQ4.5 wing wire-up checklist + MCP-action review pass (§8.3) — gated independently.
07-collapse-listC6 retire-seed sync, Q3.5 status (gated on B1), I2 (rename inventory in 04-workspace-types).
08-new-featuresN4 (coverage 4th source naming), OQ-Q310-A (Phase 4 scoring), OQ-Q310-B (low-match auto-gap), OQ-Q38-A (lost-bid default), OQ-Q38-G (state machine), Knowledge Map surface scope (CX.32 RESOLVED).
09-diagrams(None blocking) — produces ERDs + ingest flow + Q&A round-trip + write-back flow + bid-feedback 3-UC diagram. Gated on the substrate decisions above for accuracy.

Bottom line for WP4 readiness: 01-vision-mission, 03-tech-stack, and 09-diagrams are nearly drafable today. 06-mcp-tooling depends on the orthogonal MCP-action review pass (per 0.9-synthesis.md §11.1). The other five (02-data-flow, 04-workspace-types, 05-qa-flow, 07-collapse-list, 08-new-features) all gate on at least one of B1/B2/I1/I2/I3. Resolving those 5 decisions clears the critical path.


8. Outstanding items NOT covered by the 6 findings (carry-forward)

Section titled “8. Outstanding items NOT covered by the 6 findings (carry-forward)”

These came through S231 / S232 prompts or earlier sessions but are not in the 6 finding docs:

  • §8.3 MCP-action review pass (per 0.9-synthesis.md §11.1) — refine/remove/extend disposition for proposed MCP-tool registrations + revoke-execute migrations. Independent gate from the 6 findings; lands in WP4 06-mcp-tooling.md.
  • Knowledge Map surface scope — CX.32 ratified Cocoindex as substrate (S232 RESOLVED), but the user-facing feature shape is undefined. Lands in WP4 08-new-features.md.
  • Bulk operations / Content CRUD / Soft delete — S231 feedback “NOT COLLAPSING”. Stays as-is; surface is preserved.
  • OQ-Q113-B RLS pattern for new tables (audit_log, citations, bid_question_matches, bid_workspaces) — uses workspace_id from content_item_workspaces JOIN or bid_questions.workspace_id directly. Worth a dedicated pattern doc when WP4 04-workspace-types.md lands.
  • Mempalace mempalace_search wing-filter bug (CLAUDE.md ⚠ PARTIAL) — tracked operationally; not architectural.

For the 6 findings, suggested review order:

  1. Finding 01 (source_documents + audit) — unblocks the most downstream items via B2.
  2. Finding 03 (workspace types + renames) — unblocks I1, I2, N3.
  3. Finding 02 (Q&A write-back) — gates on I3 (S9 status confirmation) which Liam owns.
  4. Finding 04 (historical extraction + coverage) — gates on B1 (Q&A adapter ownership from review of Finding 02).
  5. Finding 05 (bid feedback loop) — depends on I1 from Finding 03 review.
  6. Finding 06 (source-doc explorer) — depends on B2 from Finding 01 review (PDF Option β fallback).

Reviewing in this order resolves the dependency chain. Reviewing in any other order risks repeated re-rulings as later findings clarify earlier dependencies.


End of S232+S233 finding synthesis. Every recommendation traces back to one of the 6 finding docs; nothing in this synthesis introduces new architecture. Liam ratification of the open decisions in §2 + §5 unlocks WP4.