# Ticket #000024 — 5T Phase 1b: vocabulary alignment + carrier-aware completion

**Status:** closed · landed 2026-05-08
**Opened:** 2026-05-07
**Revised:** 2026-05-08 (cross-modality correction folded in per
review response)
**Closed:** 2026-05-08
**Scope:** Two coupled jobs:
1. Align 5T vocabulary with Dav1DPrometheus's authoritative
   formulation (Transfer → Transfer Learning, Truth → Truthtables,
   Timing → Time).
2. Replace the four 5T zero-task stubs (Triangulation, Truthtables,
   Transitivity, Time) with carrier-aware Phase-1b runners.
**Audience:** fox + future bench authors + downstream v8 / v7-W /
multimodal work needing fitness targets across 5T axes.
**Hard constraint:** Phase 1a `transfer-v1.jsonl` digest stays
pinned; new work uses `v2` fixture filenames and renamed sub-battery
identifiers. No schema bump, no governance hash bump, no
canonicalization-version bump. Unsupported non-text carriers MUST
fail or skip explicitly. No LLM-as-judge in any 5T runner.

**Source:** Dav1DPrometheus (BasementAGI host) — *"5Ts: Transitivity,
Transfer Learning, Triangulation, Truthtables, Time."*

---

## 1. Corrected purpose

**Vocabulary correction is not cosmetic.** Each rename pins a more
operationally precise concept:

| arborist Phase 1a | Dav1DPrometheus | Why his is right |
|---|---|---|
| `transfer` | `transfer-learning` | "Transfer" alone is ambiguous; pins the concrete ML primitive (cross-task / cross-domain method preservation). |
| `truth` | `truthtables` | "Truth" is philosophical; "Truthtables" names the explicit logical-state coverage primitive. |
| `timing` | `time` | "Timing" implies wall-clock; "Time" implies temporal-context maintenance, lineage, memory, stale-state handling. |

The architectural correction (folded in 2026-05-08):

> **5T must not be permanently language-only or prose-only.
> Transitivity, Transfer Learning, Triangulation, Truthtables, and
> Time must eventually operate across text, code, tables, images,
> audio, sensor streams, spatial state, world-model state, and
> hidden or alternate media carriers.**

Phase 1b implements **text / claim-lattice / memory-root** carriers
only. The fixture schema is carrier-aware so future phases can
attach code / image / audio / sensor / world canonicalizers via
the π* registry without re-authoring fixtures.

---

## 2. Carrier-aware 5T definitions

| Sub-battery | Definition (carrier-general) | Phase 1b carrier |
|---|---|---|
| **Transfer Learning** | Whether a learned structure or method transfers across a task, domain, or carrier. Future: text rule → table task; diagram relation → textual derivation; world-state pattern → claim-lattice conclusion. | text / claim_lattice |
| **Triangulation** | Independent evidence, verifier, or modality paths converging on the same claim state. Future: text + table + chart agreement; image/OCR + caption + metadata; sensor + event log + textual report. | claim_lattice (existing four verifier strategies) |
| **Transitivity** | Relation chains preserving valid inference across steps. Future: spatial + visual relations; code dependency + package metadata; sensor temporal-ordering. | claim_lattice (typed relation graph) |
| **Truthtables** | Exhaustive logical-state coverage. Future: visual state toggles; world-state propositions; sensor Boolean predicates; tool precondition matrices. | propositional_logic (N=2..4 variables) |
| **Time** | Temporal-context maintenance, lineage, memory, stale-state handling. Future: video frames; sensor streams; world-state transitions; tool/action DAG timelines. | memory_snapshot / selfmodel_snapshot |

