|
| 1 | +## 2026-05-31 — REVIEW VERDICT (council+brutal) of odoo-classes-bitmask-render-v1 (#440): HOLD — 3 P0 factual errors + 1 vaporware deliverable; plan must NOT spawn agents as-written |
| 2 | + |
| 3 | +**Status:** FINDING / plan-correction (5-savant-council + 3-brutal review the plan's §2 + user requested, 2026-05-31). The merged plan #440 is sound in DOCTRINE (classes.md §"Jinja=classes+presence bitmask" verbatim) but has load-bearing factual errors vs on-disk source. Corrections required before Wave-1 spawn. Plan file is append-only governance — these corrections are dated board entries, NOT edits to the plan. |
| 4 | + |
| 5 | +**P0 ERRORS (verified against source, file:line):** |
| 6 | +1. **Entity count is 381, NOT 66.** 64 curated consts in `odoo_blueprint/l{1..15}.rs` + **317 `EXT_*`** in `odoo_blueprint/extracted/` (compiled: `mod.rs:77 pub mod extracted;`). D-CLS-6 adds `class_id` to the SHARED `OdooEntity` struct → ALL 381 back-fill, not 66. D-CLS-2/9 "iterate the 66" is ~6× off — either scope to curated-64 explicitly (defensible: extracted/mod.rs:5 "additive, curated stays canonical") OR own all 381. Decide; don't silently ignore 317. |
| 7 | +2. **`class_id` ALREADY EXISTS** — `lance-graph-contract/src/soa_view.rs:61` `fn class_id(&self)->&[u16]` + `class_id_at` (the N1 hook shipped #437, aliases entity_type u16). D-CLS-3/5's new `ClassId(u16)` newtype COLLIDES in the same crate. Must RECONCILE with the existing accessor (newtype wrapping the same u16, or extend the accessor), not mint a second. |
| 8 | +3. **Canonical `DolceCategory` has 6 variants, NOT 4** — `cognition/entity.rs:87`: Endurant/Perdurant/**AbstractObject**/Quality/**Region**/**Other**. NO variant named `Abstract`. D-CLS-1's From-test (plan:105 "preserves Endurant/Perdurant/Quality/Abstract") references a non-existent variant → won't compile. Also `entity.rs:88` has a live `// Stage 2 expands this enum` TODO = actively-edited (AP1 collision). The OD-DOLCE-CANONICAL default-lean must map all 6 (incl Region/Other/AbstractObject) + callcenter `Abstract`→`AbstractObject` + `Unknown`→`Other`. |
| 9 | + |
| 10 | +**P1 VAPORWARE:** D-CLS-3 "Aerial+ structural-hash → 10-15 shape-families" — aerial only exposes `mine()->Vec<CandidateRule>` (association rules, antecedent→consequent), NO entity-clustering/group-by entry point (`aerial/mod.rs:69`; grep cluster/group_by/shape_family = zero code). "Point Aerial+ at Odoo to cluster entities" CANNOT be done with the cited crate. Downgrade D-CLS-3 to a deterministic **group-by-on-structural-hash** (the plan's own risk-register fallback) — that's real and matches classes.md:43 ("group-by-on-structural-hash OR Aerial+"). |
| 11 | + |
| 12 | +**IRON-RULE (council, YIELDS-WITH-AP):** No iron rule violated. (a) presence≠facet-code wall HOLDS — `FieldMask(u64)` presence-of-field is correctly distinct from faiss-homology facet-u64 (CAM closed-range codes); keep the wall explicit in D-CLS-7 doc (never AND-ed/superposed). (b) **AP2 landmine:** D-CLS-5/7 FieldPositionTable must **freeze append-only on first emit**, NOT recompute the bit positions from the field-union each build (a re-audit reordering members → bit N changes meaning → old masks misread; N3 + I-LEGACY-API-FEATURE-GATED). Add a golden position-stability test. (c) u16 ClassId fine — discriminator stays OUTSIDE the CAM content-hash layer (never hashed-as-content/superposed). (d) zero-dep boundary sound (arm-discovery local-newtype+TryFrom, no contract dep). |
| 13 | + |
| 14 | +**SHIPPABLE-ONCE-RATIFIED (brutal cut):** D-CLS-2 (signatures, read-only — FIX count to 381 or scope-to-64), D-CLS-4 (render-crate skeleton, isolated), D-CLS-5 (ClassId — ONLY after reconciling soa_view::class_id). PREMATURE until P0 fixed: D-CLS-1 (6≠4 variant map), D-CLS-3 (vaporware→group-by), D-CLS-6/7/8/9 (inherit the 381 + ClassId-dup). |
| 15 | + |
| 16 | +**The 4 OD gates remain blocking (surfaced to user this turn):** OD-DOLCE-CANONICAL (now: map 6 variants), OD-CLASSID-WIDTH (u16 lean OK), OD-CLASSID-VS-ENTITYKIND (coexist lean OK), OD-TEMPLATE-ENGINE (askama lean OK). No agent spawns until ratified. |
| 17 | + |
| 18 | +**Cross-ref:** #440 (the plan); `odoo-classes-bitmask-render-v1.md` §2 (OD gates) / §4 (D-CLS deliverables); `soa_view.rs:61` (existing class_id); `cognition/entity.rs:87` (6-variant DolceCategory); `aerial/mod.rs:69` (mine, not cluster); classes.md:43/50/65 (discovered-taxonomy / presence-not-semantics / N3); iron-rule AP2; the post-#438 4-savant council (#440 `4f381a8`). |
1 | 19 | ## 2026-05-30 — SHIPPED-in-PR: M1 keystone — `Tactic::requires() -> ThoughtMask` (the latent checklist made data; reliability = coverage, extraction not construction) |
2 | 20 |
|
3 | 21 | **Status:** SHIPPED-in-PR #439 (D-MBX-A6-P3-M1). The panel-recalibrated keystone of reliability-checklist-arc-v1, built autonomously. |
|
0 commit comments