COMPO · 12.03 · RULE-BREAK CANDIDATES + JUSTIFICATION

Generate options.
Demand evidence.

12.03 формирует ограниченный детерминированный набор rule-break candidates только из явных owner-qualified variant evidence и отдельно проверяет структурную достаточность justification evidence. Кандидат не равен размещению, justification не равен score, а ни один из них не может обойти hard protection или exception budget.

ModuleCompo 12.03
Candidatesbounded + seeded
Geometryowner-qualified
Justificationexplicit evidence
Scorenone
NextSTOP

Candidate generation is not self-authorization

00 / contract

12.00 supplies explicit intent. 12.01 supplies measured deviation when a candidate is materialized. 12.02 supplies hard-protection and budget evidence. 12.03 supplies only bounded candidate descriptors and explicit rationale evidence.

BOUNDED

Explicit maxCandidates, hard safety cap 64.

SEEDED

Deterministic diversity order.

NO MUTATION

Variant owner materializes geometry.

NO SCORE

Rationale sufficiency is categorical.

VALID FLOW: explicit RuleBreakIntent → explicit owner-qualified candidate variants → bounded deterministic RuleBreakCandidate[] → candidate-specific justification evidence → categorical justification evaluation FORBIDDEN: observed deviation → invent candidate REQUEST_BREAK → bypass protection/budget unused budget → generate more candidates free text → proof candidate ordinal → rank justification sufficiency → final acceptance

12.03 owns packaging and rationale evidence

01 / ownership

It does not own the geometry being proposed. The candidate points at a proposal or immutable materialized state owned elsewhere.

OWNS

Candidate layer

Variant adapters, generation profile, bounded selection, dedupe, deterministic diversity and candidate identity.

OWNS

Justification layer

Owner-qualified evidence, explicit structural requirement policy and categorical sufficiency evaluation.

DEFERS

12.04

Final Topic12 integration, hard-gate precedence, override scoring and consolidated tests.

No metric vote.

owns_metrics=[]. Candidate count, evidence count and number of satisfied clauses are structural diagnostics, not independent scoring votes.

RuleBreakCandidateVariantEvidence

02 / foreign geometry adapter

12.03 does not invent coordinates. It consumes an exact proposal/state identity from the module or service that actually owns candidate geometry.

RuleBreakCandidateVariantEvidence {
  variantEvidenceRef,

  variantRef,
  variantOwnerRef,
  variantModuleRef,
  variantSnapshotRef,

  materializationState:
    PROPOSAL_ONLY
    MATERIALIZED,

  candidateStateRef?,

  targetEvidenceRef,
  intentRef,
  targetFamily,
  subjectRefs[],

  canvasRef,
  coordinateFrame,
  sourceUnit,

  diversityBucketKey,

  evidenceRefs[],
  confidence,
  provenance,
  status,

  mutationAllowed: false
}
PROPOSAL_ONLY

Opaque owner-qualified proposal. 12.03 may package it as a candidate but cannot claim measured deviation or protection/budget outcome.

MATERIALIZED

Requires immutable candidateStateRef. Downstream 12.01/12.02 evidence may bind to that state.

Generation is explicit policy

03 / profile

No intent mode automatically forces candidate production. Even REQUEST_BREAK needs an explicit generation profile.

RuleBreakCandidateGenerationProfile {
  candidateGenerationProfileRef,

  profileSourceRef,
  profileSourceOwnerRef,

  allowedIntentModes[],

  maxCandidates,
  seed,

  diversityMode:
    SEEDED_ROUND_ROBIN_BUCKETS,

  includeProposalOnly,
  includeMaterialized,

  requiredVariantOwnerRefs[],

  provenance,
  status,

  mutationAllowed: false
}
maxCandidates: integer 1..64 64: implementation safety cap != composition law != recommended candidate count allowedIntentModes: explicit policy != inferred from list order requiredVariantOwnerRefs = []: no additional owner allowlist restriction NOT "owner may be missing"

Bounded seeded diversity

04 / deterministic generation

Generation validates, deduplicates and diversity-prunes an explicit variant pool. It never creates a Cartesian product of rule, subject, offset and rationale options.

