Skip to content

canon(dolcheot): Tension (T) — the first-class derived eighth encoding type#261

Merged
klappy merged 4 commits into
mainfrom
canon/dolcheot-tension-type
Jun 24, 2026
Merged

canon(dolcheot): Tension (T) — the first-class derived eighth encoding type#261
klappy merged 4 commits into
mainfrom
canon/dolcheot-tension-type

Conversation

@git-repo-auth

@git-repo-auth git-repo-auth Bot commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Makes Tension a first-class, derived eighth DOLCHEO type (T) — promoting the contradiction-surfacing behavior that oddkit_encode has produced in prose for months into a typed, scored primitive. Because encoding types are governance docs read at encode time (prompt-over-code), merging this makes T live in oddkit — no code change.

Two files, full parity:

  • odd/encoding-types/tension.md — new type doc, structurally equal to decision.md/open.md: Type Identity, Field Schema (T · title · body · between · kind · status), Trigger Words, Quality Criteria (max 5), a Detection Pass section, and What-Makes-a-Good-Tension. Tagged encoding-type so the server discovers it.
  • canon/definitions/dolcheo-vocabulary.md — Tension added as the eighth dimension: letter entry, a dedicated "Tension Is Derived, Not Asserted" section, tool-level requirement (Apocrypha reconstruction #5: derived detection pass), storage/extensibility/migration, prior art, a retraction condition, and the anti-pattern note.

The defining property: Tension is the only second-order type — inferred by a pass over the other artifacts, not asserted. So it is synthesized-by-default, advisory, sha-bound to its poles, and re-derived (not bitwise reproducible) when they change. An operator can still author a [T] directly (sovereign); a resolving Decision closes it by reference.

Decisions baked in — flagging the high-blast-radius ones for your explicit sign-off:

  1. Acronym DOLCHEO → DOLCHEOT. Consistent with the DOLCHE→DOLCHEO precedent (a new dimension grows the acronym) and the "letter inside, never a +suffix" rule. This is the one consumer-facing change; trivially revertible if you'd rather keep "DOLCHEO" as the spoken umbrella with T documented as the eighth type. Historical/evolution prose and the DOLCHEO+H receipts were left intact as accurate history.
  2. T is CORE, not a domain extension (P/R/A tier) — it is universal, surfacing in every project's encode prose.
  3. Detection runs on encode, capped and criteria-gated to stay signal.
  4. Metadata: epoch: E0009, date: 2026-06-24epoch label is provisional; correct it to your sequence if E0009 is taken.

Authorial canon — drafted for your review; you approve and merge, which ships it. In addition to kirigami-mcp PRs #7/#8, which now point upstream at this primitive.


Note

Medium Risk
Consumer-facing acronym change and a new non-deterministic encode-time detection contract affect all oddkit session capture; risk is moderated because this PR is governance-only and implementation is tracked separately.

Overview
Promotes cross-artifact contradictions from informal encode prose into a governed eighth DOLCHEOT dimension, Tension (T) — the only derived (second-order) type, inferred by a detection pass over asserted artifacts rather than authored by default.

Adds odd/encoding-types/tension.md with the same shape as sibling encoding types: TSV schema (between, kind, status), trigger words, quality scoring, and Detection Pass rules (synthesized custody, sha-bound poles, advisory/dismissable, capped signal).

Updates canon/definitions/dolcheo-vocabulary.md to rename the umbrella DOLCHEO → DOLCHEOT, document T in the letter set, add a “Tension Is Derived, Not Asserted” section, extend oddkit_encode requirements (including optional [T] and post-encode detection), DOLCHEO→DOLCHEOT migration, Tension prior art/retraction criteria, and anti-pattern guidance (no DOLCHEOT+T). Metadata moves to epoch E0009.

Per prompt-over-code, these governance docs are what oddkit_encode reads at runtime — no application code in this PR; tool behavior is expected to follow the expanded contract in a separate implementation change.

Reviewed by Cursor Bugbot for commit a54467e. Bugbot is set up for automated code reviews on this repo. Configure here.

…coding type

- new odd/encoding-types/tension.md (parity with the other DOLCHEO type docs; encoding-type tagged, goes live on merge via prompt-over-code)
- canon/definitions/dolcheo-vocabulary.md promoted to DOLCHEOT / Eight Dimensions
@github-actions

github-actions Bot commented Jun 24, 2026

Copy link
Copy Markdown

Canon Quality — Frontmatter Schema ✅

All 49 file(s) in writings/ conform to klappy://canon/meta/frontmatter-schema.

Validator: scripts/validate-frontmatter.py · Canon: klappy://canon/constraints/frontmatter-validation-before-merge · Run: #300

@github-actions

Copy link
Copy Markdown

Canon Quality — Homepage Surfacing ✅

49 essay(s) scanned. Soft report — never blocks; the hard field gate is the Frontmatter Schema job.

All published essays resolve to the homepage feed.

Report: scripts/surfacing-report.py · Canon: klappy://canon/constraints/frontmatter-validation-before-merge

@github-actions

github-actions Bot commented Jun 24, 2026

Copy link
Copy Markdown

Canon Quality — P0010 Retrieval-Readiness ⚠️

Soft report for klappy://canon/constraints/retrieval-disclosure-contract. 680 files scanned. Never blocks — informational until the corpus is ready to enforce.

  • Blocking-class findings: 15 (structural fields the contract would filter on)
  • Warnings: 0 (kind resolves to unknown)
  • Informational: 13 (exempt templates/archive/drafts)

Kind distribution: {'essays': 51, 'canon': 229, 'apocrypha': 38, 'docs': 297, 'journals': 59, 'unknown': 6}
Kind source: {'path': 549, 'frontmatter': 125, 'none': 6} (frontmatter-primary, path-secondary)
Default-include visibility: 577 visible, 103 hidden (journals/apocrypha/unknown)

By rule: {'audience-invalid': 2, 'exposure-missing': 5, 'tier-missing': 5, 'tier-invalid': 7, 'fm-missing': 3, 'kind-unresolvable': 6}

These are not schema violations (see the Frontmatter Schema job for those on writings/). They are corpus-readiness signals for the retrieval contract: invalid/missing audience, exposure, tier, and docs whose kind cannot be resolved. Fix in a corpus-cleanup PR before the contract flips to enforcing. See the retrieval-readiness-findings artifact for the full list.

Validator: scripts/audit-retrieval-readiness.py · Constraint: klappy://canon/constraints/retrieval-disclosure-contract · Run: #300

@github-actions

github-actions Bot commented Jun 24, 2026

Copy link
Copy Markdown

Canon Quality — oddkit_audit

No dead klappy:// references or legacy link patterns found in writings/. 51 files scanned.

Spec: klappy://docs/oddkit/specs/oddkit-audit · Workflow: .github/workflows/canon-quality.yml · Run: #300

Comment thread odd/encoding-types/tension.md Outdated
Comment thread odd/encoding-types/tension.md Outdated
Comment thread odd/encoding-types/tension.md Outdated

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix prepared a fix for the issue found in the latest run.

  • ✅ Fixed: DOLCHEO label includes T type
    • Updated the Storage at Scale section to describe the eight-type rows as DOLCHEOT entries and vocabulary.

You can send follow-ups to the cloud agent here.

Reviewed by Cursor Bugbot for commit 093f14d. Configure here.

Comment thread canon/definitions/dolcheo-vocabulary.md Outdated
@klappy klappy merged commit c438a7e into main Jun 24, 2026
5 checks passed
@klappy klappy deleted the canon/dolcheot-tension-type branch June 24, 2026 23:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants