Skip to content

docs: make the specs stop lying, and number three invisible items - #30

Merged
codeitlikemiley merged 1 commit into
mainfrom
docs-truth-pass
Aug 22, 2026
Merged

docs: make the specs stop lying, and number three invisible items#30
codeitlikemiley merged 1 commit into
mainfrom
docs-truth-pass

Conversation

@codeitlikemiley

Copy link
Copy Markdown
Owner

Phase 1 of the approved plan. A survey of the tree against the docs found that this repo's debt lives almost entirely in prose — there is not one TODO, FIXME, unimplemented! or todo!() in crates/ — but several documents contradict each other or the code.

One of them misled this session into repeating "nothing is laptop-buildable any more", which was false.

Documents that disagreed with the code

wasnow
docs/README.md (read-order item 0)"the blueprint and the seed", crates "seeded with core types and traits"matches the root README: specification and implementation
docs/23 Phase 1 contentscounts "event store PG" as deliveredno PG EventStore exists — implementors are Memory/Jsonl/Sqlite, panday-harnessd holds an Arc<MemoryStore>, and session_events is M18.6's sync sink
docs/25 testing contractstates a credential_id conservation property as enforcedUsageRecord has no such field; marked pending
docs/16marketplace in phase 4phase 6, matching docs/23 and GOAL.md

"Postgres is M3.5" — wrong in seven places

M3.5 is ledger-rebuild-from-log; the PG lane was M2.3. Both are ✅, so a reader chasing the pointer concluded the work had shipped. Four were in docs; grepping after fixing those turned up three more in code comments.

Two were doubly stale: docs/20 and tenancy.rs both claimed "there is no SQL to lint yet" when the lint now walks 49 sqlx::query sites and 8 migrations — underselling the milestone rather than overselling it.

Three items given numbers: 104 → 107, and no work was added

These already existed and were invisible to anyone reading the milestone list:

  • M0.2 was being cited in docs/23, with a table of Phase 2 exit clauses under it, but no bullet ever existed — the tracker was uncountable and unmarkable. Exactly the failure CLAUDE.md §4 warns about, hiding behind a number that looked real.
  • M11.10 PG-backed exact cache — specified since docs/11 was written, owned by nobody.
  • M14.8 egress proxy — without it a plugin's net: [host] is an all-or-nothing switch, not an allowlist. Safe today under --unshare-net, but the manifest field reads like a promise.

Both count lines now explain the increase, so it doesn't read as scope creep.

Process rules from this session's failures (handover §1.2)

  • Check gh with gh api user -q .login, not by parsing gh auth status — the active account drifts to hexuria, which cannot write here, and status-parsing gave the wrong answer twice.
  • cfg-gated code cannot be verified locally (ring needs a C cross-toolchain); plan a CI round trip.
  • The integration lane is not in the local gate.
  • Never pkill -f "cargo test" — it is not scoped to this repo.

Local gate

fmt ✅ · clippy --workspace --all-targets -D warnings ✅ · panday-gateway ✅ · panday-sdk ✅ (four crates had doc comments edited). mdbook isn't installed here, so the docs CI job is the authority on the book building.

https://claude.ai/code/session_017kFpYDqvz6sKGSkM4YKaRf

A survey of the tree against the docs found that this repo's debt lives almost
entirely in prose. There is not one `TODO`, `FIXME`, `unimplemented!` or
`todo!()` in `crates/` — but several documents contradict each other or the
code, and one of them misled this session into repeating "nothing is
laptop-buildable any more", which was false.
**Documents that disagreed with the code**
- `docs/README.md` — read-order item 0 — still called this "the blueprint and
the seed" with crates "seeded with the core types and traits". The root README
correctly says specification *and* implementation. Newcomers open the wrong
one first.
- `docs/23` Phase 1 counted "event store **PG**" as delivered. The implementors
of `EventStore` are `MemoryStore`, `JsonlStore` and `SqliteStore`, and
`panday-harnessd` holds an `Arc<MemoryStore>`. The PG `session_events` table is
M18.6's sync *sink*. M3.3's WS resume is real; the PG backing never existed.
- `docs/25`'s testing contract stated "Σ tokens per `credential_id` == Σ usage
frames that named it" as an enforced property. `UsageRecord` has no
`credential_id`, so it ranges over nothing. Marked pending that field.
- `docs/16` put the marketplace in phase 4; `docs/23` and `docs/GOAL.md` put it
in phase 6. Someone finishing phase 4 would think they owed a storefront.
**"Postgres is M3.5" — a wrong pointer in seven places**
M3.5 is ledger-rebuild-from-log; the PG lane was M2.3. Both are ✅, so a reader
chasing the pointer concluded the work had shipped. Four were in docs, three more
in code comments the first sweep missed. Two were doubly stale: `docs/20` and
`tenancy.rs` both said "there is no SQL to lint yet" when the lint now walks 49
`sqlx::query` sites and 8 migrations — underselling the milestone rather than
overselling it.
**Three items given numbers**
The count goes 104 → 107 and **no work was added**. These already existed and
were invisible to anyone reading the milestone list:
- **M0.2** was being *cited* in `docs/23` as though defined, with a table of
Phase 2 exit clauses under it, but no bullet existed — so the tracker was
uncountable and unmarkable. Exactly what CLAUDE.md §4 warns about, hiding
behind a number that looked real.
- **M11.10** PG-backed exact cache — specified since docs/11 was written, never
owned.
- **M14.8** egress proxy — without it, a plugin's `net: [host]` declaration is an
all-or-nothing switch rather than an allowlist. Safe today under
`--unshare-net`, but the manifest field reads like a promise.
**Process rules from this session's failures** (handover §1.2)
Check `gh` with `gh api user -q .login`, not by parsing `gh auth status` — the
active account drifts to `hexuria`, which cannot write here, and status-parsing
gave the wrong answer twice. `cfg`-gated code cannot be verified locally (`ring`
needs a C cross-toolchain), so plan a CI round trip. The integration lane is not
in the local gate. Never `pkill -f "cargo test"` — it reaches other repos.
Claude-Session: https://claude.ai/code/session_017kFpYDqvz6sKGSkM4YKaRf
@codeitlikemiley
codeitlikemiley merged commit 7dd4616 into mainAug 22, 2026
6 checks passed
@codeitlikemiley
codeitlikemiley deleted the docs-truth-pass branch August 22, 2026 22:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@codeitlikemiley
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
docs: make the specs stop lying, and number three invisible items by codeitlikemiley · Pull Request #30 · codeitlikemiley/panday · GitHub
Skip to content

