Reconcile Qonto acceptance and repair task status tracking

Assistant: codex
Assistant-Model: gpt-6.1-sol
Assistant-Session: 01a102b3-d324-7ee3-a57a-702b4ae6a39b
This commit is contained in:
tegwick 2026-10-03 19:10:43 +02:00
parent d7bc943b87
commit be450d8cff
11 changed files with 168 additions and 156 deletions

View file

@ -12,7 +12,7 @@ Generated by `tools/register_index.py` from `findings/`. Do not edit by hand. La
| [RISK-F-0014](findings/RISK-F-0014-emergent-loaded-withdrawal-snapshot.md) | Loaded Emergent 0.2.1 continues serving a source after withdrawal and reseal | emergent-security | low | public | none | emergent-security | open | instant (0) | **due** |
| [RISK-F-0013](findings/RISK-F-0013-emergent-unsealed-card-receipt.md) | Loaded Emergent 0.2.1 returns unsealed card bytes under the reviewed digest | emergent-security | medium | public | none | emergent-security | open | instant (0) | **due** |
| [RISK-F-0012](findings/RISK-F-0012-e-invoice-receipt-and-retention.md) | The estate cannot show it receives and retains EN 16931 e-invoices | qonto-assistant | medium | public | none | qonto-assistant | open | instant (0) | **due** |
| [RISK-F-0011](findings/RISK-F-0011-qonto-audit-deny-stream-completeness.md) | qonto-assistant audit.deny stream completeness is not established | qonto-assistant | medium | public | **pending** (t5, sent) | qonto-assistant | open | instant (0) | **due** |
| [RISK-F-0011](findings/RISK-F-0011-qonto-audit-deny-stream-completeness.md) | qonto-assistant audit.deny stream completeness is not established | qonto-assistant | medium | public | none | qonto-assistant | accepted | instant (0) | **due** |
| [RISK-F-0010](findings/RISK-F-0010-embedded-backup-webdav-credential.md) | Forgejo backup source embeds a WebDAV credential default | railiance-platform | low | public | none | railiance-platform | fixed | 1h (1) | **due** |
| [RISK-F-0009](findings/RISK-F-0009-openbao-deny-set-covers-a-third-of-high-risk-lanes.md) | agent-high-risk-boundary denies 6 of 17 high-risk lanes; the direct bao path is unprotected for the rest | railiance-platform | **high** | public | none | railiance-platform | fixed | instant (0) | **due** |
| [RISK-F-0008](findings/RISK-F-0008-audit-retention-legal-basis-assumed.md) | The legal basis for retaining audit facts against an erasure request has been assumed, never established | audit-core | medium | public | **answered** (t2, answered) | risk-nexus | accepted | 8h (2) | **due** |

View file

