KB-27ED

PIDX Seed Slice v0.2 — 13 prototype procedures (candidate, text only, live-verified)

21 min read Revision 1
workflow-manageprocedure-indexpidxseed-sliceprototype13-proceduresfixturescandidatetext-onlydeterministicv0.22026-06-23

PIDX Seed Slice v0.2 — 13 prototype procedures (candidate, text only)

Path: knowledge/dev/laws-new/workflow-manage/design/pidx-seed-slice-v0.2.md Status: CANDIDATE SEED · TEXT ONLY · NOT INSERTED · 0 PG writes. A small build-prototype slice (NOT the full 39). Designed to exercise every patched status/flag deterministically, not to populate a complete library. Date: 2026-06-23 · grounded by SELECT-only reads on directus (role context_pack_readonly, PG 16.13). Every fixture below was verified against live data. Companions: pidx-readiness-logic-v0.2.md (status rules), pidx-test-plan-v0.2.md (asserts the outcomes below), pidx-ddl-candidate-v0.2.sql.md (tables).


0. Slice rationale

Seed 13 procedures (the v0.1 nine, lightly adjusted, + four explicit fixture procedures) chosen so the prototype exercises every patched case: the strict parser (P0-2), collection logical/physical (P0-3), label facet grammar (P0-4), zero-required (P0-5), lifecycle/usability (P1-1), approval-handler gating (P1-3), function overload (H3), warning completeness (P1-2), and READINESS_DRIFT. Still a small slice; the remaining ~30 of the 39 are seeded only after the prototype proves the status machine.

Conventions: assembly_layer='UNMAPPED' for all seeds (no fabricated layer metadata). declared_maturity is a HINT; PG recomputes readiness. source_ref='seed:pidx-seed-slice-v0.2' (used by the rollback non-seed guard).

0.1 Live fixtures used (verified 2026-06-23)

fixture ref live fact resolves to
dot:DOT-001 exists, status=active EXISTS, usable
collection:public.dot_tools physical ✓ + Directus ✓ EXISTS, no mismatch
collection:public.collection_registry physical ✓ + Directus ✓ EXISTS, no mismatch
collection:public.directus_collections physical ✓, Directus ✗ EXISTS + LOGICAL_PHYSICAL_MISMATCH
collection:public.sales physical ✗, Directus ✓ (folder) MISSING + LOGICAL_PHYSICAL_MISMATCH
field:public.dot_tools.code column exists EXISTS
approval:patch_ops_code handler dot-apr-execute:patch_ops, active EXISTS, usable
approval:assign_governance_owner handler unimplemented, active EXISTS, usable=false, APPROVAL_HANDLER_UNIMPLEMENTED
event:iu.collection_created active=true EXISTS, usable
event:governance.backfill.sweep_completed active=false (type contains a dot) EXISTS, usable=false, SOURCE_NOT_USABLE
function:public.pgp_pub_decrypt 3 signatures EXISTS + OVERLOADED_FUNCTION
label:1.LBL-001 / label:LBL-001 facet_id=1, code unique, active EXISTS, no AMBIGUOUS_LABEL (code unique)
collection:cutter_governance.policy_state schema present, role lacks USAGE READ_BLOCKED

1. The 13 seed procedures

# procedure_code domain_group declared_maturity automation_mode safety_class
1 PROC_CHECK_DOT_EXISTS dot-manage machine_readable one_button read_only
2 PROC_CREATE_NEW_DOT dot-manage dot_sequence_ready agent_assisted owner_gated
3 PROC_UPDATE_DOT_HANDBOOK dot-manage text_ready manual ai_delegatable
4 PROC_VERIFY_COLLECTION_EXISTS collections-manage one_button_ready one_button read_only
5 PROC_VERIFY_FIELD_EXISTS collections-manage one_button_ready one_button read_only
6 PROC_CLASSIFY_COLLECTION collections-manage machine_readable agent_assisted ai_delegatable
7 PROC_TRIAGE_UNKNOWN_SOURCE triage known manual ai_delegatable
8 PROC_RESOLVE_INVALID_REF triage known agent_assisted ai_delegatable
9 PROC_BUILD_READINESS_REPORT procedure-index machine_readable one_button read_only
10 PROC_FIXTURE_PARSER_GUARDS fixture known manual read_only
11 PROC_FIXTURE_LIFECYCLE_AND_WARN fixture known manual read_only
12 PROC_FIXTURE_LOGICAL_ONLY fixture one_button_ready one_button read_only
13 PROC_FIXTURE_NONGATING fixture one_button_ready one_button read_only