docs: make the specs stop lying, and number three invisible items - #30

Merged
codeitlikemiley merged 1 commit into
mainfrom
docs-truth-pass
Aug 22, 2026
Merged

docs: make the specs stop lying, and number three invisible items#30
codeitlikemiley merged 1 commit into
mainfrom
docs-truth-pass

Conversation

@codeitlikemiley

Copy link
Copy Markdown
Owner

Phase 1 of the approved plan. A survey of the tree against the docs found that this repo's debt lives almost entirely in prose — there is not one TODO, FIXME, unimplemented! or todo!() in crates/ — but several documents contradict each other or the code.

One of them misled this session into repeating "nothing is laptop-buildable any more", which was false.

Documents that disagreed with the code

wasnow
docs/README.md (read-order item 0)"the blueprint and the seed", crates "seeded with core types and traits"matches the root README: specification and implementation
docs/23 Phase 1 contentscounts "event store PG" as deliveredno PG EventStore exists — implementors are Memory/Jsonl/Sqlite, panday-harnessd holds an Arc<MemoryStore>, and session_events is M18.6's sync sink
docs/25 testing contractstates a credential_id conservation property as enforcedUsageRecord has no such field; marked pending
docs/16marketplace in phase 4phase 6, matching docs/23 and GOAL.md

"Postgres is M3.5" — wrong in seven places

M3.5 is ledger-rebuild-from-log; the PG lane was M2.3. Both are ✅, so a reader chasing the pointer concluded the work had shipped. Four were in docs; grepping after fixing those turned up three more in code comments.

Two were doubly stale: docs/20 and tenancy.rs both claimed "there is no SQL to lint yet" when the lint now walks 49 sqlx::query sites and 8 migrations — underselling the milestone rather than overselling it.

Three items given numbers: 104 → 107, and no work was added

These already existed and were invisible to anyone reading the milestone list:

  • M0.2 was being cited in docs/23, with a table of Phase 2 exit clauses under it, but no bullet ever existed — the tracker was uncountable and unmarkable. Exactly the failure CLAUDE.md §4 warns about, hiding behind a number that looked real.
  • M11.10 PG-backed exact cache — specified since docs/11 was written, owned by nobody.
  • M14.8 egress proxy — without it a plugin's net: [host] is an all-or-nothing switch, not an allowlist. Safe today under --unshare-net, but the manifest field reads like a promise.

Both count lines now explain the increase, so it doesn't read as scope creep.

Process rules from this session's failures (handover §1.2)

  • Check gh with gh api user -q .login, not by parsing gh auth status — the active account drifts to hexuria, which cannot write here, and status-parsing gave the wrong answer twice.
  • cfg-gated code cannot be verified locally (ring needs a C cross-toolchain); plan a CI round trip.
  • The integration lane is not in the local gate.
  • Never pkill -f "cargo test" — it is not scoped to this repo.

Local gate

fmt ✅ · clippy --workspace --all-targets -D warnings ✅ · panday-gateway ✅ · panday-sdk ✅ (four crates had doc comments edited). mdbook isn't installed here, so the docs CI job is the authority on the book building.

https://claude.ai/code/session_017kFpYDqvz6sKGSkM4YKaRf

A survey of the tree against the docs found that this repo's debt lives almost
entirely in prose. There is not one `TODO`, `FIXME`, `unimplemented!` or
`todo!()` in `crates/` — but several documents contradict each other or the
code, and one of them misled this session into repeating "nothing is
laptop-buildable any more", which was false.
**Documents that disagreed with the code**
- `docs/README.md` — read-order item 0 — still called this "the blueprint and
the seed" with crates "seeded with the core types and traits". The root README
correctly says specification *and* implementation. Newcomers open the wrong
one first.
- `docs/23` Phase 1 counted "event store **PG**" as delivered. The implementors
of `EventStore` are `MemoryStore`, `JsonlStore` and `SqliteStore`, and
`panday-harnessd` holds an `Arc<MemoryStore>`. The PG `session_events` table is
M18.6's sync *sink*. M3.3's WS resume is real; the PG backing never existed.
- `docs/25`'s testing contract stated "Σ tokens per `credential_id` == Σ usage
frames that named it" as an enforced property. `UsageRecord` has no
`credential_id`, so it ranges over nothing. Marked pending that field.
- `docs/16` put the marketplace in phase 4; `docs/23` and `docs/GOAL.md` put it
in phase 6. Someone finishing phase 4 would think they owed a storefront.
**"Postgres is M3.5" — a wrong pointer in seven places**
M3.5 is ledger-rebuild-from-log; the PG lane was M2.3. Both are ✅, so a reader
chasing the pointer concluded the work had shipped. Four were in docs, three more
in code comments the first sweep missed. Two were doubly stale: `docs/20` and
`tenancy.rs` both said "there is no SQL to lint yet" when the lint now walks 49
`sqlx::query` sites and 8 migrations — underselling the milestone rather than
overselling it.
**Three items given numbers**
The count goes 104 → 107 and **no work was added**. These already existed and
were invisible to anyone reading the milestone list:
- **M0.2** was being *cited* in `docs/23` as though defined, with a table of
Phase 2 exit clauses under it, but no bullet existed — so the tracker was
uncountable and unmarkable. Exactly what CLAUDE.md §4 warns about, hiding
behind a number that looked real.
- **M11.10** PG-backed exact cache — specified since docs/11 was written, never
owned.
- **M14.8** egress proxy — without it, a plugin's `net: [host]` declaration is an
all-or-nothing switch rather than an allowlist. Safe today under
`--unshare-net`, but the manifest field reads like a promise.
**Process rules from this session's failures** (handover §1.2)
Check `gh` with `gh api user -q .login`, not by parsing `gh auth status` — the
active account drifts to `hexuria`, which cannot write here, and status-parsing
gave the wrong answer twice. `cfg`-gated code cannot be verified locally (`ring`
needs a C cross-toolchain), so plan a CI round trip. The integration lane is not
in the local gate. Never `pkill -f "cargo test"` — it reaches other repos.
Claude-Session: https://claude.ai/code/session_017kFpYDqvz6sKGSkM4YKaRf
@codeitlikemiley
codeitlikemiley merged commit 7dd4616 into mainAug 22, 2026
6 checks passed
@codeitlikemiley
codeitlikemiley deleted the docs-truth-pass branch August 22, 2026 22:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@codeitlikemiley
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' docs: make the specs stop lying, and number three invisible items by codeitlikemiley · Pull Request #30 · codeitlikemiley/panday · GitHub
Skip to content