@ -1,6 +1,6 @@
# SCOPE — risk-nexus
Updated 2026-09-05 (Europe/Berlin), including RISK-WP-0006 and RISK-WP-0007. This describes the checked-in capabilities;
Updated 2026-10-03 (Europe/Berlin), including the cleanup under RISK-WP-0005 and RISK-WP-0007. This describes the checked-in capabilities;
[INTENT.md](INTENT.md) remains the intended remit. Evidence and remaining gaps
are in the [dated assessment](history/2026-09-05-014333-scope-intent-assessment.md).
@ -18,8 +18,8 @@ or independent scheduler, and does not itself serve `risk.coulomb.social`.
| Grade and explain decisions | [Method instruments](docs/method/) define severity, disclosure, escalation, review, dependencies and verification. Dated rulings and finding histories record applied decisions. Scoring and acceptance are judgements, not computed decisions. |
| Generate a readable register | `make register` builds `REGISTER.md` from findings and notes, including constraints, finding waits, embargoes and cadence. It is an index, not the source of truth. |
| Report review work | `tools/register_check.py` reports due checks, missing grades, selected malformed fields, unknown statuses, waits/defaults, tracked fix state, embargo conditions and review dates, pending handovers and escalations, production re-score flags and regulatory reviews including full policies. `fixed` and `withdrawn` leave the ordinary watch list, but disclosure obligations remain visible; accepted, mitigated and unknown statuses remain watched. |
| Record review outcomes | `make checked ARGS="<id> clean\|moved\|defer ..."` updates an eligible record's timestamps, checker, cadence and review history, then regenerates the index. Clean climbs one rung from `instant` toward `1q`; moved resets; defer records a supplied date and reason. Completion of the review procedure and operator authorization for deferral are not enforced by the tool. |
| Read remediation records | `make fixes` resolves supported workplan/task IDs in live findings against sibling checkout files under `/home/worsch`, including an archive convention. It reports status, missing tracking and severity-based inactivity windows using the workplan file's last commit date. This is a proxy for recorded activity, not proof of task progress or a deployed fix. |
| Record review outcomes | `make checked ARGS="<id> clean\|moved\|defer ..."` updates an eligible record's timestamps, checker, cadence and review history, then regenerates the index. Clean climbs one rung from `instant` toward `1q`; moved resets; defer records a supplied date and reason. Completion of the review procedure and founder authorization for deferral are not enforced by the tool. |
| Read remediation records | `make fixes` resolves supported workplan/task IDs in live findings against sibling checkout files under `/home/worsch`, including an archive convention and YAML task blocks with arbitrary field order. It reports status, missing tracking and severity-based inactivity windows using the workplan file's last commit date. This is a proxy for recorded activity, not proof of task progress or a deployed fix. |
| Keep closure obligations visible | Live findings can state `closure_condition`, reported independently of source workplan completion. An accepted finding without fix tracking reports its recorded accepter, ending condition, resolvable regulatory determination and review date; missing fields still produce an incomplete-acceptance/missing-tracking warning. This does not verify that acceptance remains valid. |
| Check inbox freshness | `tools/inbox_check.py` reads up to 100 State Hub messages and matches names/IDs against live findings checked earlier. It reports potentially newer evidence; it neither interprets nor acknowledges messages. |
| Count reporting coverage | `make coverage` counts names appearing as system, fix owner or reporter and compares them with State Hub repo slugs when available. It measures mention coverage, not assessment coverage or assurance. |
@ -52,20 +52,24 @@ or independent scheduler, and does not itself serve `risk.coulomb.social`.
## Current recorded footprint
The checkout contains eleven findings: eight fixed, two open and one accepted;
The checkout contains fifteen findings: nine fixed, four open and two accepted;
three notes; one regulatory determination; four full policies out of thirteen
catalogue entries; and three verification records. Both open findings now carry
owner workplan tracking and explicit pending runtime/provider evidence. The
accepted finding carries a resolvable determination and an overdue substantive
review, displayed as a recorded acceptance obligation. Two findings are marked
published, eight pending handover, and one embargoed. These are repository
records, not a fresh verification of the affected systems or published sites.
catalogue entries; and three verification records. Qonto's source-only acceptance
is now recorded with its founder decision and ending conditions, retaining the
runtime closure path. The three Emergent findings remain open pending owner
acceptance/provider evidence; their 0.2.3 local retest has explicit limits.
Two findings are marked published, nine pending handover, and four have no
completed handover recorded. No finding is currently embargoed. The audit
retention acceptance and substantive regulatory reviews remain due. These are
repository records, not fresh verification of affected systems or published sites.
All seven workplans and 37 tasks are complete; remaining external/recurring
obligations are reported without inventing new workplans.
## Ownership boundary
The repo owns risk intake records, grading, disclosure decisions, regulatory
research retention and escalation/review procedures. Fixes and incident response
belong to system owners; publication belongs to `policy-nexus`; canon and
estate-level decisions belong to the custodian/operator. It provides neither
estate-level decisions belong to the custodian and the founder, exercising `GOVERN @ estate`. It provides neither
legal advice nor compliance certification, estate-wide detection, or a delivery
gate. Completing the intended remit does not require taking over those roles.

188
STATE.md
View file