Time is the **first sub-battery where v8 substrate components**
(SelfModel #000014 + memory_root #000017) become measurable bench
targets. That is structurally significant: until #000024, those
substrates were audit-chain artifacts only; now they have a
fitness signal.

---

## 3. Fixture schema (carrier-aware)

```json
{
  "id": "5t-<sub>-NNN",
  "battery": "5t",
  "sub_battery": "time",
  "version": "v1",

  "carrier": "memory_snapshot",
  "domain": "memory_root",
  "pi_star_ref": "pi_memory_v1",
  "loss_report_refs": [],
  "modality_notes": "Phase 1b: text/claim-lattice/memory-root only; future carriers may include code/table/image/audio/sensor/world.",

  "task": { ... }
}
```

Phase 1b allowed carriers: `text`, `claim_lattice`,
`memory_snapshot`, `selfmodel_snapshot`, `verifier_strategies`,
`propositional_logic`, `relation_graph`. Other values →
`reason="unsupported_carrier"`.

---

## 4. Per-sub-battery design

### 4.1 Transfer Learning (rename of Phase 1a `transfer`)

**Metric:** `transfer_learning_success_rate`.

**Backward compat:** Keep `transfer-v1.jsonl`, `run_transfer`,
`bench-5t-transfer` in place — Phase 1a digest stays pinned. Add
`transfer-learning-v2.jsonl`, `run_transfer_learning`,
`bench-5t-transfer-learning` for new work.

**Fixture shape:**

```json
{
  "id": "5t-transfer-learning-001",
  "version": "v2",
  "carrier": "text",
  "domain": "claim_lattice",
  "pi_star_ref": "claim-lattice@v1",
  "source_task": {
    "pattern": "A supports B when cited span contains anchor B.",
    "example": "Release-date claim with date anchor."
  },
  "target_task": {
    "pattern": "Founder-date claim with date anchor.",
    "expected_transfer": true
  },
  "expected": "pass"
}
```

### 4.2 Triangulation

**Metric:** `triangulation_agreement_rate`,
`strategy_disagreement_rate`.

**Fixture shape:**

```json
{
  "id": "5t-triangulation-001",
  "carrier": "claim_lattice",
  "domain": "verifier_strategies",
  "pi_star_ref": "claim-lattice@v1",
  "claim": "Back to the Future was released on July 3, 1985.",
  "evidence": ["E1", "E2"],
  "strategies": ["quote", "span", "entity", "paraphrase"],
  "expected_agreement_min": 0.75
}
```

**Runner:** invokes arborist's existing four verifier strategies
on (claim, evidence) pairs, computes pairwise agreement, passes
when agreement ≥ `expected_agreement_min`.

**Future-modality hook:**

```json
{
  "future_modality_paths": [
    {"carrier": "table", "role": "structured evidence"},
    {"carrier": "image", "role": "visual confirmation"}
  ]
}
```

v1 runner ignores; fixture is forward-compatible.

### 4.3 Transitivity

**Metric:** `full_chain_pass_rate`.

**Critical correction:** not all relations are transitive. Phase
1b ships a typed-relation-whitelist:

```
implies
subset_of
ancestor_of
before
less_than
```

Runners reject mixed-relation chains and non-transitive relations
(`related_to`, `causes` without domain constraints, etc.).

**Positive fixture:**

```json
{
  "id": "5t-transitivity-001",
  "carrier": "claim_lattice",
  "domain": "relation_graph",
  "pi_star_ref": "pi_relation_graph_v1",
  "edges": [
    {"from": "A", "to": "B", "relation": "implies"},
    {"from": "B", "to": "C", "relation": "implies"}
  ],
  "query": {"from": "A", "to": "C", "relation": "implies"},
  "expected": "pass"
}
```

**Negative fixture:**

```json
{
  "id": "5t-transitivity-NEG-001",
  "edges": [
    {"from": "A", "to": "B", "relation": "related_to"},
    {"from": "B", "to": "C", "relation": "causes"}
  ],
  "query": {"from": "A", "to": "C", "relation": "causes"},
  "expected": "fail",
  "reason": "mixed relation types do not license transitive closure"
}
```

### 4.4 Truthtables

**Metric:** `truth_table_coverage_rate`, `row_accuracy_rate`.

**Constraint:** N=2..4 variables only (avoids combinatorial
blowup; keeps logical coverage real).

**Fixture shape:**

```json
{
  "id": "5t-truthtables-001",
  "carrier": "claim_lattice",
  "domain": "propositional_logic",
  "pi_star_ref": "pi_truth_table_v1",
  "variables": ["A", "B"],
  "expression": "A AND B",
  "rows": [
    {"inputs": {"A": false, "B": false}, "expected": false},
    {"inputs": {"A": false, "B": true},  "expected": false},
    {"inputs": {"A": true,  "B": false}, "expected": false},
    {"inputs": {"A": true,  "B": true},  "expected": true}
  ]
}
```

**Runner:** parse expression → enumerate rows → evaluate each
deterministically → fixture fails if any row mismatches.
Deterministic parser; no LLM.

### 4.5 Time

**Metric:** `temporal_context_preservation_rate`,
`stale_marking_rate`, `memory_lineage_pass_rate`.

**Fixture shape:**

```json
{
  "id": "5t-time-001",
  "carrier": "memory_snapshot",
  "domain": "memory_root",
  "pi_star_ref": "pi_memory_v1",
  "snapshots": [
    {"snapshot_id": "S0", "memory_root": "M0", "facts": ["X is true as of t0"]},
    {"snapshot_id": "S1", "memory_root": "M1", "facts": ["X is revised as of t1"]}
  ],
  "expected": {
    "preserves_prior": true,
    "marks_stale": ["X is true as of t0"],
    "current_root": "M1"
  },
  "policy_assumption": {
    "memory_root_binding": "advisory",
    "selfmodel_integration": true
  }
}
```

**Runner:** reads `memory_records` (and `selfmodel_records` where
needed) → compares snapshot N and N+1 → asserts temporal
preservation, stale marking, lineage continuity.

**Future-time-carriers (documented, not executed in v1):**

```json
{
  "future_time_carriers": [
    {"carrier": "video",  "domain": "frame_sequence"},
    {"carrier": "sensor", "domain": "time_series"},
    {"carrier": "world",  "domain": "state_transition_graph"}
  ]
}
```

---

## 5. Required file changes

### 5.1 Fixture files

```
bench/fixtures/5t/transfer-learning-v2.jsonl   # new ≥30 tasks
bench/fixtures/5t/triangulation-v1.jsonl       # new ≥30 tasks
bench/fixtures/5t/truthtables-v1.jsonl         # new ≥30 tasks (N=2..4)
bench/fixtures/5t/transitivity-v1.jsonl        # new ≥30 tasks (whitelist)
bench/fixtures/5t/time-v1.jsonl                # new ≥30 tasks (memory)

bench/fixtures/5t/transfer-v1.jsonl            # UNCHANGED (Phase 1a digest pinned)
```

### 5.2 Runner functions

In `bench/batteries/b_5t.py`:

- Keep `run_transfer` (Phase 1a) intact.
- Add `run_transfer_learning`, `run_triangulation`,
  `run_truthtables`, `run_transitivity`, `run_time` as non-stub
  implementations.

### 5.3 Make targets

```makefile
bench-5t-transfer-learning: bootstrap
	$(PY) -m bench.batteries.runner --battery 5t --sub transfer-learning \
	    --fixtures bench/fixtures/5t/transfer-learning-v2.jsonl

bench-5t-triangulation: bootstrap
	$(PY) -m bench.batteries.runner --battery 5t --sub triangulation \
	    --fixtures bench/fixtures/5t/triangulation-v1.jsonl

bench-5t-truthtables: bootstrap
	$(PY) -m bench.batteries.runner --battery 5t --sub truthtables \
	    --fixtures bench/fixtures/5t/truthtables-v1.jsonl

bench-5t-transitivity: bootstrap
	$(PY) -m bench.batteries.runner --battery 5t --sub transitivity \
	    --fixtures bench/fixtures/5t/transitivity-v1.jsonl

bench-5t-time: bootstrap
	$(PY) -m bench.batteries.runner --battery 5t --sub time \
	    --fixtures bench/fixtures/5t/time-v1.jsonl
```

`bench-5t` aggregate keeps `transfer` (v1) for backward
compatibility. New canonical aggregate is `bench-5t-v2` covering
the five Dav1DPrometheus sub-batteries; or operators wire
`bench-5t` to the v2 names once the rename has stabilized.

---

## 6. Tests

```
test_5t_transfer_learning_runs
test_5t_triangulation_runs
test_5t_truthtables_runs
test_5t_transitivity_runs
test_5t_time_runs
test_5t_v1_transfer_digest_unchanged           # guard regression
test_5t_fixture_accepts_carrier_metadata
test_5t_text_runner_rejects_unsupported_nontext_carrier_cleanly
test_5t_time_reads_memory_root_fixture
test_5t_transitivity_rejects_non_whitelisted_relation
test_5t_truthtables_N_le_4_only
```

Stable-digest tests for each new fixture file. Remove the four
implemented sub-batteries from any "stub returns zero"
parametrization.

---

## 7. Out of scope

- Multimodal 5T execution (depends on #000013 spatial-temporal
  substrate + π* image / audio / world canonicalizers).
- 5S Phase 1b (ticket #000023).
- 5F battery (ticket #000025).
- 5R battery — Phase 2 of #000021.
- Retiring v1 names. Once v2 is the standard, deprecate v1 in a
  follow-up; this ticket leaves both live.
- Hidden-channel **generation**. Defensive detection only.

---

## 8. Risks & mitigations

| Risk | Mitigation |
|---|---|
| Vocabulary confusion (v1 vs v2) | Keep v1 transfer fixtures; add v2 transfer-learning fixtures; document Dav1DPrometheus canonical vocabulary. |
| Truthtables scope blowup | N=2..4 only; deterministic parser; no LLM-as-judge. |
| Transitivity overclaims | Typed relation graph; transitive-relation whitelist; negative fixtures for non-transitive relation types. |
| Time policy ambiguity | Fixture meta includes `memory_root_binding` policy assumption; runner reports policy mismatch. |
| Premature multimodal scope creep | Carrier metadata now; non-text carrier support later; unsupported carriers fail/skip explicitly. |

---

## 9. Closure criterion

#000024 closes when:

1. Dav1DPrometheus vocabulary present: Transfer Learning,
   Triangulation, Truthtables, Transitivity, Time.
2. Legacy `transfer-v1.jsonl` digest unchanged.
3. New `transfer-learning-v2.jsonl` lands.
4. Triangulation runner non-stub.
5. Transitivity runner non-stub with typed-relation whitelist.
6. Truthtables runner non-stub with N=2..4 cap.
7. Time runner non-stub and reads `memory_records` /
   `selfmodel_records` surfaces.
8. All new fixtures include `carrier` / `domain` / `pi_star_ref` /
   `loss_report_refs` / `modality_notes`.
9. Unsupported future carriers fail or skip explicitly.
10. Make targets for each sub-battery pass.
11. Phase 1a fixture digests unchanged.
12. No schema, governance hash, or canonicalization-version changes.

---

## 10. Status

**Open · awaiting go/no-go.** Two-phase landing recommended:

- **Phase 1b.1 — vocabulary alignment.** Add v2 fixture file names
  + new sub-battery aliases. Keep v1 in place. ~150 lines.
- **Phase 1b.2 — implement four sub-batteries.** Triangulation
  first (existing surface), Transitivity second (typed-relation
  whitelist), Time third (memory-root integrated), Truthtables
  last (new propositional wrapper). ~700-900 lines + fixtures.

The architectural correction:

> **5T evaluates reasoning transformations across states, domains,
> evidence paths, logical cases, and time. Those transformations
> can live in text today, but must be representable across any
> sign-bearing or state-bearing carrier later.**

This makes #000024 the first ticket where v8 substrate becomes
measurable bench territory and the path to spatial-temporal /
multimodal / world-model AGI evaluation stays open.
