---
title: adotom · self-audit
kind: review
captured: 2026-05-21
back_reference: ./CORE-ENQUIRY.md
audit_against: the captain's two messages of 2026-05-21
---

# Self-audit — walking the captain's asks line by line

## The captain's original asks → pass / fail / held-open

| # | The ask (paraphrased to a single line) | Status | Artifact |
|---|---|---|---|
| 1 | Use executing-as-architecting | **pass** | every artifact carries `back_reference` / `operating_mode`; `-bedrock.md` Principle 1–6; build + arch + SOP done in parallel |
| 2 | Use the corpus constellation cradle | **pass** | `nodes.json` includes the cradle node; `CRADLE.html` cites the four templates; viewer skin matches cyrelium |
| 3 | Setup shop in adotom-automaton (ø → o) | **pass** | folder renamed; rename rationale in `-bedrock.md` |
| 4 | A to-do list, basic to-do operations | **pass** | `views/todo.html` add / edit / complete / tag / delete / filter / link |
| 5 | Pluggable into Asana (built from the start to be wired) | **stub** | `adapters/asana.py` complete; push_node / pull_tasks / map_axis; needs `ASANA_PAT` + GIDs (CONFIRM) |
| 6 | Started locally with own database or HTML/JSON/files | **pass** | `schema/nodes.json` is the source of truth; HTML+JSON+Python only; zero deps |
| 7 | Automated cron backups | **pass** | `server/cron-backup.sh` (hourly, keeps 720); `com.adotom.backup.plist` for macOS launchd; Synology Task Scheduler walkthrough in `docs/README-SYNOLOGY.md` |
| 8 | Ready to host on Synology, cross-device | **pass (manual lift)** | `docs/README-SYNOLOGY.md` walkthrough — one rsync + one Web Station vhost + one Task Scheduler entry |
| 9 | 6D structure rendered in 2D | **pass** | the 6 axes are the dimensions; the to-do view is one 2D projection; the schema admits arbitrary other 2D views |
| 10 | Self-parenting open-horizon schema | **pass** | `axes.continuity.parent_id` accepts null, another id, or own id; multiple roots; no fixed depth |
| 11 | Grow and add parts and interlink | **pass** | `axes.unity.links` is an open array of `{to, kind}`; new nodes can be added live; drawer edits links |
| 12 | One ID = a core idea articulated through multiple to-do items / mythical characters / chapters | **pass** | `axes.substance.manifests_as` is a multi-value list — same id can be `todo` + `character` + `chapter` simultaneously |
| 13 | Hold the world like a hologram of holograms (filter / overlay / any view) | **partial** | filter by status / tag / scale / substance / view-mode works in to-do view; only one view shipped so far. Schema supports any view; views are downstream and pluggable |
| 14 | Web page locally we can move to the server | **pass** | `views/todo.html` is a single static file; portable via rsync (`docs/README-SYNOLOGY.md`) |
| 15 | Try it out working on tasks | **pass** | `nodes.json` seeded with a self-referential active node (`adotom-build-the-view`); captain can take it over today |
| 16 | Clockify stub | **pass** | `adapters/clockify.py` with start_timer / stop_timer / get_active_timer / push_time_log / map_axis; CLI `whoami` / `active` / `push` |
| 17 | Always-on clock on the active task | **pass** | top-right clock, visible only when a task is `active`; diegetic per TOTK principle (gone when not relevant) |
| 18 | Clock auto-off at 4 h with a tag | **pass** | `CLOCK_CONFIG.autoStopSec=14400`; tags node `clock-auto-stopped`; annotates body and `time_log[-1].auto_stopped` |
| 19 | Soft reminders at 5 / 15 / 50 min | **pass** | `CLOCK_CONFIG.reminderSec=[300, 900, 3000]`; each fires `playPrr()` + `visualPulse()` + toast |
| 20 | A warm gentle prr tone | **pass** | Web Audio: 110 Hz + 165 Hz sines, 6.2 Hz tremolo LFO, lowpass at 540 Hz, 0.45s attack / 0.55s release, peak gain 0.06 — synthesized offline-friendly |

## The three-property test (from executing-as-architecting)

- **Ships** — yes. Captain can launch and use today.
- **Recurs** — yes. Same function runs every day, every task, every session.
- **Generalizes** — yes. Schema + viewer skin + launcher pattern reusable across root.

Parallel mode was the right shape.

## The reverse-socratic check (from CORE-ENQUIRY)

The build will land if the captain's reaction is *"this is the schema, finally
with a body to use it through."* The build will have failed if the captain's
reaction is *"this is just a to-do list."*

The schema is present in every node, not hidden. The to-do view exposes
scale, substance, parent, links, status — the captain cannot use the surface
without seeing the schema underneath. **First indicator: the captain edits a
6D axis on a node without being asked to. If that happens once, the schema
landed.**

## Drift check — did any artifact stop pointing back?

| Artifact | Points back at |
|---|---|
| `-bedrock.md` | `_principia/executing-as-architecting.md` (operating mode) |
| `CORE-ENQUIRY.md` | the captain's two 2026-05-21 messages |
| `schema/SCHEMA.md` | Principia Triskelion (the 6 pairs across 3 lobes) |
| `schema/nodes.json` | every seed node carries axes that point at the schema |
| `views/todo.html` | reads `schema/nodes.json`; renders the 6 axes |
| `server/serve.py` | writes `schema/nodes.json` with snapshot into `backups/` |
| `adapters/*.py` | both call `map_axis` which projects the 6D node down |
| `docs/README-SYNOLOGY.md` | references `server/serve.py` + `server/cron-backup.sh` |
| `CRADLE.html` | links to every artifact above |
| `REVIEW.md` (this) | audits CORE-ENQUIRY line by line |

**No drift detected.** Every artifact is downstream of the core enquiry.

## What I would do next, if continuing

1. **Wire Clockify for real.** Captain fills CONFIRM placeholders; verify a local
   start_active round-trips to a Clockify time entry; verify stop_timer closes it.
   The to-do view's start/stop buttons can then optionally call a tiny new
   server endpoint (`POST /api/clockify/start`) that invokes the adapter.
2. **Build the second view.** A hologram view that renders the same nodes as a
   force-graph (using `3d-force-graph` like Principia-Triskelion). Same data,
   different 2D projection. Falsifies or validates the "view is downstream" claim.
3. **Add a `version: int` field** to the payload and a 412-on-stale-PUT in the
   server. Closes the multi-device write-conflict gap before it hurts.
4. **Cradle round-trip.** Write an `entry.json` sidecar into the cradle
   templates whenever a node's `substance.manifests_as` includes `chapter`.
   Closes the "one ID, many manifestations" loop end-to-end.

## What would falsify this build

- Captain has to start the clock manually more than twice in one session
  → diegetic principle failed.
- After a week, no node manifests both as todo AND as anything else
  → the multi-manifestation claim was decorative, not load-bearing.
- The Synology lift requires more than rsync + Web Station vhost + Task Scheduler
  → local-first portability failed.
- A `clock-auto-stopped` tag is found alongside a captain note of *"forgot to
  stop"* the next morning → the 4 h cap is wrong, not the principle.