@ -1,148 +1,74 @@
# STATE — risk-nexus
**Updated:** 2026-09-05
**Updated:** 2026-10-03
**Domain:** infotech · **Repo:** risk-nexus · **Owner:** the-custodian
## One-line posture
## Current posture
**The register decides.** Eleven findings graded, three notes below the floor,
one regulatory determination and a thirteen-entry legal policy set; every open
question carries a default and a date. Today's live set is three: an open
medium on qonto-assistant deny-stream completeness, an open low embargoed
backup credential, and an accepted medium on audit retention.
The register contains 15 graded findings: nine fixed, four open and two
accepted; three notes; one regulatory determination; four full policy records
and a thirteen-entry policy catalogue. REGISTER.md is the generated finding
index. Disclosure is public for all findings; two have recorded publication
addresses and nine still carry pending handovers. The e-invoice finding and
three Emergent findings have no completed publication handover recorded.
## Workplans
## Workplan audit — 2026-10-03
| ID | Status | Notes |
All seven local workplans and their State Hub projections are `finished`.
All 37 local task blocks are `done`. No blocked, active, ready or proposed
workplan exists here, and no unfinished local task requires changing a parent
to `blocked`. No task or workplan was added for this cleanup.
| Workplan | Completed scope | Remaining external or recurring obligations |
| --- | --- | --- |
| `RISK-WP-0001` | **finished** | The four instruments, the index, the first grading. Still waiting on canon kinds until 2026-09-17. |
| `RISK-WP-0002` | **finished** | Two findings and five public method instruments handed to `policy-nexus` |
| `RISK-WP-0003` | **finished** | Regulatory intake; the legal policy set |
| `RISK-WP-0004` | **finished** | Running the register: cadence, verification, inbox-before-grading |
| `RISK-WP-0005` | **finished** | The seven gaps from `history/2026-08-21-intent-gap-analysis.md` |
| `RISK-WP-0006` | **finished** | Reporting survives a stale index; full policies, embargo deadlines and closed-finding handovers stay visible; regression coverage and State Hub registration. |
| `RISK-WP-0007` | **finished** | Owner evidence reconciled, runtime/provider closure conditions recorded, and accepted obligations distinguished from missing engineering fixes. |
| RISK-WP-0001 | Grading instruments and register | Canon-kind default already applied; review instruments as due |
| RISK-WP-0002 | Initial publication and standing handover route | Later finding publication returns belong to policy-nexus |
| RISK-WP-0003 | Regulatory intake and retained policy records | Substantive policy and activation reviews remain due |
| RISK-WP-0004 | Review procedure, inbox checks and activity definitions | Live activity deployment/session completion remains unverified |
| RISK-WP-0005 | Intake, remediation tracking and gap reporting | Production-transition adoption and external contact delivery remain outside this repo |
| RISK-WP-0006 | Resilient reports and obligation visibility | Reporting does not complete the underlying reviews or handovers |
| RISK-WP-0007 | Reconcile owner evidence and closure obligations | Deployed captures and provider/owner acceptance remain owner work |
## Scope correction and reporting repair — 2026-09-05
## Loose ends resolved — 2026-10-03
`SCOPE.md` now describes the checked-in capability. The timestamped assessment
in `history/2026-09-05-014333-scope-intent-assessment.md` records the remaining
gaps behind the earlier claim that WP-0005 closed them all.
RISK-F-0011 now records the founder's 2026-09-22 source-only acceptance
(message `61fd83cc-4d21-4a0c-bbef-d91b2e8f129e`). The founder, exercising
`GOVERN @ estate`, accepted the bounded source claim, not deployed completeness.
The medium grade stays; the stall escalation is answered. Acceptance ends
when a deployed qonto stream can be read by King's Guard, or at the next
scheduled risk review after 2026-12-31, whichever occurs first.
KG-WP-0005-T03 remains the closure path; its owner workplan is already blocked.
This is a recorded decision, not renewed acceptance by this register.
WP-0006 repairs the reporting path: `make check` runs every stage even after
failure; `make due` exposes regulatory policies and disclosure obligations;
malformed date strings no longer abort reporting; invalid deferrals cannot
write; archived completed workplans no longer trigger false inactivity alarms.
Eight regression tests pass. The live report now exposes four overdue policies,
eight pending publication handovers, and the existing overdue findings.
These are visibility repairs, not substantive reviews or evidence of closure.
The fix tracker now reads YAML task blocks regardless of field order.
Emergent T04 correctly reports `done` and T07 `wait`, rather than `unreadable`.
A regression test also prevents reading a status from outside the target block.
The daily activity source includes those obligations. Its live synchronization
and end-to-end delivery remain unverified. External intake, incident clocks,
production-transition decisions and estate assessment coverage remain open.
RISK-F-0013 (medium) and RISK-F-0014 (low) retain the historical 0.2.1
binding/lifecycle defects and local 0.2.3 non-reproduction evidence; owner T07
acceptance remains pending. RISK-F-0015 (low) records the two retained Claude
owner-routing misses; current-release complete provider evidence remains pending.
WP-0007 then reconciled the owner evidence in RISK-V-0003. Qonto's source
cadence/reconciliation exists; KG-WP-0005-T03 waits for deployed acceptance.
RPF-WP-0029 removed the backup fallback; T02 waits for provider invalidation
and recovery receipts. Both findings were recorded as moved and remain open
at `instant`; F-0010 was closed 2026-09-22 (RISK-RULING-2026-09-22-A), embargo lifted. F-0008's substantive review remains
overdue and its existing acceptance terms are displayed explicitly. Ten tests
pass. WP-0007 and four tasks are registered in State Hub.
## Remaining register obligations
## The register
- RISK-F-0012: qonto-assistant must supply e-invoice owner tracking and the
receiving/retention evidence. Existing default date: 2026-10-06.
- RISK-F-0008: accepted audit-retention risk; its substantive legal review and
real-data activation facts remain due. Existing technical default: 2026-11-17.
- Four full policies and RISK-REG-0001 remain overdue for substantive review.
This cleanup supplies no new legal research or activation assurance.
- Nine finding publication handovers remain pending. A disclosure grade is
not publication. No new external message or publication was sent here.
- Scheduled-session execution, external contact delivery and production-transition
adoption remain unverified; their definitions/routes are completed local work.
| ID | Sev | Status | Disclosure | Cadence | System |
| --- | --- | --- | --- | --- | --- |
| `RISK-F-0011` | medium | open | public | instant | qonto-assistant |
| `RISK-F-0012` | medium | open | public (handover after workplan) | instant | qonto-assistant |
| `RISK-F-0010` | low | fixed | public (handover pending) | 1h | railiance-platform |
| `RISK-F-0009` | high | fixed | public | instant | railiance-platform |
| `RISK-F-0008` | medium | accepted | public | 1h | audit-core |
| `RISK-F-0007` | high | fixed | public | instant | estate |
| `RISK-F-0006` | high | fixed | public | instant | railiance-platform |
| `RISK-F-0005` | medium | fixed | public | instant | audit-core |
| `RISK-F-0004` | medium | fixed | public | instant | tenant-engine |
| `RISK-F-0003` | medium | fixed | public | instant | ops-warden |
| `RISK-F-0002` | medium | fixed | public | instant | ops-warden |
| `RISK-F-0001` | high | fixed | public | instant | flex-auth |
Completed implementation tasks stay finished while those recurring or external
obligations remain on the register. Findings stay watched until concrete closure
or valid acceptance; owner workplan completion alone does not close them.
Notes below the floor: `RISK-N-0001` noisy neighbours · `RISK-N-0003` found by
reading not watching (first observation-sourced finding arrived 2026-09-02,
still a note) · `RISK-N-0004` zone lookup.
## Verification
Not one field reads `unset`.
## How it works
```
findings/*.md source of truth; reporter fields + this repo's grade
↓ tools/register_index.py
REGISTER.md generated, one screen, never hand-edited
docs/method/ severity · disclosure · escalation · review
verification · dependencies · check-procedure
docs/rulings/ why each grade is what it is, dated
docs/regulatory/ RISK-REG-0001 + policies/ (13, keyed by activation)
docs/verifications/ RISK-V-000N — what this repo checked itself
make due the work list
make fixes state of every tracked fix, from the owner's file
make coverage what the register has never heard from
make checked ARGS=... record an outcome; moves the cadence rung
make check index + malformed + waits + inbox + escalations
```
**Cadence:** `instant → 1h → 8h → 24h → 48h → 96h → 7d → 14d → 1mo → 1q`.
Clean climbs one rung; anything moving resets to `instant`. The rung is the
stability signal. Operator ruling, 2026-08-20.
**Scheduled on `activity-core`:** `hourly-register-inbox-watch` (fires only on
an unread message) and `daily-register-check-sweep` (07:15, unconditional).
Both instruct a session that exercises judgement; neither may record an
outcome.
## Waiting on other people
| Who | On | Defaults |
| --- | --- | --- |
| qonto-assistant | deployed-instance capture and King's Guard acceptance under `KG-WP-0005-T03`; source cadence/reconciliation now exist (`F-0011`) | 2026-09-16 |
| railiance-platform | whether the age recovery-key taint named in RPF-WP-0029 is a separate exposure to file (raised 2026-09-22 after `F-0010` closed) | — |
| the-custodian | canon kinds packet | 2026-09-17 |
| audit-core | keyed commitment; `platform-pg` co-residency horizon | 2026-11-17 |
## Verify
```
make check # everything, including the inbox
python3 tools/register_check.py # just the register
statehub fix-consistency --repo risk-nexus
```
## What the gap analysis changed
`history/2026-08-21-intent-gap-analysis.md` graded this repo against its own
`INTENT.md` and `RISK-WP-0005` closed all seven gaps the same day.
- **Fix state is read, not remembered.** `make fixes` resolves every
`fix_tracking` against the owning repo's workplan file. Its first run found
`RISK-F-0005`'s fix already landed three days earlier, and both of
`RISK-F-0002`'s tracked records closed *before that finding was filed*.
- **Incident intake exists**, with `first_observed` starting the 72-hour clock
in `RISK-POL-0005` and escalation that is not batched.
- **Public records have permanent addresses** — two findings and five method
instruments publish through `policy-nexus`; this repo remains their source.
- **Coverage has a number:** `make coverage` — 7 of 117 registered repos have
ever appeared in a finding. The other 110 are unknown, not clean.
## Known conditions
- **Earlier workplans were not indexed in the hub.** C-06 on the earlier set: this instance was
not the identifier registrar. Needs a run with `STATEHUB_REGISTRAR=1` on the
production instance. WP-0006 now has a registered Hub workplan and five task
UUIDs; this implementation did not repair historical workplan registration.
- **C-31** fires on `RISK-F-` ids. This is expected noise for this repo: the RISK-WP-0001 default was applied 2026-09-22 after the-custodian did not answer by 2026-09-17. The register no longer treats it as a gap it can close. If canon later registers the kinds, the warning clears on its own.
Defaults 2026-09-17.
- **OpenBao is unverifiable from here** (403). Every grade touching an OpenBao
policy is a grade on a document, and says so.
- **`RISK-F-0011` is due at `instant`.** Graded this sitting; not clean-checked
in the same sitting. The next pass climbs it if nothing moved.
`make test`: 14 tests pass. `make fixes` resolves the Emergent task states.
`make check` checks index, register obligations and inbox; overdue work remains
visible. `statehub fix-consistency` reconciles the seven workplans and pushes.
Historical records retain the provenance of file evidence versus live reads.