2. Declared ingredients and the per-ingredient outcome each exercises

procedure_code ingredient_ref kind required_level ref_status expected per-ingredient status usable warns
PROC_CHECK_DOT_EXISTS dot:DOT-001 dot required NORMALIZED EXISTS true
PROC_CHECK_DOT_EXISTS collection:public.dot_tools collection required NORMALIZED EXISTS unknown
PROC_CREATE_NEW_DOT procedure:PROC_REUSE_FIRST_SEARCH procedure required NORMALIZED MISSING
PROC_CREATE_NEW_DOT collection:public.dot_tools collection required NORMALIZED EXISTS unknown
PROC_CREATE_NEW_DOT approval:patch_ops_code approval required NORMALIZED EXISTS true
PROC_CREATE_NEW_DOT template:dot_spec_template template nice_to_have NORMALIZED UNKNOWN_SOURCE OPTIONAL_UNKNOWN_SOURCE
PROC_UPDATE_DOT_HANDBOOK report:dot-usage-handbook report required NORMALIZED UNKNOWN_SOURCE
PROC_UPDATE_DOT_HANDBOOK collection:public.dot_tools collection required NORMALIZED EXISTS unknown
PROC_VERIFY_COLLECTION_EXISTS collection:public.collection_registry collection required NORMALIZED EXISTS unknown
PROC_VERIFY_FIELD_EXISTS field:public.dot_tools.code field required NORMALIZED EXISTS unknown
PROC_VERIFY_FIELD_EXISTS field:public.dot_tools.does_not_exist field nice_to_have NORMALIZED MISSING OPTIONAL_MISSING
PROC_CLASSIFY_COLLECTION collection:public.collection_registry collection required NORMALIZED EXISTS unknown
PROC_CLASSIFY_COLLECTION approval:assign_governance_owner approval required NORMALIZED EXISTS false APPROVAL_HANDLER_UNIMPLEMENTED
PROC_TRIAGE_UNKNOWN_SOURCE (zero ingredients — intentional)
PROC_RESOLVE_INVALID_REF field:public.dot_tools field required UNNORMALIZED INVALID_REF (arity 2≠3)
PROC_RESOLVE_INVALID_REF dot:DOT_PIDX_FAKE_0000 dot nice_to_have NORMALIZED MISSING OPTIONAL_MISSING
PROC_RESOLVE_INVALID_REF collection:cutter_governance.policy_state collection nice_to_have NORMALIZED READ_BLOCKED OPTIONAL_READ_BLOCKED
PROC_RESOLVE_INVALID_REF report:ref-grammar-v0.1 report nice_to_have NORMALIZED UNKNOWN_SOURCE OPTIONAL_UNKNOWN_SOURCE
PROC_RESOLVE_INVALID_REF function:badname function nice_to_have NORMALIZED INVALID_REF (arity 1≠2) OPTIONAL_INVALID_REF
PROC_BUILD_READINESS_REPORT view:public.v_pidx_procedure_readiness view required NORMALIZED EXISTS (post-build) unknown
PROC_BUILD_READINESS_REPORT view:public.v_pidx_inventory_current view required NORMALIZED EXISTS (post-build) unknown
PROC_FIXTURE_PARSER_GUARDS dot:patch_ops_code (kind=approval) approval required NORMALIZED INVALID_REF (prefix≠kind)
PROC_FIXTURE_PARSER_GUARDS field:public.dot_tools.code.extra field required NORMALIZED INVALID_REF (arity 4≠3)
PROC_FIXTURE_PARSER_GUARDS event:collection_created event required NORMALIZED INVALID_REF (arity 1<2)
PROC_FIXTURE_PARSER_GUARDS collection:dot_tools collection required NORMALIZED INVALID_REF (no schema, arity 1≠2)
PROC_FIXTURE_LIFECYCLE_AND_WARN event:iu.collection_created event required NORMALIZED EXISTS true
PROC_FIXTURE_LIFECYCLE_AND_WARN function:public.pgp_pub_decrypt function required NORMALIZED EXISTS unknown OVERLOADED_FUNCTION
PROC_FIXTURE_LIFECYCLE_AND_WARN label:1.LBL-001 label required NORMALIZED EXISTS true
PROC_FIXTURE_LIFECYCLE_AND_WARN event:governance.backfill.sweep_completed event nice_to_have NORMALIZED EXISTS false SOURCE_NOT_USABLE
PROC_FIXTURE_LIFECYCLE_AND_WARN collection:public.directus_collections collection NEEDS_TRIAGE NORMALIZED EXISTS unknown LOGICAL_PHYSICAL_MISMATCH, REQUIRED_LEVEL_UNTRIAGED
PROC_FIXTURE_LOGICAL_ONLY collection:public.sales collection required NORMALIZED MISSING (logical-only) LOGICAL_PHYSICAL_MISMATCH
PROC_FIXTURE_NONGATING collection:public.dot_tools collection optional NORMALIZED EXISTS unknown
PROC_FIXTURE_NONGATING dot:DOT-001 dot nice_to_have NORMALIZED EXISTS true

