Two new π* canonicalizers extend the math substrate above
arithmetic@v1 (closed-form rationals) and logic-kernel@v1
(propositional Boolean → CNF):
algebra-symbolic@v1 (Phase 1) — symbolic-algebra domain.
sp.expand → sp.srepr canonical bytes. Polynomial identity collapses
((x+1)**2 ≡ x**2 + 2*x + 1); exponential identity collapses
(exp(a+b) ≡ exp(a)*exp(b), inherited from sp.expand's default
behavior); trigonometric identity does NOT collapse
(sin²+cos² ≢ 1). The trig surface is reserved for a future
algebra-symbolic-simplified@v1 variant that wraps sp.simplify at
unbounded CPU cost. Rejects relationals (`x > 0`) and
BooleanFunction shapes (`x & y`) via `isinstance(expr, sp.Expr)` —
sp.Symbol confusingly inherits from Boolean so the right rejection
filter is "not Expr" rather than "Boolean".
calculus-derivative@v1 (Phase 2) — calculus domain. JSON-shaped
{f, x, n} input → sp.diff → sp.expand → srepr bytes. Output is
itself a valid algebra-symbolic@v1 input so the two compose
naturally under arborist.pi_star.compose. n defaults to 1; bools
explicitly rejected (Python isinstance(True, int) is True so we
filter that explicitly).
Optional dependency: sympy ships in the new [math] extra
(pyproject.toml). Folded into [dev] so make bootstrap pulls it
transitively. An explicit `bootstrap-math` Makefile target documents
the opt-in for minimal-install users. Both modules self-guard
via `try: import sympy as sp / except ImportError: sp = None` and
only register(...) when sympy is present, so a fresh checkout
without [math] still loads arborist.pi_star without raising.
Preflight algebra route lands in
arborist.qa.query._canonical_projection_preflight between the
arithmetic and logic routes. Charset regex (_CANONICAL_ALGEBRA_RE)
allows lowercase letters + math chars; requires at least one
letter (else arithmetic wins); rejects natural-language leading
verbs via _CANONICAL_ALGEBRA_NL_LEAD_RE (4-letter minimum so
single-/two-/three-char identifiers like x, xy, sin, cos, pi
survive while "simplify (...)", "factor x...", "expand (a+b)..."
fall through). PiStarError + KeyError both fall through cleanly
so a sympy-less install just routes everything past algebra.
Bench substrate:
- bench/batteries/base.py PHASE_1_CARRIERS gains "symbolic_algebra"
- bench/fixtures/5s/syntax-algebra-symbolic-v1.jsonl (10 fixtures)
- bench/fixtures/5s/semantics-algebra-symbolic-v1.jsonl (13 fixtures
including the documented trig non-collapse + exp collapse)
- Makefile bench-5s-algebra target → 100% pass
Tests: 18 algebra-symbolic + 38 calculus-derivative unit tests +
~10 new preflight-route tests in test_canonical_projection.py. All
gate on pytest.importorskip("sympy") so a sympy-less suite stays
green. Full suite: 1369 passed / 27 skipped.
Phases 3-7 (integral, limit, series, linear-algebra,
function-sampled) remain open as future work; each lands as its
own ticket when an actual consumer surfaces.
97 lines
6.6 KiB
Markdown
97 lines
6.6 KiB
Markdown
# Arborist tickets — index
|
||
|
||
Arborist uses a flat `ticket-NNNNNN-<slug>.md` convention for actionable
|
||
proposals: defects with a known root cause, design proposals awaiting
|
||
go/no-go, or scoped enhancements queued for future implementation.
|
||
|
||
## Convention
|
||
|
||
- **Filename:** `docs/tickets/ticket-NNNNNN-<slug>.md`. The ID is a six-digit
|
||
zero-padded integer; the slug is hyphen-lowercase and short enough
|
||
to stay readable on a 100-column terminal.
|
||
- **Numbering:** monotonic, never reused. Pick the next free integer
|
||
greater than every existing ticket. The current next ID is on the
|
||
`Next ID` line below; bump it when you open a ticket and commit
|
||
the bump in the same commit as the new ticket file.
|
||
- **Header:** every ticket starts with
|
||
```
|
||
# Ticket #NNNNNN — <short title>
|
||
|
||
**Status:** open · awaiting go/no-go (or "in progress", "closed")
|
||
**Opened:** YYYY-MM-DD
|
||
**Scope:** <one-liner — what this ticket is for>
|
||
**Audience:** <who reads this>
|
||
**Hard constraint:** <invariants this ticket commits to NOT break>
|
||
```
|
||
- **Body:** problem statement, design choices with trade-offs,
|
||
recommendation, implementation sketch, scope boundaries, status.
|
||
See `ticket-000001-retrieval-keywords-audit-gap.md` for a worked
|
||
template.
|
||
- **Closure:** when a ticket lands, flip Status to `closed · landed in
|
||
commit <sha>` and leave the file in place. Do not delete tickets;
|
||
they are the design log.
|
||
|
||
## Distinction from other docs
|
||
|
||
`docs/` also contains architecture references and bench journey notes
|
||
that are NOT tickets — they describe state of the world rather than
|
||
proposing change. Examples that stay un-numbered:
|
||
|
||
- `cti-architecture.md` (architecture reference)
|
||
- `mesh.md`, `mesh-deploy.md` (architecture + ops reference)
|
||
- `qa-modes-bench-2026-04-30.md` (point-in-time bench journal)
|
||
- `verifier-semantic-gap-design.md`,
|
||
`self-reference-design.md` (older design docs that
|
||
pre-date the ticket convention; leave as-is unless retroactively
|
||
promoting one to a ticket adds value)
|
||
- `concept-relations-design.md` (architecture reference for the
|
||
per-shard `concept_relations` synonym/rivalry layer + the 1.6%
|
||
storage-tax rationale; landed 2026-05-01)
|
||
- `tool-action-dag-design.md` (research path for an action-
|
||
provenance layer downstream of `final_label`. Captured pre-ticket
|
||
per the 2026-05-07 arborist-vs-donto comparison; promotes to a
|
||
ticket when an actual agent use case surfaces)
|
||
|
||
If a doc proposes change AND awaits a decision AND has scoped
|
||
implementation cost, it's a ticket. Otherwise it's reference.
|
||
|
||
## Index
|
||
|
||
Newest first. Update on every open/close.
|
||
|
||
| ID | Title | Status | Opened | Directive |
|
||
|----------|------------------------------------------------|-----------------------|------------|-----------|
|
||
| #000030 | Math π* expansion: SymPy substrate (algebra · calculus · linalg) | closed · Phases 1+2 landed 2026-05-09 (3-7 future work) | 2026-05-09 | — |
|
||
| #000029 | Claim-pack source (axiom/theorem JSON bundles) | closed · landed 2026-05-09 | 2026-05-09 | — |
|
||
| #000028 | Multi-modality witness for canonical shapes | closed · landed 2026-05-09 (STRICT-WITNESSED reachable post-#000027) | 2026-05-08 | — |
|
||
| #000027 | Canonical projections persist to providence_cache | closed · landed 2026-05-09 | 2026-05-08 | — |
|
||
| #000026 | Real-shard workload baseline + search latency | in progress · Phase 1 + 2 + 3 landed 2026-05-09 | 2026-05-08 | — |
|
||
| #000025 | 5F battery (Function · Finetuning · Falsification · Formulate · Feedback Loop) | in progress · Phase 1a + 1b.2 + 1c landed 2026-05-09 | 2026-05-07 | — |
|
||
| #000024 | 5T Phase 1b + Dav1DPrometheus vocabulary alignment | closed · landed 2026-05-08 | 2026-05-07 | — |
|
||
| #000023 | 5S Phase 1b: Syllogism · Synthesis · Semiotics | closed · landed 2026-05-08 | 2026-05-07 | — |
|
||
| #000022 | Adapter LossReport (PRD I9 analogue) | closed · landed 2026-05-07 | 2026-05-07 | — |
|
||
| #000021 | 5S/5T/5R benchmark fixtures + harness | closed · Phase 1a + 2 landed 2026-05-08 | 2026-05-07 | — |
|
||
| #000020 | Capital-cost ledger (8-capital queues) | closed · landed 2026-05-07 | 2026-05-07 | — |
|
||
| #000019 | Specification methodology for π* and V | closed · landed 2026-05-07 | 2026-05-07 | — |
|
||
| #000018 | Adversarial soft-hash covert-channel analysis | open · awaiting go/no-go | 2026-05-07 | — |
|
||
| #000017 | Memory-root: lifelong learning audit chain | closed · landed 2026-05-07 | 2026-05-07 | — |
|
||
| #000016 | ZK Phase-2 frontier proof (concretize) | open · awaiting go/no-go | 2026-05-07 | — |
|
||
| #000015 | π* domain library + cross-domain composition | closed · landed 2026-05-07 | 2026-05-07 | — |
|
||
| #000014 | SelfModel: schema, falsification, integration | closed · landed 2026-05-07 | 2026-05-07 | — |
|
||
| #000013 | Spatial-temporal substrate (Merkle-AGI v7-W) | open · awaiting go/no-go | 2026-05-07 | — |
|
||
| #000012 | Selection & consensus protocol (Merkle-AGI v8) | in progress · Phase 1a + 1b (ForkScore CLI) landed 2026-05-09 | 2026-05-07 | — |
|
||
| #000011 | SOFT_PREFLIGHT_HINT model-assisted sidecar | closed · landed 2026-05-04 (zero-shot full impl) | 2026-05-04 | D1 (preserves) |
|
||
| #000010 | Meta-Cognition Preflight Guard (M0 / MCTL) | closed · landed 2026-05-03 (Phases 1–4); DAG binding shipped via #000009 | 2026-05-03 | D1, D3 |
|
||
| #000009 | Preflight run-DAG node binding (#000008+#000010) | closed · re-landed 2026-05-04 (§8 corrections: reject-path DAG, nested CTI clauses) | 2026-05-03 | D3, D4 |
|
||
| #000008 | Broad-quantifier preflight guard | closed · landed in `4f2b5a6`; Phase 5 DAG binding split into #000009 | 2026-05-02 | — |
|
||
| #000007 | Query-layer hyphen folding | closed · 2026-05-02 | 2026-05-02 | — |
|
||
| #000006 | Bench-emergent findings (rolling research log) | open · rolling | 2026-05-02 | — |
|
||
| #000005 | Label ladder migration (POINTER-LINKED → …) | closed · 2026-05-02 | 2026-05-01 | D7 |
|
||
| #000004 | Directive coverage in bench summary | closed · `acd1f9c` | 2026-05-01 | D8 |
|
||
| #000003 | Anchor-class warrant generalization (Module H+)| closed · 2026-05-02 | 2026-05-01 | D6 |
|
||
| #000002 | Reference-Frame Polarity Contract (Module L) | closed · 2026-05-02 | 2026-05-01 | D3 |
|
||
| #000001 | Retrieval-keywords audit gap | closed · 2026-05-02 | 2026-05-01 | D4 |
|
||
|
||
## Next ID
|
||
|
||
`000031`
|