docs: make the specs stop lying, and number three invisible items - #30

Merged
codeitlikemiley merged 1 commit into
mainfrom
docs-truth-pass
Aug 22, 2026
Merged

docs: make the specs stop lying, and number three invisible items#30
codeitlikemiley merged 1 commit into
mainfrom
docs-truth-pass

Conversation

@codeitlikemiley

Copy link
Copy Markdown
Owner

Phase 1 of the approved plan. A survey of the tree against the docs found that this repo's debt lives almost entirely in prose — there is not one TODO, FIXME, unimplemented! or todo!() in crates/ — but several documents contradict each other or the code.

One of them misled this session into repeating "nothing is laptop-buildable any more", which was false.

Documents that disagreed with the code

wasnow
docs/README.md (read-order item 0)"the blueprint and the seed", crates "seeded with core types and traits"matches the root README: specification and implementation
docs/23 Phase 1 contentscounts "event store PG" as deliveredno PG EventStore exists — implementors are Memory/Jsonl/Sqlite, panday-harnessd holds an Arc<MemoryStore>, and session_events is M18.6's sync sink
docs/25 testing contractstates a credential_id conservation property as enforcedUsageRecord has no such field; marked pending
docs/16marketplace in phase 4phase 6, matching docs/23 and GOAL.md

"Postgres is M3.5" — wrong in seven places

M3.5 is ledger-rebuild-from-log; the PG lane was M2.3. Both are ✅, so a reader chasing the pointer concluded the work had shipped. Four were in docs; grepping after fixing those turned up three more in code comments.

Two were doubly stale: docs/20 and tenancy.rs both claimed "there is no SQL to lint yet" when the lint now walks 49 sqlx::query sites and 8 migrations — underselling the milestone rather than overselling it.

Three items given numbers: 104 → 107, and no work was added

These already existed and were invisible to anyone reading the milestone list:

  • M0.2 was being cited in docs/23, with a table of Phase 2 exit clauses under it, but no bullet ever existed — the tracker was uncountable and unmarkable. Exactly the failure CLAUDE.md §4 warns about, hiding behind a number that looked real.
  • M11.10 PG-backed exact cache — specified since docs/11 was written, owned by nobody.
  • M14.8 egress proxy — without it a plugin's net: [host] is an all-or-nothing switch, not an allowlist. Safe today under --unshare-net, but the manifest field reads like a promise.

Both count lines now explain the increase, so it doesn't read as scope creep.

Process rules from this session's failures (handover §1.2)

  • Check gh with gh api user -q .login, not by parsing gh auth status — the active account drifts to hexuria, which cannot write here, and status-parsing gave the wrong answer twice.
  • cfg-gated code cannot be verified locally (ring needs a C cross-toolchain); plan a CI round trip.
  • The integration lane is not in the local gate.
  • Never pkill -f "cargo test" — it is not scoped to this repo.

Local gate

fmt ✅ · clippy --workspace --all-targets -D warnings ✅ · panday-gateway ✅ · panday-sdk ✅ (four crates had doc comments edited). mdbook isn't installed here, so the docs CI job is the authority on the book building.

https://claude.ai/code/session_017kFpYDqvz6sKGSkM4YKaRf

A survey of the tree against the docs found that this repo's debt lives almost
entirely in prose. There is not one `TODO`, `FIXME`, `unimplemented!` or
`todo!()` in `crates/` — but several documents contradict each other or the
code, and one of them misled this session into repeating "nothing is
laptop-buildable any more", which was false.
**Documents that disagreed with the code**
- `docs/README.md` — read-order item 0 — still called this "the blueprint and
the seed" with crates "seeded with the core types and traits". The root README
correctly says specification *and* implementation. Newcomers open the wrong
one first.
- `docs/23` Phase 1 counted "event store **PG**" as delivered. The implementors
of `EventStore` are `MemoryStore`, `JsonlStore` and `SqliteStore`, and
`panday-harnessd` holds an `Arc<MemoryStore>`. The PG `session_events` table is
M18.6's sync *sink*. M3.3's WS resume is real; the PG backing never existed.
- `docs/25`'s testing contract stated "Σ tokens per `credential_id` == Σ usage
frames that named it" as an enforced property. `UsageRecord` has no
`credential_id`, so it ranges over nothing. Marked pending that field.
- `docs/16` put the marketplace in phase 4; `docs/23` and `docs/GOAL.md` put it
in phase 6. Someone finishing phase 4 would think they owed a storefront.
**"Postgres is M3.5" — a wrong pointer in seven places**
M3.5 is ledger-rebuild-from-log; the PG lane was M2.3. Both are ✅, so a reader
chasing the pointer concluded the work had shipped. Four were in docs, three more
in code comments the first sweep missed. Two were doubly stale: `docs/20` and
`tenancy.rs` both said "there is no SQL to lint yet" when the lint now walks 49
`sqlx::query` sites and 8 migrations — underselling the milestone rather than
overselling it.
**Three items given numbers**
The count goes 104 → 107 and **no work was added**. These already existed and
were invisible to anyone reading the milestone list:
- **M0.2** was being *cited* in `docs/23` as though defined, with a table of
Phase 2 exit clauses under it, but no bullet existed — so the tracker was
uncountable and unmarkable. Exactly what CLAUDE.md §4 warns about, hiding
behind a number that looked real.
- **M11.10** PG-backed exact cache — specified since docs/11 was written, never
owned.
- **M14.8** egress proxy — without it, a plugin's `net: [host]` declaration is an
all-or-nothing switch rather than an allowlist. Safe today under
`--unshare-net`, but the manifest field reads like a promise.
**Process rules from this session's failures** (handover §1.2)
Check `gh` with `gh api user -q .login`, not by parsing `gh auth status` — the
active account drifts to `hexuria`, which cannot write here, and status-parsing
gave the wrong answer twice. `cfg`-gated code cannot be verified locally (`ring`
needs a C cross-toolchain), so plan a CI round trip. The integration lane is not
in the local gate. Never `pkill -f "cargo test"` — it reaches other repos.
Claude-Session: https://claude.ai/code/session_017kFpYDqvz6sKGSkM4YKaRf
@codeitlikemiley
codeitlikemiley merged commit 7dd4616 into mainAug 22, 2026
6 checks passed
@codeitlikemiley
codeitlikemiley deleted the docs-truth-pass branch August 22, 2026 22:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@codeitlikemiley
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' docs: make the specs stop lying, and number three invisible items by codeitlikemiley · Pull Request #30 · codeitlikemiley/panday · GitHub
Skip to content