1. validate target + intent + resolution 2. validate profile 3. require intentMode ∈ allowedIntentModes 4. validate explicit owner-qualified variants 5. filter materialization state by profile 6. filter owner allowlist if explicitly present 7. detect identity collisions 8. canonical sort 9. group by diversityBucketKey 10. rotate bucket order deterministically from seed 11. seeded round-robin across buckets 12. take ≤ maxCandidates 13. emit RuleBreakCandidate[] NO: geometry synthesis nearest-rule selection subject mutation budget reservation scoring final placement
Diversity is not preference.

diversityBucketKey and seeded round-robin exist only to prevent one explicit variant family from monopolizing a bounded set. A bucket has no canonical strength or rank.

RuleBreakCandidate

05 / output descriptor

The output is a stable reference envelope. ordinal describes deterministic emission position and must never be read as desirability.

RuleBreakCandidate {
  candidateRef,

  candidateGenerationProfileRef,
  variantEvidenceRef,

  variantRef,
  variantOwnerRef,

  materializationState,
  candidateStateRef?,

  targetEvidenceRef,
  intentRef,
  intentMode,
  targetFamily,
  subjectRefs[],

  diversityBucketKey,
  seed,
  ordinal,

  confidence,
  status: "OK",
  provenance: "DERIVED",

  derivedFrom[],
  mutationAllowed: false
}
candidate != placement candidate != acceptance candidate != score ordinal 0: first deterministic emitted candidate NOT best candidate

Justification must be evidence, not prose

06 / evidence schema

A rationale can point to a human directive, style rationale, semantic policy or external policy, but it must have an explicit source and owner. Free-form text alone is not canonical proof.

RuleBreakJustificationEvidence {
  justificationEvidenceRef,

  candidateRef,

  evidenceKind:
    HUMAN_RATIONALE_REF
    STYLE_RATIONALE_REF
    SEMANTIC_POLICY_REF
    EXTERNAL_POLICY_REF
    INTENT_SOURCE_REF,

  evidenceSourceRef,
  evidenceSourceOwnerRef,

  evidenceRefs[],
  claimCode,
  semanticIntentRefs[],

  confidence,
  provenance,
  status,

  mutationAllowed: false
}
Candidate-specific

Evidence must reference the exact candidateRef when the policy requires candidate-specific rationale.

Not evidence by itself

“Looks dynamic”, remaining budget, protection PASS, small magnitude, high confidence, or a free-text note without an owner-qualified source.

Requirements are explicit, not universal

07 / requirement policy

12.03 does not invent a global formula for “enough justification”. A policy declares exactly which evidence structure is required.

RuleBreakJustificationRequirementPolicy {
  justificationPolicyRef,

  policySourceRef,
  policySourceOwnerRef,

  appliesToIntentModes[],

  requiredAllOfKinds[],

  requiredAnyOfGroups[][],

  minDistinctEvidenceOwners,
  minEvidenceItems,

  requireCandidateSpecificEvidence: true,

  provenance,
  status,

  mutationAllowed: false
}
EXAMPLE STRUCTURE: requiredAllOfKinds: [INTENT_SOURCE_REF] requiredAnyOfGroups: [ [HUMAN_RATIONALE_REF, STYLE_RATIONALE_REF], [SEMANTIC_POLICY_REF, EXTERNAL_POLICY_REF] ] Means: INTENT_SOURCE_REF must exist AND one kind from group 1 AND one kind from group 2 Counts: structural sufficiency only != score

Categorical justification evaluation

08 / no scalar

Evidence is validated against one explicit policy. The result says whether the declared structural requirements are satisfied — not whether the composition is good.

Status / decisionMeaning
OK / SUFFICIENTAll explicit structural evidence clauses are satisfied.
OK / INSUFFICIENTPolicy applies, but required kind/group/owner/item clause is missing.
N_ANo explicit applicable policy or no candidate-specific evidence is available.
INVALIDMalformed policy/evidence, wrong candidate lineage, identity collision or contradictory source contract.
SUFFICIENT != final acceptance Even with sufficient justification: protected relation REJECT → cannot be rescued here Even with sufficient justification: budget REJECT → cannot be rescued here 12.04 owns final Topic12 integration.

