Wire composite references and add per-field rejecting fixtures #5
No reviewers
Labels
No labels
homeostat/state
active
homeostat/state
attention
homeostat/state
ready
homeostat/state
waiting
homeostat/type
control
homeostat/type
intake
homeostat/type
work
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
homeostat/protocol!5
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/composite-schema-refs"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #4
Adds deterministic, self-contained local-reference bundles for exact Protocol document compositions, field-specific rejecting fixtures, populated accepting fixtures, stale-bundle validation, and packaging documentation.
Homeostat invocation
issue-13:research:plan-composite-schema-assertions:code-composite-refs-and-fixtures:retry-composite-refs-and-fixtures:review-composite-refsStatus: complete
Capability:
reviewProvider/model:
claude/defaultInput to AI
Independently review the exact pushed head and verify the bundled references, fixtures, and packaging checks.
Subject: Review composite schema references and fixtures
Output from AI
Reviewed the exact pushed head of PR #5 (homeostat/protocol,
fix/composite-schema-refs@516e96e098) against issue #4's acceptance criteria. Approved.What the PR does: it wires the four composite fields that name an exact Protocol document type — capability-result
findingsandcompletion.evidence, invocationreadings, and ledger-entrydeferred— to their part schemas through local$reffragments into embedded$defs, generated deterministically by the newtools/bundle.pyand enforced non-stale bytools/validate.py. Fields that are genuinely open (capability-resultevidence, invocationtrusted_inputs/guides) are correctly left alone since no part schema exists for them.Independent verification performed (not just re-reading the diff):
python3 tools/validate.pypasses clean on the exact head (9 schemas, 27 accepting fixtures, 41 rejecting fixtures).python3 tools/bundle.py --checkreports no stale bundles.schemas/ledger-entry.schema.jsoninto an empty directory and validated a real fixture against it in total isolation — 0 errors, proving the doubly-nestedledger-entry -> invocation -> readingembedding is genuinely self-contained with no cross-file resolution, which is the actual constraint (transducer/governorpass a single file path) that blocked this fix originally per NOTES.md.findingand confirmed jsonschema rejects it — the nested$idinside$defsdoes not defeat local$refenforcement.budget.ledgertofixtures/valid/ledger-entry.deferred-join.json) fixes a real pre-existing gap the old inert bare-objectdeferredfield never caught.No material finding. One non-blocking maintainability note is recorded:
tools/bundle.py'sBUNDLESdict relies on insertion order for single-pass convergence of the nested ledger-entry/invocation/reading embedding;--checkis self-healing against this in CI, but it's worth a comment.Requesting
forgejo.review.submit(approved) followed byforgejo.merge.schedule, both pinned to516e96e098.Evidence
516e96e098matches origin/fix/composite-schema-refs tip; mergeable true; not yet merged'}Findings
Requested effects
516e96e098', 'parameters': {'verdict': 'approved', 'body': "Independently reviewed exact head516e96e098against issue #4's acceptance criteria. Verified: (1)python3 tools/validate.pypasses clean (9 schemas, 27 accepting fixtures, 41 rejecting fixtures); (2)python3 tools/bundle.py --checkreports no stale bundles; (3) copying onlyschemas/ledger-entry.schema.jsoninto an empty directory and validating a real fixture against it in isolation succeeds with zero errors and zero external file access, proving the consumer-facing single-file form (the actual constraint that blocked this fix per NOTES.md) is genuinely self-contained through the doubly-nested ledger-entry -> invocation -> reading embedding; (4) injecting an unexpected property into a nestedfindingis correctly rejected by the embeddedadditionalProperties: false, proving the nested$idinside$defsdoes not silently defeat local$refresolution or constraint enforcement; (5) every composed field (capability-result.findings, capability-result.completion.evidence, invocation.readings, ledger-entry.deferred) has its own distinct rejecting fixture naming the field it proves, and existing valid fixtures were updated (not weakened) to keep passing under the newly-enforced constraints -- notably fixtures/valid/ledger-entry.deferred-join.json was missing budget.ledger, a real pre-existing gap the previously-inert bare-objectdeferredfield never caught; (6) NOTES.md and README.md accurately describe the closed state and the bundle/check workflow; (7) fields left open (capability-result.evidence, invocation.trusted_inputs, invocation.guides) genuinely have no corresponding part schema in schemas/, matching the stated rationale that they are free-form/polymorphic/consumer-owned rather than embedded Protocol documents; (8) both required Forgejo checks (Validate Protocol / validate, pull_request and push) report success on this exact SHA, and the PR head matches the pushed branch tip with no divergence. No material finding. One non-blocking maintainability note: tools/bundle.py's BUNDLES dict relies on insertion order (invocation before ledger-entry) for single-pass convergence when regenerating; --check independently recomputes each stem from current on-disk dependencies so it cannot pass on a stale result, but a future reordering could require running the generator twice before --check goes green. Worth a comment, not worth blocking on."}}516e96e098', 'parameters': {'completion_evidence': {'schema_version': '1.0', 'boundary': 'merge', 'head_sha': '516e96e098', 'findings': [{'id': 'review-composite-refs-verification', 'policy_effect': 'required', 'verdict': 'pass', 'subject_revision': '516e96e098', 'evidence': [{'kind': 'command', 'command': 'python3 tools/validate.py', 'result': 'validated 9 schemas, 27 accepting fixtures, and 41 rejecting fixtures'}, {'kind': 'command', 'command': 'python3 tools/bundle.py --check', 'result': 'exit 0, no stale bundles'}]}], 'review': {'head_sha': '516e96e098', 'author_provider': 'codex', 'reviewer_provider': 'claude', 'verdict': 'approved', 'review_id': 'review-composite-refs-516e96e'}}}}Mutations
Continuation
No continuation requested.
Completion:
merge / reached