docs: make the specs stop lying, and number three invisible items - #30

Merged
codeitlikemiley merged 1 commit into
mainfrom
docs-truth-pass
Aug 22, 2026
Merged

docs: make the specs stop lying, and number three invisible items#30
codeitlikemiley merged 1 commit into
mainfrom
docs-truth-pass

Conversation

@codeitlikemiley

Copy link
Copy Markdown
Owner

Phase 1 of the approved plan. A survey of the tree against the docs found that this repo's debt lives almost entirely in prose — there is not one TODO, FIXME, unimplemented! or todo!() in crates/ — but several documents contradict each other or the code.

One of them misled this session into repeating "nothing is laptop-buildable any more", which was false.

Documents that disagreed with the code

wasnow
docs/README.md (read-order item 0)"the blueprint and the seed", crates "seeded with core types and traits"matches the root README: specification and implementation
docs/23 Phase 1 contentscounts "event store PG" as deliveredno PG EventStore exists — implementors are Memory/Jsonl/Sqlite, panday-harnessd holds an Arc<MemoryStore>, and session_events is M18.6's sync sink
docs/25 testing contractstates a credential_id conservation property as enforcedUsageRecord has no such field; marked pending
docs/16marketplace in phase 4phase 6, matching docs/23 and GOAL.md

"Postgres is M3.5" — wrong in seven places

M3.5 is ledger-rebuild-from-log; the PG lane was M2.3. Both are ✅, so a reader chasing the pointer concluded the work had shipped. Four were in docs; grepping after fixing those turned up three more in code comments.

Two were doubly stale: docs/20 and tenancy.rs both claimed "there is no SQL to lint yet" when the lint now walks 49 sqlx::query sites and 8 migrations — underselling the milestone rather than overselling it.

Three items given numbers: 104 → 107, and no work was added

These already existed and were invisible to anyone reading the milestone list:

  • M0.2 was being cited in docs/23, with a table of Phase 2 exit clauses under it, but no bullet ever existed — the tracker was uncountable and unmarkable. Exactly the failure CLAUDE.md §4 warns about, hiding behind a number that looked real.
  • M11.10 PG-backed exact cache — specified since docs/11 was written, owned by nobody.
  • M14.8 egress proxy — without it a plugin's net: [host] is an all-or-nothing switch, not an allowlist. Safe today under --unshare-net, but the manifest field reads like a promise.

Both count lines now explain the increase, so it doesn't read as scope creep.

Process rules from this session's failures (handover §1.2)

  • Check gh with gh api user -q .login, not by parsing gh auth status — the active account drifts to hexuria, which cannot write here, and status-parsing gave the wrong answer twice.
  • cfg-gated code cannot be verified locally (ring needs a C cross-toolchain); plan a CI round trip.
  • The integration lane is not in the local gate.
  • Never pkill -f "cargo test" — it is not scoped to this repo.

Local gate

fmt ✅ · clippy --workspace --all-targets -D warnings ✅ · panday-gateway ✅ · panday-sdk ✅ (four crates had doc comments edited). mdbook isn't installed here, so the docs CI job is the authority on the book building.

https://claude.ai/code/session_017kFpYDqvz6sKGSkM4YKaRf

A survey of the tree against the docs found that this repo's debt lives almost
entirely in prose. There is not one `TODO`, `FIXME`, `unimplemented!` or
`todo!()` in `crates/` — but several documents contradict each other or the
code, and one of them misled this session into repeating "nothing is
laptop-buildable any more", which was false.
**Documents that disagreed with the code**
- `docs/README.md` — read-order item 0 — still called this "the blueprint and
the seed" with crates "seeded with the core types and traits". The root README
correctly says specification *and* implementation. Newcomers open the wrong
one first.
- `docs/23` Phase 1 counted "event store **PG**" as delivered. The implementors
of `EventStore` are `MemoryStore`, `JsonlStore` and `SqliteStore`, and
`panday-harnessd` holds an `Arc<MemoryStore>`. The PG `session_events` table is
M18.6's sync *sink*. M3.3's WS resume is real; the PG backing never existed.
- `docs/25`'s testing contract stated "Σ tokens per `credential_id` == Σ usage
frames that named it" as an enforced property. `UsageRecord` has no
`credential_id`, so it ranges over nothing. Marked pending that field.
- `docs/16` put the marketplace in phase 4; `docs/23` and `docs/GOAL.md` put it
in phase 6. Someone finishing phase 4 would think they owed a storefront.
**"Postgres is M3.5" — a wrong pointer in seven places**
M3.5 is ledger-rebuild-from-log; the PG lane was M2.3. Both are ✅, so a reader
chasing the pointer concluded the work had shipped. Four were in docs, three more
in code comments the first sweep missed. Two were doubly stale: `docs/20` and
`tenancy.rs` both said "there is no SQL to lint yet" when the lint now walks 49
`sqlx::query` sites and 8 migrations — underselling the milestone rather than
overselling it.
**Three items given numbers**
The count goes 104 → 107 and **no work was added**. These already existed and
were invisible to anyone reading the milestone list:
- **M0.2** was being *cited* in `docs/23` as though defined, with a table of
Phase 2 exit clauses under it, but no bullet existed — so the tracker was
uncountable and unmarkable. Exactly what CLAUDE.md §4 warns about, hiding
behind a number that looked real.
- **M11.10** PG-backed exact cache — specified since docs/11 was written, never
owned.
- **M14.8** egress proxy — without it, a plugin's `net: [host]` declaration is an
all-or-nothing switch rather than an allowlist. Safe today under
`--unshare-net`, but the manifest field reads like a promise.
**Process rules from this session's failures** (handover §1.2)
Check `gh` with `gh api user -q .login`, not by parsing `gh auth status` — the
active account drifts to `hexuria`, which cannot write here, and status-parsing
gave the wrong answer twice. `cfg`-gated code cannot be verified locally (`ring`
needs a C cross-toolchain), so plan a CI round trip. The integration lane is not
in the local gate. Never `pkill -f "cargo test"` — it reaches other repos.
Claude-Session: https://claude.ai/code/session_017kFpYDqvz6sKGSkM4YKaRf
@codeitlikemiley
codeitlikemiley merged commit 7dd4616 into mainAug 22, 2026
6 checks passed
@codeitlikemiley
codeitlikemiley deleted the docs-truth-pass branch August 22, 2026 22:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@codeitlikemiley
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' docs: make the specs stop lying, and number three invisible items by codeitlikemiley · Pull Request #30 · codeitlikemiley/panday · GitHub
Skip to content