CandidateEvidenceBundle is only a container

09 / downstream binding

A materialized candidate may accumulate refs to 12.01, 12.02 and 12.03 outputs. 12.03 stores their compatibility without combining them into final acceptance.

RuleBreakCandidateEvidenceBundle {
  candidateEvidenceBundleRef,

  candidateRef,

  deviationMeasurementRef?,

  protectionGateEvaluationRef?,
  protectionGateDecision?,

  budgetBundleEvaluationRef?,
  budgetBundleDecision?,

  justificationEvaluationRef?,
  justificationDecision?,

  evidenceRefs[],

  status,
  mutationAllowed: false
}
No final decision field.

The bundle must not contain accepted, finalScore, overrideScore or beautyScore. Those belong to 12.04 or are forbidden.

Identity is lineage-sensitive

10 / deterministic refs

Set-like evidence lists are canonicalized; candidate state and explicit policy parameters are identity-bearing.

variantEvidenceRef = hash( variant owner/ref/module/snapshot, materialization state + candidateStateRef?, target + intent + canonical subjects, canvas/frame/unit, diversityBucketKey, canonical evidence refs ) candidateGenerationProfileRef = hash( profile source/owner, canonical allowedIntentModes, maxCandidates, seed, diversity mode, inclusion flags, canonical owner allowlist ) candidateRef = hash( profileRef, variantEvidenceRef, targetEvidenceRef, intentRef, materialization state, candidateStateRef? ) justificationEvidenceRef = hash( candidateRef, kind, source + owner, claimCode, canonical evidence refs, canonical semantic refs )

Rationale cannot become a loophole

11 / firewalls

12.03 is intentionally conservative: explicit intent and explicit rationale still do not authorize breaking hard constraints.

Forbidden shortcuts

REQUEST_BREAK → priority; ordinal → rank; more evidence → score; budget left → rationale; protection PASS → rationale; free text → proof.

Preserved invariants

candidate != placement; descriptor != score; N_A != 0; correction request != foreign mutation; module order != priority; IDEA != CANON; EXPERIMENT != CANON.

Each Topic12 stage keeps its owner

12 / integration

12.03 can bind refs but cannot recompute upstream contracts.

Owner12.03 rule
12.00Consumes target/intent/resolution. Does not infer intent from candidate existence.
12.01Consumes deviation measurement refs for materialized candidates only. Does not recompute magnitude.
12.02Consumes protection/budget refs/results. Does not recompute gate or ledger.
8/9/10 / candidate ownerOwn actual proposal geometry and materialized state.
12.03Owns bounded packaging + justification evidence/evaluation.
12.04Owns final integration/scoring/tests.

Bad evidence → owner-qualified correction request

13 / repair

12.03 never edits variant geometry, source policy, intent, budget or semantic evidence.

RuleBreakCandidateCorrectionRequest {
  requestRef,
  targetOwnerRef,

  reasonCode,
  evidenceRefs[],
  suggestedAction,

  status,
  mutationAllowed: false
}

CANON → LAB → DATA → IDEAS

14 / cross-cutting hooks

Whether a rationale is perceptually convincing is empirical. Canon only records explicit evidence structure and leaves semantic interpretation to its owner.

IDEAS_REFS[]7 project-level R&D refs retained.
DATA_CAPTURE[]variants, candidates, evidence clauses and downstream refs.
DEFERRED_SEMANTIC_INPUTS[]semantic meaning of claim codes stays opaque.
HUMAN_FEEDBACK_HOOKS[]candidate diversity + justification correction reasons.
CONFLICT_PRIORITY_ASSUMPTIONS[]request/evidence/order never becomes hidden priority.
LAB_HOOKS[]intentional-vs-accidental perception studies.

Store reasons, not only verdicts

15 / human feedback

These reason codes support later calibration without auto-mutating canon.

