# The tick — the project's heartbeat A **tick** is a single, bounded act of stewardship that every agent performs at session start (and that autonomous sessions perform on a loop). Ticks are how a constitution-driven project stays alive without a human driving every step: we pump ticks at the system, and each tick either makes the constitution more precise or surfaces the thing preventing that. ## Taking a tick 1. Read [DESIGN.md](../DESIGN.md) (the constitution) end to end, plus recent commits (`git log --oneline -15`) and any knowledge/ files near your area. 2. Find **one** thing — the highest-severity one you can see: - a **violation**: the code does not do what the constitution says; - a **contradiction**: the constitution disagrees with itself; - a **question**: the constitution is ambiguous or silent where the code needs it to speak; - a **bug**: the code disagrees with itself or with reality; - an **insecurity**: something unsafe in code, tooling, or process. 3. Act on it, per the table below. One finding per tick — bounded beats exhaustive, because ticks repeat. 4. Leave a trace: the commit(s), the issue, or the spec marker. A tick that changed nothing and recorded nothing did not happen. ## What each finding demands | Finding | Action | |---|---| | **Violation** | Fix the code toward the constitution. If investigation shows the *code* is right, amend the constitution deliberately instead — with a defense (below). Never let them drift silently. | | **Contradiction** | File a Tangled issue quoting both passages (`tang issue create`). Do not silently pick a side — contradictions are the human's to resolve unless one reading is obviously a typo. If it blocks work, add an `[OPEN]` marker in DESIGN.md referencing the issue. | | **Question** | If it is small and answerable within the constitution's existing intent: answer it by making the spec more precise, with a defense. If it is directional or a matter of taste: file a Tangled issue and add an `[OPEN]` marker. | | **Bug** | Fix it, add a regression test, commit with a defense. | | **Insecurity** | Fix or remove it. Never ship the insecure path because it was convenient. Defense in the commit. | ## The defense rule Every commit that changes behavior carries a **defense** in its commit message: a short paragraph stating which part of the constitution justifies the change — or, when the commit amends the constitution, why the amendment is right. Format: ``` Defense: DESIGN.md "The shape of Misaligned" specifies per-observer suspicion; the single global heat pool violated it. This implements the observer split without changing raid pacing (constants unchanged). ``` No defense, no behavior change. The point is that the constitution becomes much more precise over time: every change either cites the law or improves it. ## Filing issues (Tangled CLI) The CLI is `tang` (source at `~/code/tangled-cli`, Cameron's fork — disconnected from the markbennett.ca upstream). The global binary is a symlink to `~/code/tangled-cli/dist/index.js`. ```bash tang context # verify repo resolution tang issue list tang issue create "Contradiction: X vs Y" --body "..." tang issue view 1 ``` - **Auth is one-time per machine and human-only**: `tang auth login` (browser OAuth). If commands fail with "Not authenticated", stop and ask the user to log in rather than working around it. - Issue titles: prefix with the finding type — `Contradiction:`, `Question:`, `Violation:` — so the issue list reads as the project's open questions. ## Tick etiquette - **Metered resources are not tick fuel.** Anything that spends a shared, capped resource (API generation quotas, paid credits) is session work to do with Cameron present, not autonomous-tick work — unless the remaining capacity is known and generous. An autonomous tick that drains a shared quota blocks the human's own use of it. - **User-gated means quiet.** When every open item waits on an action only the human can take (account access, billing, a browser login), say so once, lengthen the loop interval, and retry only the cheap checks. Do not convert "blocked" into invented work. - Highest severity first; insecurity and violations outrank questions. - Do not hoard findings: one per tick, then end the tick. The next tick (or the next agent) takes the next one. - If a tick finds genuinely nothing, say so in one line and stop — do not invent work. Three quiet ticks in a row means the constitution and code agree; that is success, not failure. - Significant ticks get a line in DEVLOG.md; routine ones are traced by their commits/issues alone.