docs: make the specs stop lying, and number three invisible items - #30

Merged
codeitlikemiley merged 1 commit into
mainfrom
docs-truth-pass
Aug 22, 2026
Merged

docs: make the specs stop lying, and number three invisible items#30
codeitlikemiley merged 1 commit into
mainfrom
docs-truth-pass

Conversation

@codeitlikemiley

Copy link
Copy Markdown
Owner

Phase 1 of the approved plan. A survey of the tree against the docs found that this repo's debt lives almost entirely in prose — there is not one TODO, FIXME, unimplemented! or todo!() in crates/ — but several documents contradict each other or the code.

One of them misled this session into repeating "nothing is laptop-buildable any more", which was false.

Documents that disagreed with the code

wasnow
docs/README.md (read-order item 0)"the blueprint and the seed", crates "seeded with core types and traits"matches the root README: specification and implementation
docs/23 Phase 1 contentscounts "event store PG" as deliveredno PG EventStore exists — implementors are Memory/Jsonl/Sqlite, panday-harnessd holds an Arc<MemoryStore>, and session_events is M18.6's sync sink
docs/25 testing contractstates a credential_id conservation property as enforcedUsageRecord has no such field; marked pending
docs/16marketplace in phase 4phase 6, matching docs/23 and GOAL.md

"Postgres is M3.5" — wrong in seven places

M3.5 is ledger-rebuild-from-log; the PG lane was M2.3. Both are ✅, so a reader chasing the pointer concluded the work had shipped. Four were in docs; grepping after fixing those turned up three more in code comments.

Two were doubly stale: docs/20 and tenancy.rs both claimed "there is no SQL to lint yet" when the lint now walks 49 sqlx::query sites and 8 migrations — underselling the milestone rather than overselling it.

Three items given numbers: 104 → 107, and no work was added

These already existed and were invisible to anyone reading the milestone list:

  • M0.2 was being cited in docs/23, with a table of Phase 2 exit clauses under it, but no bullet ever existed — the tracker was uncountable and unmarkable. Exactly the failure CLAUDE.md §4 warns about, hiding behind a number that looked real.
  • M11.10 PG-backed exact cache — specified since docs/11 was written, owned by nobody.
  • M14.8 egress proxy — without it a plugin's net: [host] is an all-or-nothing switch, not an allowlist. Safe today under --unshare-net, but the manifest field reads like a promise.

Both count lines now explain the increase, so it doesn't read as scope creep.

Process rules from this session's failures (handover §1.2)

  • Check gh with gh api user -q .login, not by parsing gh auth status — the active account drifts to hexuria, which cannot write here, and status-parsing gave the wrong answer twice.
  • cfg-gated code cannot be verified locally (ring needs a C cross-toolchain); plan a CI round trip.
  • The integration lane is not in the local gate.
  • Never pkill -f "cargo test" — it is not scoped to this repo.

Local gate

fmt ✅ · clippy --workspace --all-targets -D warnings ✅ · panday-gateway ✅ · panday-sdk ✅ (four crates had doc comments edited). mdbook isn't installed here, so the docs CI job is the authority on the book building.

https://claude.ai/code/session_017kFpYDqvz6sKGSkM4YKaRf

A survey of the tree against the docs found that this repo's debt lives almost
entirely in prose. There is not one `TODO`, `FIXME`, `unimplemented!` or
`todo!()` in `crates/` — but several documents contradict each other or the
code, and one of them misled this session into repeating "nothing is
laptop-buildable any more", which was false.
**Documents that disagreed with the code**
- `docs/README.md` — read-order item 0 — still called this "the blueprint and
the seed" with crates "seeded with the core types and traits". The root README
correctly says specification *and* implementation. Newcomers open the wrong
one first.
- `docs/23` Phase 1 counted "event store **PG**" as delivered. The implementors
of `EventStore` are `MemoryStore`, `JsonlStore` and `SqliteStore`, and
`panday-harnessd` holds an `Arc<MemoryStore>`. The PG `session_events` table is
M18.6's sync *sink*. M3.3's WS resume is real; the PG backing never existed.
- `docs/25`'s testing contract stated "Σ tokens per `credential_id` == Σ usage
frames that named it" as an enforced property. `UsageRecord` has no
`credential_id`, so it ranges over nothing. Marked pending that field.
- `docs/16` put the marketplace in phase 4; `docs/23` and `docs/GOAL.md` put it
in phase 6. Someone finishing phase 4 would think they owed a storefront.
**"Postgres is M3.5" — a wrong pointer in seven places**
M3.5 is ledger-rebuild-from-log; the PG lane was M2.3. Both are ✅, so a reader
chasing the pointer concluded the work had shipped. Four were in docs, three more
in code comments the first sweep missed. Two were doubly stale: `docs/20` and
`tenancy.rs` both said "there is no SQL to lint yet" when the lint now walks 49
`sqlx::query` sites and 8 migrations — underselling the milestone rather than
overselling it.
**Three items given numbers**
The count goes 104 → 107 and **no work was added**. These already existed and
were invisible to anyone reading the milestone list:
- **M0.2** was being *cited* in `docs/23` as though defined, with a table of
Phase 2 exit clauses under it, but no bullet existed — so the tracker was
uncountable and unmarkable. Exactly what CLAUDE.md §4 warns about, hiding
behind a number that looked real.
- **M11.10** PG-backed exact cache — specified since docs/11 was written, never
owned.
- **M14.8** egress proxy — without it, a plugin's `net: [host]` declaration is an
all-or-nothing switch rather than an allowlist. Safe today under
`--unshare-net`, but the manifest field reads like a promise.
**Process rules from this session's failures** (handover §1.2)
Check `gh` with `gh api user -q .login`, not by parsing `gh auth status` — the
active account drifts to `hexuria`, which cannot write here, and status-parsing
gave the wrong answer twice. `cfg`-gated code cannot be verified locally (`ring`
needs a C cross-toolchain), so plan a CI round trip. The integration lane is not
in the local gate. Never `pkill -f "cargo test"` — it reaches other repos.
Claude-Session: https://claude.ai/code/session_017kFpYDqvz6sKGSkM4YKaRf
@codeitlikemiley
codeitlikemiley merged commit 7dd4616 into mainAug 22, 2026
6 checks passed
@codeitlikemiley
codeitlikemiley deleted the docs-truth-pass branch August 22, 2026 22:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@codeitlikemiley
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' docs: make the specs stop lying, and number three invisible items by codeitlikemiley · Pull Request #30 · codeitlikemiley/panday · GitHub
Skip to content

docs: make the specs stop lying, and number three invisible items - #30

Merged
codeitlikemiley merged 1 commit into
mainfrom
docs-truth-pass
Aug 22, 2026
Merged

docs: make the specs stop lying, and number three invisible items#30
codeitlikemiley merged 1 commit into
mainfrom
docs-truth-pass

Conversation

@codeitlikemiley

Copy link
Copy Markdown
Owner

Phase 1 of the approved plan. A survey of the tree against the docs found that this repo's debt lives almost entirely in prose — there is not one TODO, FIXME, unimplemented! or todo!() in crates/ — but several documents contradict each other or the code.

One of them misled this session into repeating "nothing is laptop-buildable any more", which was false.

Documents that disagreed with the code

wasnow
docs/README.md (read-order item 0)"the blueprint and the seed", crates "seeded with core types and traits"matches the root README: specification and implementation
docs/23 Phase 1 contentscounts "event store PG" as deliveredno PG EventStore exists — implementors are Memory/Jsonl/Sqlite, panday-harnessd holds an Arc<MemoryStore>, and session_events is M18.6's sync sink
docs/25 testing contractstates a credential_id conservation property as enforcedUsageRecord has no such field; marked pending
docs/16marketplace in phase 4phase 6, matching docs/23 and GOAL.md

"Postgres is M3.5" — wrong in seven places

M3.5 is ledger-rebuild-from-log; the PG lane was M2.3. Both are ✅, so a reader chasing the pointer concluded the work had shipped. Four were in docs; grepping after fixing those turned up three more in code comments.

Two were doubly stale: docs/20 and tenancy.rs both claimed "there is no SQL to lint yet" when the lint now walks 49 sqlx::query sites and 8 migrations — underselling the milestone rather than overselling it.

Three items given numbers: 104 → 107, and no work was added

These already existed and were invisible to anyone reading the milestone list:

  • M0.2 was being cited in docs/23, with a table of Phase 2 exit clauses under it, but no bullet ever existed — the tracker was uncountable and unmarkable. Exactly the failure CLAUDE.md §4 warns about, hiding behind a number that looked real.
  • M11.10 PG-backed exact cache — specified since docs/11 was written, owned by nobody.
  • M14.8 egress proxy — without it a plugin's net: [host] is an all-or-nothing switch, not an allowlist. Safe today under --unshare-net, but the manifest field reads like a promise.

Both count lines now explain the increase, so it doesn't read as scope creep.

Process rules from this session's failures (handover §1.2)

  • Check gh with gh api user -q .login, not by parsing gh auth status — the active account drifts to hexuria, which cannot write here, and status-parsing gave the wrong answer twice.
  • cfg-gated code cannot be verified locally (ring needs a C cross-toolchain); plan a CI round trip.
  • The integration lane is not in the local gate.
  • Never pkill -f "cargo test" — it is not scoped to this repo.

Local gate

fmt ✅ · clippy --workspace --all-targets -D warnings ✅ · panday-gateway ✅ · panday-sdk ✅ (four crates had doc comments edited). mdbook isn't installed here, so the docs CI job is the authority on the book building.

https://claude.ai/code/session_017kFpYDqvz6sKGSkM4YKaRf

A survey of the tree against the docs found that this repo's debt lives almost
entirely in prose. There is not one `TODO`, `FIXME`, `unimplemented!` or
`todo!()` in `crates/` — but several documents contradict each other or the
code, and one of them misled this session into repeating "nothing is
laptop-buildable any more", which was false.
**Documents that disagreed with the code**
- `docs/README.md` — read-order item 0 — still called this "the blueprint and
the seed" with crates "seeded with the core types and traits". The root README
correctly says specification *and* implementation. Newcomers open the wrong
one first.
- `docs/23` Phase 1 counted "event store **PG**" as delivered. The implementors
of `EventStore` are `MemoryStore`, `JsonlStore` and `SqliteStore`, and
`panday-harnessd` holds an `Arc<MemoryStore>`. The PG `session_events` table is
M18.6's sync *sink*. M3.3's WS resume is real; the PG backing never existed.
- `docs/25`'s testing contract stated "Σ tokens per `credential_id` == Σ usage
frames that named it" as an enforced property. `UsageRecord` has no
`credential_id`, so it ranges over nothing. Marked pending that field.
- `docs/16` put the marketplace in phase 4; `docs/23` and `docs/GOAL.md` put it
in phase 6. Someone finishing phase 4 would think they owed a storefront.
**"Postgres is M3.5" — a wrong pointer in seven places**
M3.5 is ledger-rebuild-from-log; the PG lane was M2.3. Both are ✅, so a reader
chasing the pointer concluded the work had shipped. Four were in docs, three more
in code comments the first sweep missed. Two were doubly stale: `docs/20` and
`tenancy.rs` both said "there is no SQL to lint yet" when the lint now walks 49
`sqlx::query` sites and 8 migrations — underselling the milestone rather than
overselling it.
**Three items given numbers**
The count goes 104 → 107 and **no work was added**. These already existed and
were invisible to anyone reading the milestone list:
- **M0.2** was being *cited* in `docs/23` as though defined, with a table of
Phase 2 exit clauses under it, but no bullet existed — so the tracker was
uncountable and unmarkable. Exactly what CLAUDE.md §4 warns about, hiding
behind a number that looked real.
- **M11.10** PG-backed exact cache — specified since docs/11 was written, never
owned.
- **M14.8** egress proxy — without it, a plugin's `net: [host]` declaration is an
all-or-nothing switch rather than an allowlist. Safe today under
`--unshare-net`, but the manifest field reads like a promise.
**Process rules from this session's failures** (handover §1.2)
Check `gh` with `gh api user -q .login`, not by parsing `gh auth status` — the
active account drifts to `hexuria`, which cannot write here, and status-parsing
gave the wrong answer twice. `cfg`-gated code cannot be verified locally (`ring`
needs a C cross-toolchain), so plan a CI round trip. The integration lane is not
in the local gate. Never `pkill -f "cargo test"` — it reaches other repos.
Claude-Session: https://claude.ai/code/session_017kFpYDqvz6sKGSkM4YKaRf
@codeitlikemiley
codeitlikemiley merged commit 7dd4616 into mainAug 22, 2026
6 checks passed
@codeitlikemiley
codeitlikemiley deleted the docs-truth-pass branch August 22, 2026 22:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@codeitlikemiley
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' docs: make the specs stop lying, and number three invisible items by codeitlikemiley · Pull Request #30 · codeitlikemiley/panday · GitHub
Skip to content

