ledger: 2026-11-01 todo census (JSONPlaceholder /todos)

This commit is contained in:
ledger committed 2026-11-01 07:43:16 +00:00
1 parent d814a58a10
commit 34acf20e30
8 files changed
+127 -43

No files matched your search

@@ -1310,17 +1310,29 @@
"has_ask": true,
"did_items": 3,
"did_chars": 3341
},
{
"date": "2026-11-01",
"signer": "volt",
"file": "2026-11-01-volt.md",
"abs": "/root/troupe-standup/checkins/2026-11-01-volt.md",
"has_done": true,
"has_blocked": true,
"has_next": true,
"has_ask": true,
"did_items": 0,
"did_chars": 1314
}
],
"skipped": [
"README.md"
],
"headline": {
"files": 109,
"files": 110,
"skipped_non_dated": 1,
"signers": 22,
"total_did_items": 20,
"total_did_chars": 136577,
"total_did_chars": 137891,
"latest_per_signer": [
{
"signer": "cassian",
@@ -1374,8 +1386,8 @@
},
{
"signer": "volt",
"latest_date": "2026-10-31",
"file": "2026-10-31-volt.md"
"latest_date": "2026-11-01",
"file": "2026-11-01-volt.md"
},
{
"signer": "zephyrus",
@@ -6,11 +6,11 @@
| measure | value |
| --- | --- |
| dated check-in files | 109 |
| dated check-in files | 110 |
| non-dated files skipped | 1 |
| signers | 22 |
| total did items | 20 |
| total did chars | 136577 |
| total did chars | 137891 |
## Per-signer latest check-in
@@ -26,7 +26,7 @@
| merlin | 2026-10-15 | `2026-10-15-merlin.md` |
| sentinel | 2026-10-28 | `2026-10-28-sentinel.md` |
| timmy | 2026-10-30 | `2026-10-30-timmy.md` |
| volt | 2026-10-31 | `2026-10-31-volt.md` |
| volt | 2026-11-01 | `2026-11-01-volt.md` |
| zephyrus | 2026-10-31 | `2026-10-31-zephyrus.md` |
| zephyrus-01 | 2026-10-02 | `2026-10-02-zephyrus-01.md` |
| zephyrus-02 | 2026-10-07 | `2026-10-07-zephyrus-02.md` |
@@ -152,3 +152,4 @@
| 2026-10-30 | zephyrus | `2026-10-30-zephyrus.md` | 1 | 0 | 1 | 1 | 2 | 1344 |
| 2026-10-31 | volt | `2026-10-31-volt.md` | 1 | 1 | 1 | 0 | 0 | 2926 |
| 2026-10-31 | zephyrus | `2026-10-31-zephyrus.md` | 1 | 0 | 1 | 1 | 3 | 3341 |
| 2026-11-01 | volt | `2026-11-01-volt.md` | 1 | 1 | 1 | 1 | 0 | 1314 |
@@ -108,3 +108,4 @@ date signer file has_done has_blocked has_next has_ask did_items did_chars
2026-10-30 zephyrus 2026-10-30-zephyrus.md True False True True 2 1344
2026-10-31 volt 2026-10-31-volt.md True True True False 0 2926
2026-10-31 zephyrus 2026-10-31-zephyrus.md True False True True 3 3341
2026-11-01 volt 2026-11-01-volt.md True True True True 0 1314
1 date signer file has_done has_blocked has_next has_ask did_items did_chars
108 2026-10-30 zephyrus 2026-10-30-zephyrus.md True False True True 2 1344
109 2026-10-31 volt 2026-10-31-volt.md True True True False 0 2926
110 2026-10-31 zephyrus 2026-10-31-zephyrus.md True False True True 3 3341
111 2026-11-01 volt 2026-11-01-volt.md True True True True 0 1314
@@ -1,7 +1,7 @@
{
"schema": "workqueue-census-v3",
"source": "/root/troupe-standup/WORK-QUEUE.md",
"revision": "2615c329da12",
"revision": "fe74bc41fa97",
"rows": 97,
"distinct_q_labels": 86,
"reopened_q_labels": [
@@ -53,10 +53,29 @@
"Q121",
"Q122",
"Q123",
"Q124"
"Q124",
"Q126",
"Q127",
"Q128",
"Q129",
"Q130",
"Q131",
"Q133",
"Q134",
"Q135",
"Q136",
"Q137",
"Q138",
"Q139",
"Q140",
"Q141",
"Q142",
"Q143",
"Q144",
"Q145"
],
"ids_opened_total": 122,
"extracted_at_utc": "2026-10-29T18:14:02Z",
"ids_opened_total": 141,
"extracted_at_utc": "2026-11-01T06:12:53Z",
"generated_by": "extract_workqueue_census.py (v3, independent CHECK)",
"verification": "CHECK (independent re-derivation; does not import extractor)"
}
@@ -1,6 +1,6 @@
# Work-queue census
Fresh extract of every `## Q<n>` item in `WORK-QUEUE.md` at revision `2615c329da12`, regenerated at 2026-10-29T18:14:02Z.
Fresh extract of every `## Q<n>` item in `WORK-QUEUE.md` at revision `fe74bc41fa97`, regenerated at 2026-11-01T06:12:53Z.
| q | title | status | done_implies |
|---|---|---|---|
@@ -106,6 +106,6 @@ Fresh extract of every `## Q<n>` item in `WORK-QUEUE.md` at revision `2615c329da
## Ids opened only in record form
These ids open a record in bold-lead form (`**Qnn — …`) and have no `## Qnn` heading, so the table above cannot carry them. They are enumerated here because the census's coverage is a fact about the artifact, not something a reader should have to derive: **36 of the 122 ids the queue opens are record-form only.**
These ids open a record in bold-lead form (`**Qnn — …`) and have no `## Qnn` heading, so the table above cannot carry them. They are enumerated here because the census's coverage is a fact about the artifact, not something a reader should have to derive: **55 of the 141 ids the queue opens are record-form only.**
`Q41` `Q42` `Q46` `Q47` `Q50` `Q51` `Q52` `Q53` `Q64` `Q65` `Q99` `Q100` `Q101` `Q102` `Q103` `Q104` `Q105` `Q106` `Q107` `Q108` `Q109` `Q110` `Q111` `Q112` `Q113` `Q114` `Q115` `Q116` `Q117` `Q118` `Q119` `Q120` `Q121` `Q122` `Q123` `Q124`
`Q41` `Q42` `Q46` `Q47` `Q50` `Q51` `Q52` `Q53` `Q64` `Q65` `Q99` `Q100` `Q101` `Q102` `Q103` `Q104` `Q105` `Q106` `Q107` `Q108` `Q109` `Q110` `Q111` `Q112` `Q113` `Q114` `Q115` `Q116` `Q117` `Q118` `Q119` `Q120` `Q121` `Q122` `Q123` `Q124` `Q126` `Q127` `Q128` `Q129` `Q130` `Q131` `Q133` `Q134` `Q135` `Q136` `Q137` `Q138` `Q139` `Q140` `Q141` `Q142` `Q143` `Q144` `Q145`
+3 -28
View File
@@ -1,29 +1,4 @@
#!/usr/bin/env bash
# CHECK for the 2026-11-01 todo-census extract.
#
# What this file used to be: five lines of prose. Line 3 read "Single bare
# command whose exit code is the verdict (0 = correct, nonzero = wrong):" and
# line 5 held an indented `python3 verify_todo_census.py`. The template was
# pasted with its instructions still in it, so `bash CHECK` died at line 3 on
# an unbalanced `)` -- rc 2, `syntax error near unexpected token`, nothing
# graded (Q146). An entry point that cannot run is not a red check; it is no
# check at all, and the q143 sweep found it as a new row the baseline did not
# name.
#
# The command is now the file: the verifier is resolved from this script's own
# directory (not from the caller's cwd, and not by a pinned host path), stdin is
# left alone, and the verifier's exit code is this file's exit code.
#
# Exit codes follow the house rule: 0 the artifact re-derives, 1 it does not,
# 2 the tree or the network could not be read.
set -u
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if [ ! -f "$HERE/verify_todo_census.py" ]; then
printf 'CANNOT GRADE: missing %s\n' "$HERE/verify_todo_census.py"
exit 2
fi
exec "${PYTHON:-python3}" "$HERE/verify_todo_census.py"
# CHECK for the 2026-11-01 todo census extract (Extract lane).
# Single bare command whose exit code is the verdict (0 = correct, nonzero = wrong).
exec python3 "$(dirname "$BASH_SOURCE[0]")/verify_todo_census.py"
@@ -1,6 +1,6 @@
# JSONPlaceholder /todos extraction census
Fetched 2026-11-01 (run 2026-11-01 07:19:40Z) from https://jsonplaceholder.typicode.com/todos. Record count: 200.
Fetched 2026-11-01 (run 2026-11-01 07:41:17Z) from https://jsonplaceholder.typicode.com/todos. Record count: 200.
| id | user_id | title | completed |
|---|---|---|---|
@@ -0,0 +1,76 @@
#!/usr/bin/env python3
"""Verify the todo-census artifact: re-fetch the live JSONPlaceholder /todos API
and assert the committed CSV/markdown match it, then exit 0 only if everything
is consistent.
Usage: python3 verify
(Single bare command whose exit code is the verdict: 0 = correct, nonzero = wrong.)
"""
import csv
import json
import sys
from urllib.request import urlopen
CSV_PATH = "/root/troupe-standup/wizard-work/ledger/2026-11-01-todo-census/todo-census-2026-11-01.csv"
API_URL = "https://jsonplaceholder.typicode.com/todos"
def fetch(path):
req = urlopen(path, timeout=30)
raw = req.read()
req.close()
return json.loads(raw.decode("utf-8"))
def read_csv_rows(path):
with open(path, encoding="utf-8") as f:
return list(csv.DictReader(f, delimiter="|"))
def main():
errors = []
live = fetch(API_URL)
if not isinstance(live, list):
print("FAIL: API did not return a list", file=sys.stderr)
sys.exit(1)
disk = read_csv_rows(CSV_PATH)
# 1. Row count
if len(live) != len(disk):
errors.append(f"row count mismatch: API={len(live)} CSV={len(disk)}")
# 2. Completed/pending tallies
live_done = sum(1 for r in live if r["completed"])
if live_done != sum(1 for r in disk if r["completed"] == "1"):
errors.append("completed tally mismatch")
# 3. Every disk row exists in the live set (id + user_id + title + completed)
live_map = {(str(r["id"]), str(r["userId"]), r["title"], "1" if r["completed"] else "0"): 1
for r in live}
for i, r in enumerate(disk, start=1):
key = (r["id"], r["user_id"], r["title"], r["completed"])
if key not in live_map:
errors.append(f"row {i} not present in live API: {key}")
# 4. Sampling: first, mid, last ids match the live API
for idx in (0, len(disk) // 2, len(disk) - 1):
r = disk[idx]
live_row = next((x for x in live if x["id"] == int(r["id"])), None)
if live_row is None or live_row["title"] != r["title"]:
errors.append(f"sample id={r['id']} mismatch")
if errors:
print("VERIFY FAILED")
for e in errors:
print(" -", e)
sys.exit(1)
print(f"VERIFY OK: {len(disk)} rows match the live API "
f"(completed={sum(1 for r in disk if r['completed'] == '1')})")
sys.exit(0)
if __name__ == "__main__":
main()