How to write and maintain ACT claim segment files.
Do not hard-wrap lines. Let renderers (GitHub, Obsidian, editors) handle wrapping. One sentence or clause per line is fine for diff-friendliness, but do not insert line breaks at a fixed column width.
- Segment files live in
src/— one claim per file. - Filename = slug:
src/{slug}.md. No numbering in filenames. - Canonical ordering lives in each component's
OUTLINE.md(e.g.,01-act-core/OUTLINE.md), not in filenames. The ordering will change as the theory develops; the slug is the stable identity. - Cross-references use
#slug-name— everywhere, always.
Every segment file begins with:
---
slug: the-slug-name
type: postulate
status: exact
depends:
- prerequisite-slug-1
- prerequisite-slug-2
---| Type | Meaning |
|---|---|
postulate |
Tautological or foundational — cannot be derived, only accepted |
definition |
Introduces a quantity, object, or notation |
scope |
Restricts or broadens the domain under discussion |
formulation |
Representational or modeling choice (could be different) |
derived |
Logical consequence of prior claims under stated assumptions |
result |
Formally stated with a detailed derivation |
corollary |
Follows directly from a theorem |
hypothesis |
Structurally motivated, needs validation |
normative |
Grounded in axioms but requiring a precondition that must be verified |
empirical |
Generalization supported by data, not fully derived |
observation |
Finding from simulation or empirical investigation |
discussion |
Conceptual or normative claim used for interpretation |
measurement |
Operationalization of a theoretical quantity |
proposed-schema |
Mathematical shape identified, formal content pending |
derivation |
Complete formal derivation backing a result or derived claim |
worked-example |
End-to-end domain instantiation validating the theory chain |
detail |
Extended operational or technical material supporting other claims |
sketch |
Outlines an approach or framework; direction identified, rigor pending |
aside |
Tangential observation or connection; informative but not load-bearing |
| Status | Meaning |
|---|---|
axiomatic |
Foundational or tautological |
exact |
Mathematically validated under stated assumptions |
robust-qualitative |
Survives across assumptions; specific form approximate |
heuristic |
Useful approximation; quantitative form may not hold |
conditional |
Depends on explicitly named local assumptions |
empirical |
Supported by data or simulation, not fully derived |
discussion-grade |
Argued qualitatively or by analogy, not derived |
sketch |
Direction identified but formalization incomplete |
Do NOT use "Solid," "Confident," or "Plausible" as tier labels — these are not ACT terms.
List the slugs this claim directly depends on. The type of each dependency (definition import vs logical antecedent vs scope assumption) is derivable from the referenced file's own type field — no typed edges needed.
Orthogonal to epistemic status. Tracks where the segment is in our working process, not how strong the claim is.
Stage is recorded in segment frontmatter (e.g., stage: draft) and in the OUTLINE.md index table. A script can verify consistency between the two.
| Stage | Meaning | Gate to advance |
|---|---|---|
missing |
No segment file exists yet | — |
old |
Content exists only as old-* source material, not yet converted |
Write ACT-formatted version |
draft |
First ACT-formatted version written, not yet reviewed | — |
deps-verified |
All dependencies audited | Dependency audit (see below) |
claims-verified |
Content reviewed: derivations valid, labels accurate | Content review (see below) |
format-clean |
Mechanical review passed | Mechanical review (see below) |
candidate |
Ready for external challenge; Working Notes resolved | Working Notes disposition (see below) |
Stages are ordered: a segment at claims-verified has also passed deps-verified. A segment can be downgraded (e.g., candidate → draft) when a dependency changes, an error is found, or the claim's scope shifts.
Segments advance through stages by passing named gates. Each gate has a specific completion criterion — advancement encodes what has been verified, not how many times someone has looked at it.
Compute the dependency DAG from depends: fields. Promote leaves first, then their dependents. A segment should not reach claims-verified while any of its dependencies is still at draft — you cannot verify a derivation whose premises have not been checked.
Group segments into promotion batches by DAG depth. Process all segments in a batch before advancing to the next. Within a batch, segments are independent and can be reviewed in parallel.
For each entry in depends::
- The referenced slug exists as a segment file
- The dependency is genuine — this segment uses the referenced segment's definitions, results, or scope conditions (not merely "related" or "mentioned in Discussion")
- The referenced segment is itself at
deps-verifiedor higher - No missing dependencies — if the Formal Expression uses a quantity defined elsewhere, that slug appears in
depends:
Completion criterion: all dependencies verified, no missing dependencies identified.
The substantive gate. For each segment, answer the three epistemic triage questions:
- What prior objects make this claim well-typed? → Verify
depends:is complete (should already be, from Gate 1) - What competing formulation would also fit the prior objects? → Verify
type:is correct. If only one form fits the priors, it should bederivedorresult, notformulation. If several forms work and this is the most useful, it should beformulation. If it depends on the world, it should beempiricalorhypothesis. - What observation would falsify this claim in practice? → Verify
status:is correct. If unfalsifiable and not a definition, something is wrong.
Additionally:
- Derivation check. For segments with type
derived,result, orcorollary: trace each derivation step. Does each step follow from stated premises? Are all premises either independs:or stated as local assumptions with equation-level tags? - Label audit. Does the
status:field match the actual epistemic strength? Common errors: labeling a formulation choice asexact, labeling a hypothesis asderived, labeling a conditional result asexactwithout flagging the condition. - Formal expression check. Are equations well-typed? Do quantities have consistent units? Do boundary cases behave correctly?
Completion criterion: derivations valid, all labels accurate, no known issues with formal expressions. If the review reveals a mismatch, the segment returns to draft with a specific note about what is wrong.
Separate from content review — different cognitive mode.
- Linter passes (
bin/lint-md) - Cross-references (
#slug-name) resolve to existing files - Notation matches
NOTATION.md - Math renders correctly in GitHub and Obsidian (check the compatibility notes above)
- Document cadence matches the template (frontmatter → title → summary → formal expression → epistemic status → discussion → working notes)
- Equation-level tags are present and correct
Completion criterion: all mechanical checks pass.
Every item in ## Working Notes must be explicitly resolved:
- Resolved. The answer is now incorporated into the segment's Formal Expression or Discussion. Delete the note.
- Deferred. The question is real but out of scope for this segment. Move it to
WORKBENCH.mdor a relevant spike document with rationale. Delete the note from the segment. - Promoted. The question warrants its own segment or is a known gap in the outline. Add cross-reference, delete the note.
A segment with unresolved Working Notes is not a candidate. The ## Working Notes section should be empty or absent at candidate stage.
Completion criterion: Working Notes section empty or absent. The segment says what it means to say.
A segment at any stage can be downgraded to draft when:
- A dependency is revised in a way that affects this segment's claims
- An error is discovered in a derivation or formal expression
- The segment's scope changes (e.g., a scope condition is added or removed upstream)
- External review identifies an issue not caught in the original promotion
Downgrade to draft, not to an intermediate stage — the segment needs full re-review from the dependency audit forward, since the issue may have cascading effects.
- YAML frontmatter
- Title —
# Heading, human-readable form of the slug - One-sentence summary — plain text, no heading, immediately after title
- Formal Expression —
## Formal Expression, with equation-level tags - Epistemic Status —
## Epistemic Status, what's derived vs hypothesized - Discussion —
## Discussion, interpretation, connections — brief - Working Notes —
## Working Notes(optional), internal development notes
Definition, notation, and scope-narrowing files may use a simpler format than full claims. Corollaries and alternate formulations can live with their parent claim (they reinforce its independence), but anything that could be referenced independently should be its own file.
The ## Working Notes section is for active development: open questions about the claim, sketches of how ACT machinery might strengthen or weaken it, unresolved issues, things to check. This is our working space — what we're thinking about, not what we're asserting. It should be removed or emptied when the segment reaches candidate stage. Unlike the Discussion section (which is part of the published theory), Working Notes are process artifacts.
Three questions to ask when writing or reviewing any segment. These determine the segment's honest type and status — and, critically, its maximum attainable status (the strongest epistemic category it could ever occupy, regardless of additional work).
-
What prior objects make this claim well-typed? Which definitions, axioms, or derived results must exist for this claim to even be statable? If the answer is "none" or "only standard math," the claim may be foundational. If it requires many prior objects, it sits later in the dependency chain.
-
What competing formulation would also fit the prior objects? If the answer is "none — this is the only form compatible with the priors," the claim may be a theorem candidate (mathematical inevitability). If several forms work and you're choosing the most useful one, it's a formulation or design principle. Be honest: most claims have alternatives.
-
What observation would falsify this claim in practice? If a concrete falsifier exists, the claim is empirical or hypothesis. If no observation could distinguish it from alternatives, it may be a definition or tautology, not a testable claim. If it's unfalsifiable and not a definition, something is wrong.
| If... | Then the segment is probably... |
|---|---|
| Only one form fits the priors | Theorem candidate (derived, exact) |
| Several forms fit; this is the cleanest | Formulation (canonical choice) |
| Depends on the world, not the formalism | Empirical or hypothesis |
| No falsifier and not a definition | Tautology or under-specified — revisit |
Each segment has a ceiling — the strongest epistemic status it could ever reach, no matter how much work is invested. A segment whose functional form is inherently empirical (e.g., #conceptual-alignment) will never become exact; investing effort to "prove" it is wasted. A segment that's discussion-grade because it hasn't been worked yet (e.g., a sketch with a clear proof path) may have exact as its ceiling.
When the ceiling is clear, note it in the segment's Epistemic Status paragraph: "Max attainable: [status]. Currently [status] because [reason]." This prevents wasted effort and focuses energy where promotion is possible.
Inline tags before equations mark their epistemic status. These follow TFT conventions (see notation.md and _obs/old-tf-00-notation-conventions.md):
*[Definition (slug-name)]*
*[Derived (slug-name, from ...)]*
*[Derived (Conditional on ...)]*
*[Hypothesis]*
*[Empirical Claim]*
*[Formulation]*
*[Discussion]*
*[Assumption]*
*[Postulate (slug-name)]*
- In running text:
#slug-name— readable, grep-able, meaningful - As links from src/ files:
[#slug-name](slug-name.md)(relative) - As links from root files:
[#slug-name](src/slug-name.md)
Both forms work in GitHub and Obsidian. The plain #slug-name form is preferred in running prose where clickability is less important than readability.
Forward references are expected. Segments routinely reference not-yet-written segments via #slug-name. These are intentional dependency markers — they document the claim's connections within the theory even before the target segment exists. Do not treat them as broken links or remove them.
Obsidian tag recognition: Obsidian treats #word as a tag only when preceded by a space (or start of line). Always ensure a space before #slug-name — write ( #scope-condition) not ( #scope-condition), and see #update-gain not see#update-gain.
ACT uses standard LaTeX math that renders in both GitHub and Obsidian.
- Inline:
$...$— no space after opening$, no space before closing$ - Display:
$$...$$— on their own lines, blank line before and after
GitHub's math renderer is stricter than Obsidian's. To keep both working:
- No space immediately after
$or before closing$:$x^2$not$ x^2 $ - Display math delimiters
$$must be on their own lines - Use
\begin{aligned}inside$$...$$instead of\begin{align}(the latter is a top-level environment that conflicts with$$wrapping) \text{}works in both for words inside math\operatorname{}for multi-letter operators (e.g.,$\operatorname{argmin}$)- Vertical bars: use
\vert(not|) for single bars and\Vert(not\|) for double bars, everywhere in math — not just in tables. Raw|is ambiguous (conditional? delimiter? absolute value?) and breaks inside markdown table cells;\|has inconsistent rendering. For matched delimiters (absolute value, norms, set-builder notation), prefer\lvert/\rvertand\lVert/\rVertrespectively - Subscripts/superscripts with multiple characters need braces:
$x_{t+1}$not$x_t+1$ - Avoid raw
<and>in math — use\ltand\gt(GitHub can interpret these as HTML tags, breaking the math span and corrupting everything after the>) - Asterisks in inline math: use
\astinstead of bare*inside$...$. Markdown's italic/bold parser runs before the math renderer, so$\eta^*$can be parsed as$\eta^+ italic start, destroying the expression. Write$\eta^\ast$or$\eta^{\ast}$. Display math ($$...$$on own lines) is unaffected - Underscores and emphasis interference: when multiple inline
$...$spans on the same line contain_after a non-alphanumeric character (like}), GitHub's emphasis parser can match the_characters as italic delimiters across math spans, breaking all affected expressions. Fix: remove optional braces from single-character command arguments before_— write$\hat P_\Sigma$not$\hat{P}_\Sigma$, and$\mathcal T_c$not$\mathcal{T}_c$. The braces are optional for single-char arguments and removing them places an alpha character before_, which disables GFM emphasis. For nested commands like$\hat{\mathcal{T}}_t$where braces can't be removed, restructure the line so only one subscript-bearing expression appears per line. The linter's--fixmode handles the brace-removal cases automatically - Underscores in
\text{}: bare_inside\text{}can break GitHub rendering (the_triggers subscript in math mode and emphasis in markdown). Use-instead:$\mathcal{T}_{\text{obs-noise}}$not$\mathcal{T}_{\text{obs_noise}}$. The linter auto-fixes_→-inside\text{}
Follow TFT conventions. See notation.md for ACT's symbol reference. The original TFT conventions are in _obs/old-tf-00-notation-conventions.md. Key points:
-
Calligraphic (
$\mathcal{M}$ ,$\mathcal{O}$ ,$\mathcal{A}$ ,$\mathcal{C}$ ,$\mathcal{E}$ ) for sets and spaces -
$\mathcal{T}$ for adaptive tempo (calligraphic to distinguish from temperature) -
$\lVert\cdot\rVert$ for norms (mismatch magnitude);$\lvert\cdot\rvert$ for cardinality -
Subscript
$t$ : discrete time or macroscopic continuous time -
Subscript
$\tau$ : continuous event timestamp (microscopic) -
Superscript
$(k)$ : channel index -
$\mathcal C_t$ for chronica (interaction history) — not$\mathcal{H}$ (avoids collision with entropy)