3. Expected per-procedure rollup (the assertion targets)

# procedure_code computed_readiness readiness_drift warning_flags (sorted distinct) why
1 PROC_CHECK_DOT_EXISTS READY false {} all required EXISTS+usable, no warnings
2 PROC_CREATE_NEW_DOT NOT_READY true {OPTIONAL_UNKNOWN_SOURCE} required procedure: MISSING; declared dot_sequence_ready ⇒ DRIFT; optional template UNKNOWN_SOURCE
3 PROC_UPDATE_DOT_HANDBOOK NOT_READY false {} required report: UNKNOWN_SOURCE (hard gate via req_unknown_count); text_ready not ready-tier ⇒ no drift
4 PROC_VERIFY_COLLECTION_EXISTS READY false {} single required EXISTS (collection_registry: physical+logical)
5 PROC_VERIFY_FIELD_EXISTS READY_WITH_WARNINGS false {OPTIONAL_MISSING} required EXISTS; a non-gating field MISSING
6 PROC_CLASSIFY_COLLECTION NOT_READY false {APPROVAL_HANDLER_UNIMPLEMENTED} required approval handler unimplemented ⇒ usable=false ⇒ NOT_READY (safe rule, P1-3)
7 PROC_TRIAGE_UNKNOWN_SOURCE UNMAPPED false {} zero ingredients ⇒ never silent READY
8 PROC_RESOLVE_INVALID_REF NOT_READY false {OPTIONAL_INVALID_REF, OPTIONAL_MISSING, OPTIONAL_READ_BLOCKED, OPTIONAL_UNKNOWN_SOURCE} required INVALID_REF; known ⇒ no drift; four non-gating problems surfaced
9 PROC_BUILD_READINESS_REPORT READY false {} both required views EXIST post-build
10 PROC_FIXTURE_PARSER_GUARDS NOT_READY false {} 4× required INVALID_REF (prefix-mismatch, extra-seg, missing-seg, no-schema) ⇒ req_invalid_count=4; anti-false-green parser proof
11 PROC_FIXTURE_LIFECYCLE_AND_WARN READY_WITH_WARNINGS false {LOGICAL_PHYSICAL_MISMATCH, OVERLOADED_FUNCTION, REQUIRED_LEVEL_UNTRIAGED, SOURCE_NOT_USABLE} all required EXIST+usable/overload-warned; optional inactive event + physical-only collection + untriaged level
12 PROC_FIXTURE_LOGICAL_ONLY NOT_READY true {LOGICAL_PHYSICAL_MISMATCH} required collection is Directus-logical-only ⇒ MISSING ⇒ NOT_READY; one_button_ready ⇒ DRIFT (P0-3 anti-false-green)
13 PROC_FIXTURE_NONGATING UNMAPPED true {} 2 optional EXISTS, zero required ⇒ UNMAPPED not READY (P0-5); one_button_ready ⇒ DRIFT

This slice covers every per-procedure status (READY×3, READY_WITH_WARNINGS×2, NOT_READY×5, UNMAPPED×2), every per-ingredient status (EXISTS, MISSING, UNKNOWN_SOURCE, INVALID_REF, READ_BLOCKED), READINESS_DRIFT (×3), and 8 of the 11 warning flags concretely. AMBIGUOUS_LABEL and STALE_SOURCE are armed but inert on current data (0 multi-facet codes; pure views always fresh) — exercised by the deterministic pre-check in the test plan, not fabricated. OVERLOADED_FUNCTION is also exercised via the inventory branch on real catalog data (pgp_pub_decrypt).


4. Candidate seed SQL (TEXT ONLY — DO NOT EXECUTE)

-- CANDIDATE SEED — DO NOT EXECUTE. Insert only after the governed build of the two tables.
INSERT INTO public.pidx_procedure
  (procedure_code, name, short_note, intent, domain_group, assembly_layer,
   declared_maturity, automation_mode, safety_class, status, manifest_jsonb, source_ref)
VALUES
 ('PROC_CHECK_DOT_EXISTS','Check if a DOT exists','One-button existence probe of a DOT by code.',
   'Answer: does DOT X exist?','dot-manage','UNMAPPED','machine_readable','one_button','read_only','active','{}'::jsonb,'seed:pidx-seed-slice-v0.2'),
 ('PROC_CREATE_NEW_DOT','Create a new DOT (full lifecycle, no orphan)','Reuse-first, then governed create + birth.',
   'Create a DOT without orphaning DB/FS.','dot-manage','UNMAPPED','dot_sequence_ready','agent_assisted','owner_gated','active','{}'::jsonb,'seed:pidx-seed-slice-v0.2'),
 ('PROC_UPDATE_DOT_HANDBOOK','Add/update a DOT spec & handbook','Update a DOT''s spec/handbook evidence.',
   'Keep DOT docs current.','dot-manage','UNMAPPED','text_ready','manual','ai_delegatable','active','{}'::jsonb,'seed:pidx-seed-slice-v0.2'),
 ('PROC_VERIFY_COLLECTION_EXISTS','Verify a collection/table exists','One-button existence probe of a collection/table.',
   'Answer: does collection X exist?','collections-manage','UNMAPPED','one_button_ready','one_button','read_only','active','{}'::jsonb,'seed:pidx-seed-slice-v0.2'),
 ('PROC_VERIFY_FIELD_EXISTS','Verify a field/column exists','One-button existence probe of a column.',
   'Answer: does field X exist?','collections-manage','UNMAPPED','one_button_ready','one_button','read_only','active','{}'::jsonb,'seed:pidx-seed-slice-v0.2'),
 ('PROC_CLASSIFY_COLLECTION','Classify a collection (governance_role)','Assign/verify governance classification.',
   'Classify a collection.','collections-manage','UNMAPPED','machine_readable','agent_assisted','ai_delegatable','active','{}'::jsonb,'seed:pidx-seed-slice-v0.2'),
 ('PROC_TRIAGE_UNKNOWN_SOURCE','Handle an UNKNOWN_SOURCE ingredient','Decide where an unknown-source kind should be probed.',
   'Triage an unknown source.','triage','UNMAPPED','known','manual','ai_delegatable','active','{}'::jsonb,'seed:pidx-seed-slice-v0.2'),
 ('PROC_RESOLVE_INVALID_REF','Resolve an INVALID_REF (normalize per grammar)','Normalize a malformed ref per grammar v0.2.',
   'Fix a malformed ingredient ref.','triage','UNMAPPED','known','agent_assisted','ai_delegatable','active','{}'::jsonb,'seed:pidx-seed-slice-v0.2'),
 ('PROC_BUILD_READINESS_REPORT','Build a readiness report for a procedure','Render a procedure''s readiness from the views.',
   'Report readiness for a procedure.','procedure-index','UNMAPPED','machine_readable','one_button','read_only','active','{}'::jsonb,'seed:pidx-seed-slice-v0.2'),
 ('PROC_FIXTURE_PARSER_GUARDS','Fixture: strict-parser guards','Four deliberately malformed refs that must all be INVALID_REF.',
   'Prove the strict parser rejects bad refs before probing.','fixture','UNMAPPED','known','manual','read_only','active','{}'::jsonb,'seed:pidx-seed-slice-v0.2'),
 ('PROC_FIXTURE_LIFECYCLE_AND_WARN','Fixture: lifecycle + warnings','Exercises overload, inactive source, physical-only collection, untriaged level.',
   'Prove warnings surface without false-blocking.','fixture','UNMAPPED','known','manual','read_only','active','{}'::jsonb,'seed:pidx-seed-slice-v0.2'),
 ('PROC_FIXTURE_LOGICAL_ONLY','Fixture: Directus logical-only collection','A required collection present only as Directus metadata.',
   'Prove logical-only != READY.','fixture','UNMAPPED','one_button_ready','one_button','read_only','active','{}'::jsonb,'seed:pidx-seed-slice-v0.2'),
 ('PROC_FIXTURE_NONGATING','Fixture: zero-required, optional-only','Only optional ingredients, all existing.',
   'Prove zero-required != READY.','fixture','UNMAPPED','one_button_ready','one_button','read_only','active','{}'::jsonb,'seed:pidx-seed-slice-v0.2');