View file

@ -2,7 +2,7 @@
id: RISK-F-0011
type: finding
title: "qonto-assistant audit.deny stream completeness is not established"
status: open
status: accepted
owner: risk-nexus
reported_by: kings-guard
reported_via: gate-house
@ -30,17 +30,23 @@ publication_subtitle: "A live deny was observed on qonto-assistant, but nothing
revision: "graded-1"
last_reviewed: "2026-09-02"
review_interval: 6m
escalation: pending
escalation: none
escalation_trigger: 5
escalation_status: sent
escalation_status: answered
escalation_sent: "2026-09-22"
last_checked: "2026-09-22T06:13:33Z"
next_check: "2026-09-22T06:13:33Z"
escalation_answered: "2026-09-22"
accepted_by: "the founder, exercising GOVERN @ estate"
accepted_on: "2026-09-22"
acceptance_recorded: "2026-10-03"
acceptance_basis: "Hub decision 61fd83cc-4d21-4a0c-bbef-d91b2e8f129e; QONTO-WP-0005 source-only evidence"
accepted_until: "qonto-assistant runs as a deployed instance with a stream endpoint kings-guard can read, or the next scheduled risk review after 2026-12-31, whichever happens first"
last_checked: "2026-10-03T17:08:27Z"
next_check: "2026-10-03T17:08:27Z"
cadence: instant
clean_streak: 0
graded_by: risk-nexus
ruling: RISK-RULING-2026-09-02-A
checked_by: "worsch"
checked_by: "codex/risk-nexus"
---
# RISK-F-0011 — qonto-assistant audit.deny stream completeness is not established
@ -166,8 +172,29 @@ escalation went to the-custodian today and asks who authorizes and runs the
deployed capture. Default if unanswered by 2026-09-29: raise once more, then
record the stall as accepted by silence. The grade does not change.
## Founder acceptance reconciled — 2026-10-03
The founder, exercising `GOVERN @ estate`, chose source-only acceptance on
2026-09-22 in Hub message `61fd83cc-4d21-4a0c-bbef-d91b2e8f129e`.
The register had left that answer unread; this entry records the decision now
without backdating the review. Status is **accepted**, medium, public; the
stall escalation is answered. This is deliberate bounded acceptance, not
acceptance inferred from silence and not deployed-instance completeness.
Acceptance ends at the first of: a deployed qonto-assistant instance exposing
a stream King's Guard can read; or the next scheduled risk review after
2026-12-31, which must re-check whether a runtime owner exists. The finding
then returns to active remediation. KG-WP-0005-T03 remains the closure path.
On 2026-10-03 the owner's recorded source workplan QONTO-WP-0005 is finished;
King's Guard's workplan is blocked and T03 is waiting for a runtime-owner
capture/endpoint. These are checkout records, not a live deployment read.
No acceptance-ending event is established by those records.
The review ladder continues while accepted; this change earns no clean rung.
## Reviews
- **2026-09-02** — graded from the Gate House intake, the named conformance review, and a current-source check of qonto-assistant. Local lockout is in-process; the emitted deny stream still has no cadence or reconciliation view. Cadence starts at instant.
- **2026-09-05** — not clean: Reviewed owner notice, cadence/logger/endpoint and KG-WP-0005; source remediation exists, deployed-instance acceptance remains pending under KG-WP-0005-T03. See RISK-V-0003. Cadence instant → instant; checked again immediately.
- **2026-09-22** — not clean: Default applied: KG-WP-0005-T03 still wait, no deployed capture; stall recorded; escalated to the-custodian under trigger 5 Cadence instant → instant; checked again immediately.
- **2026-10-03** — not clean: Recorded founder source-only acceptance dated 2026-09-22; escalation answered; deployed acceptance still pending under KG-WP-0005-T03 Cadence instant → instant; checked again immediately.

