diff --git a/scripts/shadow/hyperlexical/eval_settlement.py b/scripts/shadow/hyperlexical/eval_settlement.py index c0c3dcbe..718ff769 100644 --- a/scripts/shadow/hyperlexical/eval_settlement.py +++ b/scripts/shadow/hyperlexical/eval_settlement.py @@ -1,4 +1,4 @@ -"""Evaluation-settlement apply path for the eighteen-family taxonomy. +"""Evaluation-settlement apply path for the evaluation taxonomy. ``source_hint``, ``semantic_family``, and ``attest`` are separate fields. A confirm settlement may store the same family string in both ``source_hint`` @@ -43,6 +43,7 @@ "spiritual-mystic", "identity-affiliation", "politics-civic", + "ai-native", ) CANDIDATE_FAMILIES: tuple[str, ...] = ( "finance-retail", diff --git a/specs/007-hyperlexical-model/label-taxonomy-proposal.md b/specs/007-hyperlexical-model/label-taxonomy-proposal.md index 1f656616..a7d53c27 100644 --- a/specs/007-hyperlexical-model/label-taxonomy-proposal.md +++ b/specs/007-hyperlexical-model/label-taxonomy-proposal.md @@ -359,3 +359,10 @@ The apply command is `python -m hyperlexical.identity_ledger settlement-apply`. Stream `hs-20260925T211358Z` was settled through `identity_ledger settlement-apply`, not `attest-apply`. Every row has an explicit decision. Blank is 0. `UNRESOLVED` is 84. Settled is 255 (`ACCEPT` 204, `RECLASSIFY` 32, `NONE` 19). `OBSERVED` 128 and `INFERRED` 127 are separate from the decision. `source_hint` was not copied into `semantic_family`. The eighteen families were not expanded. One economics row was left `UNRESOLVED` because the fitting region is the inactive candidate `finance-retail`. `brainrot-aura` was not added. `evaluation.enabled` stays false. Rights-blocked rows can carry a semantic decision and still cannot enter `EVAL_RESERVE`. Vendor calls: 0. SELECT-003 was not drafted. Do not train. + + +## ai-native activated — 2026-09-27 + +The operator authorized `ai-native` as its own evaluation family. It is `taxonomy.active`. `evaluation.enabled` stays false. `production.enabled` stays false. `layout.FAMILIES` is unchanged and still has nine names, including the existing `ai-native` slot. This activation does not settle a row, does not append a ledger, and does not enable evaluation. + +A hint of `ai-native` may still be settled as `technology-ai` when the operator writes that family. Writing `semantic_family=ai-native` is now a valid explicit choice. The stored registry class is not promoted to `OBSERVED`. diff --git a/tests/shadow/test_hyperlexical_eval_settlement.py b/tests/shadow/test_hyperlexical_eval_settlement.py index d4f70eb4..603bf577 100644 --- a/tests/shadow/test_hyperlexical_eval_settlement.py +++ b/tests/shadow/test_hyperlexical_eval_settlement.py @@ -380,8 +380,38 @@ def test_blank_sheet_settles_nothing_and_does_not_fill_decisions(tmp_path): assert sheet.read_bytes() == before +def test_ai_native_is_taxonomy_active_and_the_head_stays_nine(): + assert "ai-native" in ACTIVE_FAMILIES + assert family_flags("ai-native") == { + "taxonomy.active": True, + "evaluation.enabled": False, + "production.enabled": False, + } + assert len(PRODUCTION_FAMILIES) == 9 + assert "ai-native" in PRODUCTION_FAMILIES + stream = _stream( + "phrase native", + hint="ai-native", + label=None, + label_source="UNLABELLED", + ) + record = _apply( + stream, + _decision( + stream, + semantic_family="ai-native", + proposed_family="ai-native", + lane="B", + decision="ACCEPT FAMILY", + ), + )["records"][0] + assert record["semantic_family"] == "ai-native" + assert record["source_hint"] == "ai-native" + assert record["attest"] == "INFERRED" + + def test_three_taxonomy_flags_stay_distinct(): - assert len(ACTIVE_FAMILIES) == 18 + assert len(ACTIVE_FAMILIES) == 19 for name in ACTIVE_FAMILIES: assert family_flags(name) == { "taxonomy.active": True,