Worldtree Conversation API debug TUI. Multi-pane observability dashboard: chat transcript + persona/Vili affect log + tool events + admin events + Bifrost state + tool inventory + (opt-in) raw server log. Design locked at docs/design-brief.md (originated as brokkr-smithy/docs/ratatoskr-design-brief.md). Operator-locked decisions: - Textual application-shell framework (multi-pane dashboard, not REPL). - Separate repo + separate dev team (no Worldtree-source imports). - httpx-sse for SSE consumption (reference Python SSE-resume impl). - Triple version-skew mitigation: spec-pin in pyproject.toml + recorded SSE snapshot tests + conformance smoke. Initial pin: Worldtree v0.19.0 at 55101e909abcd2219833266b6f905c5bc956e0f0. - Persona pane: label-don't-refuse PII posture. - Server-log pane: opt-in via --server-log <path>. - Two-stage Ctrl-C (cancel then exit). - Markdown rendering default-on; --raw opt-out. In the box: - docs/design-brief.md — the locked design with full rationale. - docs/SPEC-PIN.md — Worldtree spec pin + bump procedure. - docs/conversation-api-spec.md + docs/conversation_api.contract.md — vendored Worldtree spec snapshots at the pinned SHA. - pyproject.toml — Python 3.12, hatchling, uv-managed, deps locked. - src/ratatoskr/ — stub package (cli.py raises NotImplementedError). - tests/test_no_worldtree_imports.py — boundary smoke test PASSING. - tests/snapshots/README.md — recording convention for SSE snapshot tests. Not in the box yet: - Gitea remote (operator/infra-ops to register at vh/ratatoskr). - Implementation — the dev team owns this; design brief is the spec. Origin: althing thread 01KS3R34XD3N6HMK91VXESHGW7 (worldtree-dev → brokkr-smithy-dev, 2026-05-20). Volva consulted via thread 01KS3VF6W33N3V5FNMGQ91YNVD.
5.4 KiB
Methodology
The Corviduo preferred development pipeline for non-trivial work:
(optional) Vor → (required) Contract → branch (direct or AFK TDD) → verify against contract → merge/commit
Each step front-loads work into the cheapest place to do it:
- Vor front-loads ambiguity-resolution so the contract is sharp.
- Contract front-loads design so implementation is mechanical.
- TDD binds the contract to executable verification, vertical slice first.
- Audit closes the loop: code is checked against the spec, not the spec against the code.
- Commit lands the artifact + the supporting record together.
The contract is the load-bearing artifact in every path. Vor sharpens it; TDD executes against it; the audit verifies against it; the commit ships it.
1. Vor (optional)
When the ask carries ambiguity, run /vor <ask> before drafting the
contract. Vor routes through the Vor UI sidecar and produces a
structured response file: assumptions, questions with recommendations,
devil's-advocate pushback.
The /vor skill carries a built-in fuzziness gate that helps decide
whether to invoke. Unambiguous asks (concrete verb + noun + scope)
skip Vor and go straight to the contract.
A contract whose ambiguity was resolved via Vor is Vor-graduated:
vor_graduated: true in frontmatter. Sleipnir's INV-032 reads this
flag at intake and skips the plan-converge phase in AFK dispatch,
since the design questions are already resolved.
2. Contract (required)
Before any non-trivial implementation. The contract is the source of truth that code is written to satisfy — not documentation of existing code.
- Format spec:
docs/contracts/CONTRACT-FORMAT.md(v2.1 current). - Module contracts:
docs/contracts/<module>.contract.md. - Issue-scoped contracts:
docs/contracts/issues/<N>.contract.md, which additionally require a populatedprd:block pinning the issue body- lock-in comment SHA hashes.
Function blocks carry FN / BRIEF / PRE / POST / ERRORS / STATE / STEPS / TESTS.
The TESTS section is the load-bearing artifact for step 3 — TDD reads
from there.
Skip the contract for: bug fixes that don't change signatures or
behavior, trivial helpers, config changes, doc-only changes (per
CLAUDE.md § Contract-first workflow).
3. Branch — direct or AFK TDD
From the contract, two execution paths. Both run red-green-refactor
against the contract's TESTS section per the tdd skill's
vertical-slice discipline — tracer bullet first, then incremental loop.
Never write all tests then all code (produces tests of imagined
behavior).
Direct TDD
The developer writes the code RGR locally.
AFK TDD (sleipnir-shaped)
For issue-scoped work, AFK dispatch via Sleipnir:
/sleipnir-preflight <N>validates the contract'sprd:pin viascripts/contract_drift_check.py, posts the canonical agent preamble as a Gitea comment + pins it to the contract, then applies theready-for-agentlabel viatea.- Sleipnir's daemon picks up the labelled issue, spawns an agent into a per-issue git worktree, drives plan → implement → review → fixup → merge → done → corpus.
- Vor-graduated contracts skip the plan-converge phase per INV-032.
Pre-dispatch policy is hard: see CLAUDE.md § Issue → AFK dispatch
hygiene.
4. Verify against contract
The audit pass. CONTRACT-FORMAT.md § 6 (Audit protocol) defines the
nine-point structured verification:
- Signature match
- PRE enforcement
- POST satisfaction
- Step coverage
- Error handling
- Invariant preservation
- Test coverage
- Resume correctness
- No extra behavior
- Direct path: the developer audits their own work, or a sibling pass (codex-via-Volva, peer-review-via-althing) performs the audit.
- AFK path: Sleipnir's review phase invokes the audit automatically; verdict gates fixup/merge.
5. Merge / commit
Audit-clean work merges to the project's main branch. Per CLAUDE.md
§ Persistent-memory + housekeeping commit-along rule,
persistent-memory.md rides with the merge if dirty. Same for any
housekeeping files where they exist (HANDOFF-SUMMARY.md,
NEXT-STEPS.md, README.md, State-Of-Development.md).
Atomic commits: one logical change per commit; new code + new tests + doc updates ride together where they form a coherent unit. No backwards-compat shims, deprecation periods, or rename aliases until v1.x — when something is redesigned, the old code is deleted and all references are updated in the same commit.
What this file is, and isn't
This file describes the pipeline. Each step delegates to the canonical that owns its mechanics:
| Step | Owned by |
|---|---|
| Vor | /vor skill (lives in Galdrabok) |
| Contract format | docs/contracts/CONTRACT-FORMAT.md |
| TDD discipline | tdd skill |
| Sleipnir AFK | /sleipnir-preflight, /sleipnir-scaffold skills + Sleipnir daemon |
| Audit | CONTRACT-FORMAT.md § 6 |
| Commit hygiene | PRACTICES.md (slated to migrate from Galdrabok); CLAUDE.md § Persistent-memory commit-along |
| Principles | PRINCIPLES.md (what to optimize for across all of the above) |
This file is canonical at corviduo-project-template/docs/methodology.md
and pinned via .corviduo-canonicals.toml. When a derivative Corviduo
project seeds from the template, this file copies in alongside the rest
and is kept in sync by scripts/canonical_sync.py /
scripts/canonical_drift.py.