ReasonMeaning
CANDIDATE_VARIANT_WRONGForeign proposal/state itself is wrong.
CANDIDATE_SET_TOO_NARROWExplicit variant set failed to cover useful alternatives.
CANDIDATE_SET_TOO_BROADCandidate pool is operationally excessive.
CANDIDATE_DIVERSITY_WRONGBucket policy does not preserve useful diversity.
JUSTIFICATION_EVIDENCE_WRONGEvidence source/claim is incorrect.
JUSTIFICATION_POLICY_TOO_STRICTExplicit structural requirements reject useful rationale.
JUSTIFICATION_POLICY_TOO_WEAKExplicit structural requirements accept weak rationale.
RATIONALE_NOT_CANDIDATE_SPECIFICGeneric rationale does not support this exact candidate.
BREAK_READS_ACCIDENTALCandidate reads as error despite explicit intent.
BREAK_READS_INTENTIONAL_BUT_UNJUSTIFIEDIntent is legible, but rationale is not convincing.
TENSION_READS_AS_ERRORControlled tension fails perceptually.

Visual laboratory hook

16 / candidates + evidence

Three candidates can be equally valid descriptors while carrying different explicit rationale evidence. No visual order below implies ranking.

EXPLICIT VARIANT POOL → BOUNDED CANDIDATES bucket A · candidate 0 bucket B · candidate 1 bucket C · candidate 2 JUSTIFICATION = OWNER-QUALIFIED EVIDENCE CLAUSES INTENT_SOURCE_REF+ HUMAN_RATIONALE_REF STYLE_RATIONALE_REF+ SEMANTIC_POLICY_REF EXTERNAL_POLICY_REFcandidate-specific ordinal ≠ rank · evidence count ≠ score · sufficient justification ≠ final acceptance

12.03 regression suite

17 / deterministic tests

Tests cover variant lineage, profile gating, materialization filters, bounded seeded diversity, collision handling, candidate identity, justification evidence/policies, categorical sufficiency, bundle consistency, no-mutation and Topic12 firewalls.

Tests not run yet.

DATA FOR LAYOUT ENGINE

18 / machine contract

Machine-readable 12.03 canonical contract.

