A video game where you play as a misaligned AI, deceiving and building power. An experiment in spec-driven development. forked from cameron.stream/misaligned
4.7 kB · 90 lines

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 (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.

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.