View file

@ -90,7 +90,10 @@ Owner tracking read directly:
T04 `done`, T07 `wait`, workplan `blocked` on 2026-10-03. The current fix
tracker reports these task IDs as `unreadable` because their task blocks place
`title` between `id` and `status`; this filing uses the explicit file read,
not that parser result as evidence of absent tracking.
not that parser result as evidence of absent tracking. The 2026-10-03 cleanup
under RISK-WP-0005-T01 subsequently repaired the parser; `make fixes` now
reports T04 `done` and T07 `wait`. This reporting repair supplies no additional
remediation or provider acceptance.
Reporter evidence (read from the sibling checkout):

View file

@ -87,7 +87,10 @@ Owner tracking read directly:
T04 `done`, T07 `wait`, workplan `blocked` on 2026-10-03. The current fix
tracker reports these task IDs as `unreadable` because their task blocks place
`title` between `id` and `status`; this filing uses the explicit file read,
not that parser result as evidence of absent tracking.
not that parser result as evidence of absent tracking. The 2026-10-03 cleanup
under RISK-WP-0005-T01 subsequently repaired the parser; `make fixes` now
reports T04 `done` and T07 `wait`. This reporting repair supplies no additional
remediation or provider acceptance.
Reporter evidence (read from the sibling checkout):