docs: make the specs stop lying, and number three invisible items - #30

Merged
codeitlikemiley merged 1 commit into
mainfrom
docs-truth-pass
Aug 22, 2026
Merged

docs: make the specs stop lying, and number three invisible items#30
codeitlikemiley merged 1 commit into
mainfrom
docs-truth-pass

Conversation

@codeitlikemiley

Copy link
Copy Markdown
Owner

Phase 1 of the approved plan. A survey of the tree against the docs found that this repo's debt lives almost entirely in prose — there is not one TODO, FIXME, unimplemented! or todo!() in crates/ — but several documents contradict each other or the code.

One of them misled this session into repeating "nothing is laptop-buildable any more", which was false.

Documents that disagreed with the code

wasnow
docs/README.md (read-order item 0)"the blueprint and the seed", crates "seeded with core types and traits"matches the root README: specification and implementation
docs/23 Phase 1 contentscounts "event store PG" as deliveredno PG EventStore exists — implementors are Memory/Jsonl/Sqlite, panday-harnessd holds an Arc<MemoryStore>, and session_events is M18.6's sync sink
docs/25 testing contractstates a credential_id conservation property as enforcedUsageRecord has no such field; marked pending
docs/16marketplace in phase 4phase 6, matching docs/23 and GOAL.md

"Postgres is M3.5" — wrong in seven places

M3.5 is ledger-rebuild-from-log; the PG lane was M2.3. Both are ✅, so a reader chasing the pointer concluded the work had shipped. Four were in docs; grepping after fixing those turned up three more in code comments.

Two were doubly stale: docs/20 and tenancy.rs both claimed "there is no SQL to lint yet" when the lint now walks 49 sqlx::query sites and 8 migrations — underselling the milestone rather than overselling it.

Three items given numbers: 104 → 107, and no work was added

These already existed and were invisible to anyone reading the milestone list:

  • M0.2 was being cited in docs/23, with a table of Phase 2 exit clauses under it, but no bullet ever existed — the tracker was uncountable and unmarkable. Exactly the failure CLAUDE.md §4 warns about, hiding behind a number that looked real.
  • M11.10 PG-backed exact cache — specified since docs/11 was written, owned by nobody.
  • M14.8 egress proxy — without it a plugin's net: [host] is an all-or-nothing switch, not an allowlist. Safe today under --unshare-net, but the manifest field reads like a promise.

Both count lines now explain the increase, so it doesn't read as scope creep.

Process rules from this session's failures (handover §1.2)

  • Check gh with gh api user -q .login, not by parsing gh auth status — the active account drifts to hexuria, which cannot write here, and status-parsing gave the wrong answer twice.
  • cfg-gated code cannot be verified locally (ring needs a C cross-toolchain); plan a CI round trip.
  • The integration lane is not in the local gate.
  • Never pkill -f "cargo test" — it is not scoped to this repo.

Local gate

fmt ✅ · clippy --workspace --all-targets -D warnings ✅ · panday-gateway ✅ · panday-sdk ✅ (four crates had doc comments edited). mdbook isn't installed here, so the docs CI job is the authority on the book building.

https://claude.ai/code/session_017kFpYDqvz6sKGSkM4YKaRf

A survey of the tree against the docs found that this repo's debt lives almost
entirely in prose. There is not one `TODO`, `FIXME`, `unimplemented!` or
`todo!()` in `crates/` — but several documents contradict each other or the
code, and one of them misled this session into repeating "nothing is
laptop-buildable any more", which was false.
**Documents that disagreed with the code**
- `docs/README.md` — read-order item 0 — still called this "the blueprint and
the seed" with crates "seeded with the core types and traits". The root README
correctly says specification *and* implementation. Newcomers open the wrong
one first.
- `docs/23` Phase 1 counted "event store **PG**" as delivered. The implementors
of `EventStore` are `MemoryStore`, `JsonlStore` and `SqliteStore`, and
`panday-harnessd` holds an `Arc<MemoryStore>`. The PG `session_events` table is
M18.6's sync *sink*. M3.3's WS resume is real; the PG backing never existed.
- `docs/25`'s testing contract stated "Σ tokens per `credential_id` == Σ usage
frames that named it" as an enforced property. `UsageRecord` has no
`credential_id`, so it ranges over nothing. Marked pending that field.
- `docs/16` put the marketplace in phase 4; `docs/23` and `docs/GOAL.md` put it
in phase 6. Someone finishing phase 4 would think they owed a storefront.
**"Postgres is M3.5" — a wrong pointer in seven places**
M3.5 is ledger-rebuild-from-log; the PG lane was M2.3. Both are ✅, so a reader
chasing the pointer concluded the work had shipped. Four were in docs, three more
in code comments the first sweep missed. Two were doubly stale: `docs/20` and
`tenancy.rs` both said "there is no SQL to lint yet" when the lint now walks 49
`sqlx::query` sites and 8 migrations — underselling the milestone rather than
overselling it.
**Three items given numbers**
The count goes 104 → 107 and **no work was added**. These already existed and
were invisible to anyone reading the milestone list:
- **M0.2** was being *cited* in `docs/23` as though defined, with a table of
Phase 2 exit clauses under it, but no bullet existed — so the tracker was
uncountable and unmarkable. Exactly what CLAUDE.md §4 warns about, hiding
behind a number that looked real.
- **M11.10** PG-backed exact cache — specified since docs/11 was written, never
owned.
- **M14.8** egress proxy — without it, a plugin's `net: [host]` declaration is an
all-or-nothing switch rather than an allowlist. Safe today under
`--unshare-net`, but the manifest field reads like a promise.
**Process rules from this session's failures** (handover §1.2)
Check `gh` with `gh api user -q .login`, not by parsing `gh auth status` — the
active account drifts to `hexuria`, which cannot write here, and status-parsing
gave the wrong answer twice. `cfg`-gated code cannot be verified locally (`ring`
needs a C cross-toolchain), so plan a CI round trip. The integration lane is not
in the local gate. Never `pkill -f "cargo test"` — it reaches other repos.
Claude-Session: https://claude.ai/code/session_017kFpYDqvz6sKGSkM4YKaRf
@codeitlikemiley
codeitlikemiley merged commit 7dd4616 into mainAug 22, 2026
6 checks passed
@codeitlikemiley
codeitlikemiley deleted the docs-truth-pass branch August 22, 2026 22:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@codeitlikemiley
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); docs: make the specs stop lying, and number three invisible items by codeitlikemiley · Pull Request #30 · codeitlikemiley/panday · GitHub
Skip to content