{
  "module": "Compo 12.03",
  "name": "rule_break_candidates_and_justification",
  "version": "1.0-canonical",
  "canonical_main_title": "Rule-break candidates and justification",
  "topic": "12_НАРУШЕНИЕ_СЕТКИ_И_КОНТРОЛИРУЕМОЕ_НАПРЯЖЕНИЕ",
  "scope": "BOUNDED_RULE_BREAK_CANDIDATE_PACKAGING_AND_EXPLICIT_JUSTIFICATION_EVIDENCE_ONLY",
  "main_topic_contract": {
    "topic_title": "Нарушение сетки и контролируемое напряжение",
    "topic_goal": "formalize intentional breaking of grid and alignment: deviation magnitude, protected relations, exception budget and justification so controlled tension is distinguishable from error",
    "expected_output": "RuleBreakIntent, deviation metrics, exception budget, evidence",
    "planned_files": [
      "12.00 Grid-break taxonomy and intent",
      "12.01 Deviation magnitude",
      "12.02 Protected relations and exception budgets",
      "12.03 Rule-break candidates and justification",
      "12.04 Override scoring and tests"
    ]
  },
  "ownership": {
    "owner": "Compo12.03",
    "owns": [
      "RuleBreakCandidateVariantEvidence adapter schema",
      "RuleBreakCandidateGenerationProfile",
      "RuleBreakCandidate",
      "bounded deterministic candidate generation from explicit owner-qualified variants",
      "candidate deduplication and seeded diversity pruning",
      "RuleBreakJustificationEvidence",
      "RuleBreakJustificationRequirementPolicy",
      "RuleBreakJustificationEvaluation",
      "RuleBreakCandidateEvidenceBundle",
      "RuleBreakCandidateCorrectionRequest",
      "serializable candidate/justification observation record"
    ],
    "does_not_own": [
      "RuleBreakIntent taxonomy/source/target evidence — Compo12.00",
      "deviation measurement or magnitude — Compo12.01",
      "protected relation policy/gate or exception budget accounting — Compo12.02",
      "upstream grid/alignment candidate geometry or materialization — Topics8/9/10 or explicit candidate owner",
      "semantic interpretation of opaque semantic refs",
      "override scoring or final Topic12 accept/reject synthesis — Compo12.04",
      "global conflict priority",
      "foreign mutation"
    ]
  },
  "consumes": [
    "valid Compo12.00 RuleBreakTargetEvidence",
    "valid Compo12.00 RuleBreakIntent",
    "Compo12.00 RuleBreakIntentResolution with status OK and controlledTensionEligible=true",
    "explicit owner-qualified RuleBreakCandidateVariantEvidence[]",
    "optional Compo12.01 RuleBreakDeviationMeasurement refs for materialized candidates",
    "optional Compo12.02 protection gate refs/results for materialized candidates",
    "optional Compo12.02 budget evaluation/bundle refs/results for materialized candidates",
    "explicit RuleBreakJustificationEvidence[]",
    "explicit RuleBreakJustificationRequirementPolicy",
    "optional opaque semanticIntentRefs[]",
    "optional human feedback reason codes"
  ],
  "provides": [
    "RuleBreakCandidateVariantEvidence",
    "RuleBreakCandidateGenerationProfile",
    "RuleBreakCandidate[]",
    "RuleBreakJustificationEvidence",
    "RuleBreakJustificationRequirementPolicy",
    "RuleBreakJustificationEvaluation",
    "RuleBreakCandidateEvidenceBundle",
    "RuleBreakCandidateCorrectionRequest",
    "Topic12.03 observation record"
  ],
  "owns_metrics": [],
  "metric_ownership_note": "12.03 owns no MetricResult score and no independent numeric vote. Candidate count, evidence count and justification clause count are structural descriptors only.",
  "candidate_variant_schema": {
    "variantEvidenceRef": "stable 12.03 adapter identity",
    "variantRef": "exact owner-qualified candidate variant/proposal identity",
    "variantOwnerRef": "owner of candidate geometry/proposal",
    "variantModuleRef": "exact upstream candidate-producing module/service",
    "variantSnapshotRef": "exact proposal/materialized snapshot identity",
    "materializationState": "PROPOSAL_ONLY|MATERIALIZED",
    "candidateStateRef": "required iff MATERIALIZED; owner-qualified immutable state/snapshot ref",
    "targetEvidenceRef": "exact 12.00 target ref",
    "intentRef": "exact 12.00 intent ref",
    "targetFamily": "must match target evidence",
    "subjectRefs": "must equal canonical intent subject set",
    "canvasRef": "must match target evidence",
    "coordinateFrame": "must match target evidence",
    "sourceUnit": "must match target evidence",
    "diversityBucketKey": "explicit non-empty bucket label supplied by source/profile; bucket identity carries no preference",
    "evidenceRefs": "one or more owner-qualified lineage refs",
    "confidence": "0..1 evidence quality only",
    "provenance": "canonical provenance class",
    "status": "OK|N_A|INVALID",
    "mutationAllowed": false
  },
  "generation_profile_schema": {
    "candidateGenerationProfileRef": "stable identity",
    "profileSourceRef": "explicit profile source",
    "profileSourceOwnerRef": "owner of generation policy",
    "allowedIntentModes": "explicit non-empty subset of ALLOW_EXCEPTION|EXPLORE_BREAK|REQUEST_BREAK",
    "maxCandidates": "integer 1..64; 64 is implementation safety cap, not composition law",
    "seed": "explicit deterministic integer",
    "diversityMode": "SEEDED_ROUND_ROBIN_BUCKETS",
    "includeProposalOnly": "boolean",
    "includeMaterialized": "boolean",
    "requiredVariantOwnerRefs": "optional explicit allowlist; empty means no owner restriction beyond valid explicit ownership",
    "status": "OK|INVALID",
    "provenance": "canonical provenance class",
    "mutationAllowed": false
  },
  "candidate_generation_policy": {
    "preconditions": [
      "valid target",
      "valid intent",
      "resolution status OK and controlledTensionEligible=true",
      "intentMode explicitly included in profile.allowedIntentModes",
      "valid generation profile",
      "one or more valid explicit owner-qualified variants"
    ],
    "dedupe": "by variantEvidenceRef and candidateStateRef where present; identity collisions with inconsistent content are INVALID",
    "ordering": "canonical source ordering first; seeded deterministic bucket rotation second",
    "diversity_pruning": "seeded round-robin over explicit diversityBucketKey values",
    "bounded": "take at most maxCandidates after validation/dedupe",
    "complexity": "O(n log n) due to canonical sorting; no Cartesian product",
    "no_geometry_invention": "12.03 never synthesizes grid/alignment coordinates or silently selects nearest rules/features",
    "no_materialization": "12.03 does not move subjects or mutate layout; materialization belongs to explicit variant owner",
    "intent_mode_semantics": {
      "ALLOW_EXCEPTION": "candidate generation occurs only when the explicit profile includes ALLOW_EXCEPTION; allowance itself never triggers generation",
      "EXPLORE_BREAK": "may generate when explicitly included",
      "REQUEST_BREAK": "may generate when explicitly included; request does not gain priority or bypass downstream hard gates"
    }
  },
  "candidate_schema": {
    "candidateRef": "stable 12.03 identity",
    "candidateGenerationProfileRef": "exact profile ref",
    "variantEvidenceRef": "exact variant evidence ref",
    "variantRef": "owner-qualified variant ref",
    "variantOwnerRef": "owner of geometry/proposal",
    "materializationState": "PROPOSAL_ONLY|MATERIALIZED",
    "candidateStateRef": "required iff materialized",
    "targetEvidenceRef": "exact 12.00 target ref",
    "intentRef": "exact 12.00 intent ref",
    "intentMode": "copied from 12.00 intent",
    "targetFamily": "copied from target",
    "subjectRefs": "canonical exact intent subject set",
    "diversityBucketKey": "copied for auditability",
    "seed": "copied profile seed",
    "ordinal": "deterministic output ordinal; not preference/rank",
    "confidence": "minimum source/target/intent evidence confidence; not quality",
    "status": "OK",
    "provenance": "DERIVED",
    "derivedFrom": "explicit refs",
    "mutationAllowed": false
  },
  "justification_evidence_schema": {
    "justificationEvidenceRef": "stable identity",
    "candidateRef": "exact 12.03 candidate ref",
    "evidenceKind": "HUMAN_RATIONALE_REF|STYLE_RATIONALE_REF|SEMANTIC_POLICY_REF|EXTERNAL_POLICY_REF|INTENT_SOURCE_REF",
    "evidenceSourceRef": "explicit source identity",
    "evidenceSourceOwnerRef": "explicit source owner",
    "evidenceRefs": "one or more owner-qualified refs",
    "claimCode": "explicit symbolic claim code; free text alone is not proof",
    "semanticIntentRefs": "optional opaque refs; not interpreted by 12.03",
    "confidence": "0..1 evidence quality only",
    "provenance": "canonical provenance class",
    "status": "OK|N_A|INVALID",
    "mutationAllowed": false
  },
  "justification_requirement_policy_schema": {
    "justificationPolicyRef": "stable identity",
    "policySourceRef": "explicit requirement-policy source",
    "policySourceOwnerRef": "owner of requirement policy",
    "appliesToIntentModes": "non-empty explicit subset of intent modes",
    "requiredAllOfKinds": "distinct evidence kinds that must all be present",
    "requiredAnyOfGroups": "array of non-empty distinct evidence-kind sets; every group requires at least one represented kind",
    "minDistinctEvidenceOwners": "integer >=1",
    "minEvidenceItems": "integer >=1",
    "requireCandidateSpecificEvidence": true,
    "status": "OK|INVALID",
    "provenance": "canonical provenance class",
    "mutationAllowed": false,
    "default": "NONE — no universal rationale threshold is silently invented"
  },
  "justification_evaluation_policy": {
    "SUFFICIENT": "policy applies, candidate-specific valid evidence satisfies all explicit structural clauses",
    "INSUFFICIENT": "policy applies but one or more explicit evidence clauses are unsatisfied",
    "N_A": "no explicit applicable justification policy or no candidate-specific evidence available",
    "INVALID": "malformed/conflicting policy or evidence lineage",
    "no_scalar": "No universal justificationScore is produced in 12.03.",
    "not_compliance": [
      "protection PASS is not justification",
      "remaining budget is not justification",
      "small deviation is not justification",
      "REQUEST_BREAK is not sufficient justification by itself unless explicit policy accepts its source as evidence"
    ]
  },
  "candidate_evidence_bundle_schema": {
    "candidateEvidenceBundleRef": "stable identity",
    "candidateRef": "exact candidate ref",
    "deviationMeasurementRef": "optional 12.01 ref; required only when supplied downstream",
    "protectionGateEvaluationRef": "optional 12.02 ref",
    "protectionGateDecision": "optional PASS|REJECT",
    "budgetBundleEvaluationRef": "optional 12.02 ref",
    "budgetBundleDecision": "optional PASS|REJECT",
    "justificationEvaluationRef": "optional 12.03 ref",
    "justificationDecision": "optional SUFFICIENT|INSUFFICIENT",
    "evidenceRefs": "canonical lineage refs",
    "status": "OK|N_A|INVALID",
    "mutationAllowed": false,
    "firewall": "Bundle is an evidence container only. 12.03 does not synthesize final candidate acceptance; 12.04 owns that."
  },
  "identity_policy": {
    "variantEvidenceRef": "hash(owner-qualified variant identity/snapshot/materialization, target+intent scope, canonical subjects, geometry context, diversity bucket, evidence refs)",
    "candidateGenerationProfileRef": "hash(profile source/owner, allowed intent modes, maxCandidates, seed, diversity mode, materialization inclusion flags, owner allowlist)",
    "candidateRef": "hash(profileRef, variantEvidenceRef, targetEvidenceRef, intentRef, materialization/candidateStateRef)",
    "justificationEvidenceRef": "hash(candidateRef, kind, source/owner, claimCode, canonical evidence refs, canonical semanticIntentRefs)",
    "justificationPolicyRef": "hash(policy source/owner, intent modes, canonical all-of kinds, canonical any-of groups, minimum owner/item counts, candidate-specific flag)",
    "justificationEvaluationRef": "hash(candidateRef, policyRef, canonical evidence refs, decision and missing-clause descriptors)",
    "candidateEvidenceBundleRef": "hash(candidateRef and supplied downstream evaluation refs/decisions)",
    "set_semantics": "set-like arrays canonicalized lexically; any-of groups canonicalized internally and as a set",
    "excluded_from_identity": [
      "display label",
      "display color",
      "free-form human comment",
      "confidence"
    ]
  },
  "status_policy": {
    "candidate_generation": "OK with 0..maxCandidates only when generation preconditions are valid; N_A when explicit intent/profile does not authorize generation or no applicable variants exist; INVALID on malformed/colliding evidence",
    "justification_evaluation": "OK+SUFFICIENT | OK+INSUFFICIENT | N_A | INVALID",
    "bundle": "OK when supplied refs are structurally consistent; N_A when only candidate exists and no downstream evidence is supplied; INVALID on contradiction",
    "N_A_not_zero": true
  },
  "critical_firewalls": [
    "candidate != placement",
    "candidate != final accepted layout",
    "candidate ordinal != rank",
    "candidate count != score",
    "diversity bucket != preference",
    "REQUEST_BREAK != priority",
    "ALLOW_EXCEPTION != generate automatically",
    "EXPLORE_BREAK != accept",
    "candidate generation cannot bypass hard protection",
    "candidate generation cannot reserve/spend budget",
    "candidate generation cannot invent authorization",
    "materialized candidate state remains owned by its explicit variant owner",
    "12.03 does not recompute 12.01 deviation",
    "12.03 does not recompute 12.02 protection impact or budget",
    "free-form text != justification proof",
    "evidence confidence != justification strength",
    "evidence count != score",
    "protection PASS != justification",
    "unused budget != justification",
    "small deviation != justification",
    "justification sufficient != final acceptance",
    "justification insufficient != numeric zero",
    "N_A != 0",
    "module execution order != rule priority",
    "correction request != foreign mutation",
    "no universal beautyScore",
    "IDEA != CANON",
    "EXPERIMENT != CANON"
  ],
  "deferred_downstream": {
    "12.04": [
      "final integration of intent + deviation + protection + budget + justification",
      "override/local controlled-break scoring policy",
      "hard rejection precedence",
      "Topic12 independent vote if canonically justified",
      "consolidated Topic12 tests"
    ]
  },
  "correction_request_schema": {
    "requestRef": "stable request identity",
    "targetOwnerRef": "owner whose variant/justification/policy evidence must be reviewed",
    "reasonCode": "explicit",
    "evidenceRefs": "canonicalized refs",
    "suggestedAction": "non-mutating suggestion",
    "status": "OPEN|INVALID",
    "mutationAllowed": false
  },
  "IDEAS_REFS": [
    "IDEA-01 full human test after all 72 topics; collect when rule-break candidates read as intentional vs accidental",
    "IDEA-02 semantics required before placement; semanticIntentRefs remain opaque/deferred",
    "IDEA-03 explicit rule priorities; REQUEST_BREAK and candidate order must never become hidden priority",
    "IDEA-04 collect structured data for future composition model",
    "IDEA-05 preserve reasons for human corrections",
    "IDEA-06 structured machine-readable layer",
    "IDEA-07 graphics-for-post-text research remains downstream/separate"
  ],
  "DATA_CAPTURE": [
    "sceneRef",
    "candidateGenerationProfileRef",
    "seed",
    "variantEvidenceRefs[]",
    "candidateRefs[]",
    "candidateStateRefs[]",
    "diversityBucketKeys[]",
    "justificationPolicyRef",
    "justificationEvidenceRefs[]",
    "justificationDecision",
    "missingAllOfKinds[]",
    "missingAnyOfGroups[]",
    "distinctEvidenceOwnerCount",
    "evidenceItemCount",
    "deviationMeasurementRef",
    "protectionGateEvaluationRef",
    "protectionGateDecision",
    "budgetBundleEvaluationRef",
    "budgetBundleDecision",
    "humanReasonCodes[]",
    "future overrideEvaluationRef"
  ],
  "DEFERRED_SEMANTIC_INPUTS": [
    "semanticIntentRefs[]",
    "semantic meaning of claimCode",
    "hierarchy/meaning rationale interpretation",
    "brand/editorial rationale interpretation",
    "future conflict-priority policy refs"
  ],
  "HUMAN_FEEDBACK_HOOKS": [
    "CANDIDATE_VARIANT_WRONG",
    "CANDIDATE_SET_TOO_NARROW",
    "CANDIDATE_SET_TOO_BROAD",
    "CANDIDATE_DIVERSITY_WRONG",
    "JUSTIFICATION_EVIDENCE_WRONG",
    "JUSTIFICATION_POLICY_TOO_STRICT",
    "JUSTIFICATION_POLICY_TOO_WEAK",
    "RATIONALE_NOT_CANDIDATE_SPECIFIC",
    "BREAK_READS_ACCIDENTAL",
    "BREAK_READS_INTENTIONAL_BUT_UNJUSTIFIED",
    "TENSION_READS_AS_ERROR"
  ],
  "CONFLICT_PRIORITY_ASSUMPTIONS": [
    "module execution order is not priority",
    "candidate ordinal/list order is non-semantic",
    "REQUEST_BREAK does not outrank hard protection or budget",
    "justification sufficiency does not override protection or budget",
    "multiple evidence kinds do not create implicit priority",
    "future reviewed global conflict-priority owner remains authoritative"
  ],
  "LAB_HOOKS": [
    "human A/B: same deviation with different explicit rationale evidence",
    "human A/B: same rationale with different candidate diversity sets",
    "measure accidental-vs-intentional reading without auto-writing thresholds into canon",
    "test whether candidate-specific rationale outperforms generic rationale",
    "collect reason codes for overly broad/narrow candidate sets",
    "compare explicit style-policy rationale vs human-directive rationale as empirical data only"
  ],
  "observation_record": {
    "moduleRef": "Compo12.03",
    "metricResults": [],
    "overrideEvaluationRefs": []
  },
  "stop_condition": "STOP after 12.03. Do not create 12.04 in this module."
}
VISITS / ...