INSERT INTO public.pidx_procedure_ingredient
  (procedure_code, step_code, ingredient_kind, ingredient_ref, usage_role, required_level, ref_status, missing_route_procedure_code)
VALUES
 ('PROC_CHECK_DOT_EXISTS', NULL,'dot','dot:DOT-001','calls','required','NORMALIZED', NULL),
 ('PROC_CHECK_DOT_EXISTS', NULL,'collection','collection:public.dot_tools','reads','required','NORMALIZED', NULL),
 ('PROC_CREATE_NEW_DOT', 'reuse_first','procedure','procedure:PROC_REUSE_FIRST_SEARCH','calls','required','NORMALIZED','PROC_DESIGN_NEW_PROCEDURE'),
 ('PROC_CREATE_NEW_DOT', 'register','collection','collection:public.dot_tools','writes','required','NORMALIZED', NULL),
 ('PROC_CREATE_NEW_DOT', 'approve','approval','approval:patch_ops_code','requires','required','NORMALIZED', NULL),
 ('PROC_CREATE_NEW_DOT', 'draft_spec','template','template:dot_spec_template','requires','nice_to_have','NORMALIZED','PROC_TRIAGE_UNKNOWN_SOURCE'),
 ('PROC_UPDATE_DOT_HANDBOOK', NULL,'report','report:dot-usage-handbook','writes','required','NORMALIZED','PROC_CANONICALIZE_EVIDENCE_KB'),
 ('PROC_UPDATE_DOT_HANDBOOK', NULL,'collection','collection:public.dot_tools','reads','required','NORMALIZED', NULL),
 ('PROC_VERIFY_COLLECTION_EXISTS', NULL,'collection','collection:public.collection_registry','reads','required','NORMALIZED', NULL),
 ('PROC_VERIFY_FIELD_EXISTS', NULL,'field','field:public.dot_tools.code','reads','required','NORMALIZED', NULL),
 ('PROC_VERIFY_FIELD_EXISTS', NULL,'field','field:public.dot_tools.does_not_exist','reads','nice_to_have','NORMALIZED', NULL),
 ('PROC_CLASSIFY_COLLECTION', NULL,'collection','collection:public.collection_registry','reads','required','NORMALIZED', NULL),
 ('PROC_CLASSIFY_COLLECTION', NULL,'approval','approval:assign_governance_owner','requires','required','NORMALIZED', NULL),
 -- PROC_TRIAGE_UNKNOWN_SOURCE: intentionally NO ingredient rows
 ('PROC_RESOLVE_INVALID_REF', NULL,'field','field:public.dot_tools','reads','required','UNNORMALIZED','PROC_TRIAGE_UNKNOWN_SOURCE'),
 ('PROC_RESOLVE_INVALID_REF', NULL,'dot','dot:DOT_PIDX_FAKE_0000','calls','nice_to_have','NORMALIZED', NULL),
 ('PROC_RESOLVE_INVALID_REF', NULL,'collection','collection:cutter_governance.policy_state','reads','nice_to_have','NORMALIZED', NULL),
 ('PROC_RESOLVE_INVALID_REF', NULL,'report','report:ref-grammar-v0.1','reads','nice_to_have','NORMALIZED', NULL),
 ('PROC_RESOLVE_INVALID_REF', NULL,'function','function:badname','calls','nice_to_have','NORMALIZED', NULL),
 ('PROC_BUILD_READINESS_REPORT', NULL,'view','view:public.v_pidx_procedure_readiness','reads','required','NORMALIZED', NULL),
 ('PROC_BUILD_READINESS_REPORT', NULL,'view','view:public.v_pidx_inventory_current','reads','required','NORMALIZED', NULL),
 -- Fixture: strict-parser guards (all four must be INVALID_REF; note the deliberate kind/ref mismatch on row 1)
 ('PROC_FIXTURE_PARSER_GUARDS', 'prefix_mismatch','approval','dot:patch_ops_code','requires','required','NORMALIZED', NULL),
 ('PROC_FIXTURE_PARSER_GUARDS', 'extra_segment','field','field:public.dot_tools.code.extra','reads','required','NORMALIZED', NULL),
 ('PROC_FIXTURE_PARSER_GUARDS', 'missing_segment','event','event:collection_created','calls','required','NORMALIZED', NULL),
 ('PROC_FIXTURE_PARSER_GUARDS', 'no_schema','collection','collection:dot_tools','reads','required','NORMALIZED', NULL),
 -- Fixture: lifecycle + warnings
 ('PROC_FIXTURE_LIFECYCLE_AND_WARN', NULL,'event','event:iu.collection_created','calls','required','NORMALIZED', NULL),
 ('PROC_FIXTURE_LIFECYCLE_AND_WARN', NULL,'function','function:public.pgp_pub_decrypt','calls','required','NORMALIZED', NULL),
 ('PROC_FIXTURE_LIFECYCLE_AND_WARN', NULL,'label','label:1.LBL-001','reads','required','NORMALIZED', NULL),
 ('PROC_FIXTURE_LIFECYCLE_AND_WARN', NULL,'event','event:governance.backfill.sweep_completed','calls','nice_to_have','NORMALIZED', NULL),
 ('PROC_FIXTURE_LIFECYCLE_AND_WARN', NULL,'collection','collection:public.directus_collections','reads','NEEDS_TRIAGE','NORMALIZED', NULL),
 -- Fixture: logical-only collection (Directus folder, no physical table)
 ('PROC_FIXTURE_LOGICAL_ONLY', NULL,'collection','collection:public.sales','reads','required','NORMALIZED','PROC_CREATE_COLLECTION'),
 -- Fixture: zero-required (optional-only)
 ('PROC_FIXTURE_NONGATING', NULL,'collection','collection:public.dot_tools','reads','optional','NORMALIZED', NULL),
 ('PROC_FIXTURE_NONGATING', NULL,'dot','dot:DOT-001','calls','nice_to_have','NORMALIZED', NULL);

5. Seeding discipline

  • Seed rows only; declare ingredients lazily. The negative-path refs (UNKNOWN_SOURCE/READ_BLOCKED/INVALID_REF/logical-only/inactive) are included on purpose — surfacing where the system has no clean PG source, where a ref is malformed, or where an object is unusable is a feature, not a defect.
  • manifest_jsonb stays {} for all 13 seeds (do not over-design manifests).
  • The deliberate synthetic refs (dot:DOT_PIDX_FAKE_0000, field:public.dot_tools.does_not_exist, collection:public.sales, function:badname, collection:dot_tools, the prefix-mismatch row) are the negative-path fixtures that prove the anti-false-green machine.
  • The remaining ~30 of the 39 candidates are seeded after the prototype proves the status machine.