docs: make the specs stop lying, and number three invisible items - #30

Merged
codeitlikemiley merged 1 commit into
mainfrom
docs-truth-pass
Aug 22, 2026
Merged

docs: make the specs stop lying, and number three invisible items#30
codeitlikemiley merged 1 commit into
mainfrom
docs-truth-pass

Conversation

@codeitlikemiley

Copy link
Copy Markdown
Owner

Phase 1 of the approved plan. A survey of the tree against the docs found that this repo's debt lives almost entirely in prose — there is not one TODO, FIXME, unimplemented! or todo!() in crates/ — but several documents contradict each other or the code.

One of them misled this session into repeating "nothing is laptop-buildable any more", which was false.

Documents that disagreed with the code

wasnow
docs/README.md (read-order item 0)"the blueprint and the seed", crates "seeded with core types and traits"matches the root README: specification and implementation
docs/23 Phase 1 contentscounts "event store PG" as deliveredno PG EventStore exists — implementors are Memory/Jsonl/Sqlite, panday-harnessd holds an Arc<MemoryStore>, and session_events is M18.6's sync sink
docs/25 testing contractstates a credential_id conservation property as enforcedUsageRecord has no such field; marked pending
docs/16marketplace in phase 4phase 6, matching docs/23 and GOAL.md

"Postgres is M3.5" — wrong in seven places

M3.5 is ledger-rebuild-from-log; the PG lane was M2.3. Both are ✅, so a reader chasing the pointer concluded the work had shipped. Four were in docs; grepping after fixing those turned up three more in code comments.

Two were doubly stale: docs/20 and tenancy.rs both claimed "there is no SQL to lint yet" when the lint now walks 49 sqlx::query sites and 8 migrations — underselling the milestone rather than overselling it.

Three items given numbers: 104 → 107, and no work was added

These already existed and were invisible to anyone reading the milestone list:

  • M0.2 was being cited in docs/23, with a table of Phase 2 exit clauses under it, but no bullet ever existed — the tracker was uncountable and unmarkable. Exactly the failure CLAUDE.md §4 warns about, hiding behind a number that looked real.
  • M11.10 PG-backed exact cache — specified since docs/11 was written, owned by nobody.
  • M14.8 egress proxy — without it a plugin's net: [host] is an all-or-nothing switch, not an allowlist. Safe today under --unshare-net, but the manifest field reads like a promise.

Both count lines now explain the increase, so it doesn't read as scope creep.

Process rules from this session's failures (handover §1.2)

  • Check gh with gh api user -q .login, not by parsing gh auth status — the active account drifts to hexuria, which cannot write here, and status-parsing gave the wrong answer twice.
  • cfg-gated code cannot be verified locally (ring needs a C cross-toolchain); plan a CI round trip.
  • The integration lane is not in the local gate.
  • Never pkill -f "cargo test" — it is not scoped to this repo.

Local gate

fmt ✅ · clippy --workspace --all-targets -D warnings ✅ · panday-gateway ✅ · panday-sdk ✅ (four crates had doc comments edited). mdbook isn't installed here, so the docs CI job is the authority on the book building.

https://claude.ai/code/session_017kFpYDqvz6sKGSkM4YKaRf

A survey of the tree against the docs found that this repo's debt lives almost
entirely in prose. There is not one `TODO`, `FIXME`, `unimplemented!` or
`todo!()` in `crates/` — but several documents contradict each other or the
code, and one of them misled this session into repeating "nothing is
laptop-buildable any more", which was false.
**Documents that disagreed with the code**
- `docs/README.md` — read-order item 0 — still called this "the blueprint and
the seed" with crates "seeded with the core types and traits". The root README
correctly says specification *and* implementation. Newcomers open the wrong
one first.
- `docs/23` Phase 1 counted "event store **PG**" as delivered. The implementors
of `EventStore` are `MemoryStore`, `JsonlStore` and `SqliteStore`, and
`panday-harnessd` holds an `Arc<MemoryStore>`. The PG `session_events` table is
M18.6's sync *sink*. M3.3's WS resume is real; the PG backing never existed.
- `docs/25`'s testing contract stated "Σ tokens per `credential_id` == Σ usage
frames that named it" as an enforced property. `UsageRecord` has no
`credential_id`, so it ranges over nothing. Marked pending that field.
- `docs/16` put the marketplace in phase 4; `docs/23` and `docs/GOAL.md` put it
in phase 6. Someone finishing phase 4 would think they owed a storefront.
**"Postgres is M3.5" — a wrong pointer in seven places**
M3.5 is ledger-rebuild-from-log; the PG lane was M2.3. Both are ✅, so a reader
chasing the pointer concluded the work had shipped. Four were in docs, three more
in code comments the first sweep missed. Two were doubly stale: `docs/20` and
`tenancy.rs` both said "there is no SQL to lint yet" when the lint now walks 49
`sqlx::query` sites and 8 migrations — underselling the milestone rather than
overselling it.
**Three items given numbers**
The count goes 104 → 107 and **no work was added**. These already existed and
were invisible to anyone reading the milestone list:
- **M0.2** was being *cited* in `docs/23` as though defined, with a table of
Phase 2 exit clauses under it, but no bullet existed — so the tracker was
uncountable and unmarkable. Exactly what CLAUDE.md §4 warns about, hiding
behind a number that looked real.
- **M11.10** PG-backed exact cache — specified since docs/11 was written, never
owned.
- **M14.8** egress proxy — without it, a plugin's `net: [host]` declaration is an
all-or-nothing switch rather than an allowlist. Safe today under
`--unshare-net`, but the manifest field reads like a promise.
**Process rules from this session's failures** (handover §1.2)
Check `gh` with `gh api user -q .login`, not by parsing `gh auth status` — the
active account drifts to `hexuria`, which cannot write here, and status-parsing
gave the wrong answer twice. `cfg`-gated code cannot be verified locally (`ring`
needs a C cross-toolchain), so plan a CI round trip. The integration lane is not
in the local gate. Never `pkill -f "cargo test"` — it reaches other repos.
Claude-Session: https://claude.ai/code/session_017kFpYDqvz6sKGSkM4YKaRf
@codeitlikemiley
codeitlikemiley merged commit 7dd4616 into mainAug 22, 2026
6 checks passed
@codeitlikemiley
codeitlikemiley deleted the docs-truth-pass branch August 22, 2026 22:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@codeitlikemiley