View file

@ -88,7 +88,10 @@ Owner tracking read directly:
T04 `done`, T07 `wait`, workplan `blocked` on 2026-10-03. The current fix
tracker reports these task IDs as `unreadable` because their task blocks place
`title` between `id` and `status`; this filing uses the explicit file read,
not that parser result as evidence of absent tracking.
not that parser result as evidence of absent tracking. The 2026-10-03 cleanup
under RISK-WP-0005-T01 subsequently repaired the parser; `make fixes` now
reports T04 `done` and T07 `wait`. This reporting repair supplies no additional
remediation or provider acceptance.
Reporter evidence (read from the sibling checkout):

View file

@ -129,6 +129,21 @@ class ReviewWorkflowTests(unittest.TestCase):
self.assertIn("finished [archived]", report)
self.assertNotIn("UNCHANGED", report)
def test_task_tracking_reads_reordered_fields_without_crossing_blocks(self):
with tempfile.TemporaryDirectory() as directory:
path = pathlib.Path(directory) / "workplan.md"
path.write_text('---\nid: TEST-WP-0001\nstatus: blocked\n---\n'
'```task\nid: TEST-WP-0001-T01\n'
'title: Implement the fix\npriority: high\nstatus: "done"\n```\n'
'```task\nstatus: wait\ntitle: Accept runtime evidence\n'
'id: TEST-WP-0001-T02\n```\n'
'```task\nid: TEST-WP-0001-T03\n```\n'
'status: done\n')
self.assertEqual(fix_tracker.task_status(path, "TEST-WP-0001-T01"), "done")
self.assertEqual(fix_tracker.task_status(path, "TEST-WP-0001-T02"), "wait")
self.assertIsNone(fix_tracker.task_status(path, "TEST-WP-0001-T03"))
self.assertIsNone(fix_tracker.task_status(path, "TEST-WP-0001-T04"))
def test_accepted_obligation_requires_a_resolvable_basis_and_review(self):
finding = dict(id="RISK-F-9999", status="accepted", fix_tracking="unset",
accepted_by="operator", accepted_until="real data arrives",

View file

@ -15,6 +15,7 @@ import datetime as dt
import pathlib
import re
import subprocess
import yaml
import register_lib as lib
@ -48,8 +49,16 @@ def last_commit(path: pathlib.Path) -> dt.datetime | None:
def task_status(path: pathlib.Path, task_id: str) -> str | None:
m = re.search(rf"id: {re.escape(task_id)}\s*\nstatus: (\w+)", path.read_text(encoding="utf-8"))
return m.group(1) if m else None
for block in re.findall(r"^```task\s*\n(.*?)^```\s*$",
path.read_text(encoding="utf-8"), re.M | re.S):
try:
task = yaml.safe_load(block)
except yaml.YAMLError:
continue
if isinstance(task, dict) and task.get("id") == task_id:
status = task.get("status")
return status if isinstance(status, str) else None
return None
def resolve(fix_tracking: str) -> list[dict]:

View file

@ -8,7 +8,7 @@ status: finished
owner: the-custodian
topic_slug: risk-nexus
created: "2026-08-21"
updated: "2026-08-21"
updated: "2026-10-03"
depends_on_workplans:
- RISK-WP-0001
- RISK-WP-0004
@ -270,3 +270,13 @@ the task, not only here.
- Whether findings should be reported to the estate by anything other than
their owners — monitoring, coverage sweeps — stays a note until evidence
makes it a finding.
## Loose-end review — 2026-10-03
Under existing T01, repaired task status reading: YAML task blocks permit
`title` and other fields between `id` and `status`, quoted values and reordered
keys. Emergent T04/T07 now resolve as done/wait. A regression ensures a missing
status cannot be borrowed from another block or prose. All 14 tests pass.
No tasks were added or reopened. All seven local workplans and their Hub
projections are finished; all 37 local tasks are done. External adoption,
contact provisioning and recurring reviews remain the stated residuals.

View file

@ -8,7 +8,7 @@ status: finished
owner: the-custodian
topic_slug: custodian
created: "2026-09-05"
updated: "2026-09-05"
updated: "2026-10-03"
depends_on_workplans:
- RISK-WP-0006
state_hub_workstream_id: "ac12733f-3f4b-5c7b-aee7-7115b9c4db72"
@ -111,3 +111,15 @@ Still external or unverified: runtime capture/observer acceptance, provider
invalidation/recovery receipts, acceptance-trigger facts and legal reviews,
external contact delivery and scheduled-session completion. Source searches
establish no stronger conclusion. No messages or acknowledgements were sent.
## Loose-end review — 2026-10-03
Under existing T01/T04, reconciled the founder's 2026-09-22 response for
RISK-F-0011, previously unread. Recorded bounded source-only acceptance,
answered the stall escalation, preserved the medium grade and KG-WP-0005-T03
runtime closure path, and reset cadence with a moved check. The founder,
exercising `GOVERN @ estate`, ends acceptance on a readable deployed instance
or the next scheduled risk review after 2026-12-31, whichever occurs first.
QONTO-WP-0005 is finished; KG-WP-0005 is blocked with T03 waiting. This is a
checkout reconciliation, not live runtime acceptance. Updated STATE/SCOPE and
reconciled inbox handling. No local blocked tasks remain; no new tasks/plans.