Close local review loose ends and record blocked workplan gates

Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a0e241-8285-7a63-8c0c-51c9cb824dc3
This commit is contained in:
tegwick 2026-09-27 17:20:43 +02:00
parent bcdb02323c
commit 7295172f1e
20 changed files with 510 additions and 95 deletions

View file

@ -81,7 +81,7 @@ for current counts and evidence limits; [REVIEW.md](REVIEW.md) preserves the ini
[WP-0002](workplans/FEP-WP-0002-seed-language-validation.md) owns seed evidence,
connected-corpus validation and M1. [WP-0003](workplans/FEP-WP-0003-contrasting-schools.md)
owns contrasting streams, broader walkthroughs, ontology decisions and M2.
[WP-0004](workplans/FEP-WP-0004-reference-surface.md) is proposed follow-up for graph,
[WP-0004](workplans/FEP-WP-0004-reference-surface.md) is blocked follow-up for graph,
held-out retrieval and real-repository applicability, subject to its recorded gates.
[WP-0006](workplans/FEP-WP-0006-language-evolution.md) owns ongoing learning visibility,
review dates and comparable-cycle measurement. Actionable work stays in workplans;
@ -101,7 +101,9 @@ The user-directed [WP-0008](workplans/FEP-WP-0008-use-driven-improvement.md) con
qualified reference use to evidence-bearing consumer receipts and bounded autonomous
improvement. It owns discovery, instrumentation and execution integration; monthly
human review owns operating-policy decisions. The capability entry is prepared;
hosted registration, automatic collection and unattended execution remain unverified.
automatic collection and three activity-core reporting schedules are operational.
Hosted consumer integration and admitted pattern-editing execution remain blocked;
there are no enrolled consumers yet.
This operational loop can improve draft guidance without claiming M1/M2/M3 or
independent-human validation. See the [operating design](docs/ReuseAndImprovementLoop.md).

View file

@ -0,0 +1,42 @@
# Workplan closeout audit — 2026-09-27
User requested implementation of finishable local loose ends, no unnecessary new
work records, blocked states for blocked plans, then commit and sync. All eight
repository workplans were assessed; no new task or workplan was created. Historical
progress sections remain historical; the final closeout section gives current state.
| Workplan | Result | Completed here / remaining acceptance |
| --- | --- | --- |
| FEP-WP-0001 | finished, unchanged | All bootstrap tasks already done |
| FEP-WP-0002 | blocked | T03 waits for independent usefulness and validated seed-case evidence; existing M1 review is revise/defer |
| FEP-WP-0003 | blocked | T03 complete: full M2 editorial/ontology review, all seventeen candidates and ten cases. T02 waits on M1; T01 source/reproduction work and T04 real storage/receiver investigation remain unfinished |
| FEP-WP-0004 | blocked | T01 waits on M1; T02/T03 wait on M2. Preview output cannot replace canonical/held-out/empirical acceptance |
| FEP-WP-0005 | finished, unchanged | Bench setup already delivered; adapter regression checks passed |
| FEP-WP-0006 | active | T03 review-date reconciliation complete; comparable-window assessment still needs useful prospective cycles under a shared protocol |
| FEP-WP-0007 | finished, unchanged | Published 0.1 preview preserved byte-for-byte |
| FEP-WP-0008 | blocked | T01 frozen-release isolation complete; hosted consumer integration, producer hook, real linked outcomes and admitted executor remain required |
Local implementation adds a version/current registry and validates old publications
from their pinned Git objects, separately from live research validation. Regression
checks cover legitimate new research, stale live profiles and tampered publication
inputs. Fourteen unknown substantive-review dates now have original-artifact
provenance; the three existing dates are corroborated. Validation requires scoped
provenance and rejects dates later than their metadata assessment. Historical
baseline and published version are unchanged.
The [M2 review](../research/reviews/M2-CoverageReview.md) closes delivery of the
editorial assessment with an explicit revise/defer result; it does not close M2.
The [date reconciliation](../research/reviews/ReviewDateReconciliation.md) adds no
learning cycle or fabricated effort. Six incomparable prospective groups cannot
satisfy the three-comparable-cycle trigger.
Activity-core reporting and collection are operational with three enabled schedules;
no consumer is enrolled and no pattern-edit executor is admitted. Existing external
owners remain ACTIVITY-WP-0041 T03, GLAS-WP-0012 and HFACT-WP-0001. The October 1
monthly reporting obligation remains, including empty/blocked evidence if unchanged.
No schedule, external deployment or sibling repository was changed by this audit.
Verification: schema tests, bench adapter tests and synthetic bench plan; reference
and evolution tests; reference/evolution/classification consistency checks; changed
Markdown links and whitespace. The plan command makes no provider calls. These
checks validate repository contracts, not independent usefulness or live execution.

24
reference/README.md Normal file
View file

@ -0,0 +1,24 @@
# Published reference versions
[releases.json](releases.json) selects the current qualified preview (`0.1`) and pins
its packaging commit and manifest digest. Consumers record that version, commit and
digest in their use receipt. Candidate prose and other corpus inputs are resolved at
the manifest's `corpus_revision`; packaging documents and evidence locators are
resolved at the packaging revision. Relative links viewed on a moving branch can
show newer research: use a checkout or commit-specific source URL for a pinned read.
Run `python3 scripts/reference_preview.py --check --version 0.1` to validate a
published version, or `make reference-check` for the current pointer. The local Git
object database must contain both pinned revisions; a shallow clone must fetch that
history first. Missing objects fail validation rather than substituting live files.
`make evolution-check classification-check` separately validates current research.
A legitimate candidate/profile revision must pass those checks but must neither
rewrite nor invalidate the older export. Published manifest, development cases and
release documents are checked against their original packaging commit. Generated
outputs must match the pinned inputs. The registry is a reviewed publication index,
not a signature or an independent trust root; changing a release pin requires review.
A future publication gets a new directory and registry entry. Move `current` only
once that publication is verified. The frozen preview remains a research hypothesis
catalog, not canonical admission or a held-out retrieval evaluation.

10
reference/releases.json Normal file
View file

@ -0,0 +1,10 @@
{
"schema_version": 1,
"current": "0.1",
"releases": {
"0.1": {
"packaging_revision": "53bb65e7a6eb1a2fa933e5b41dfa5a0e7409d14d",
"manifest_sha256": "d7f60ac04817820b805265d1d747cfbb8d2269b7bd6244cd9d3e8d2fd44ef0b8"
}
}
}

View file

@ -22,7 +22,7 @@ Independent human profile reviews: 0/17. Full-contract independent-use counts un
## Change since baseline
Baseline baseline-2026-09-26; source revision `f273a190f0e08b8cfe0bb7260d0e7d889f1c090a`. Added: 0; removed: 0; shared candidates with changed content: 3; changed evidence/review assessments: 3; maturity transitions: 0.
Baseline baseline-2026-09-26; source revision `f273a190f0e08b8cfe0bb7260d0e7d889f1c090a`. Added: 0; removed: 0; shared candidates with changed content: 3; changed evidence/review assessments: 17; maturity transitions: 0.
The shared cohort is compared separately from additions. Changed text or evidence counts are not learning gains.
@ -111,7 +111,7 @@ One bounded question counts at most one consequential outcome. Corroboration and
Profile hashes and local references passed validation when this report was generated. That checks traceability, not source truth or external URL freshness.
Profiles with unknown last substantive review date: 14. Assessment dates record this metadata review, not a new substantive validation. No age-based freshness claim is available for those profiles.
Profiles with unknown last substantive review date: 0. Assessment dates record this metadata review, not a new substantive validation. Recorded substantive dates identify scoped author-model reviews, not renewed empirical or external-source freshness.
Coherence metrics (ambiguous selections, unjustified relations and overlap resolved): not measured. Conflict Copy / Explicit Reconciliation overlap remains an explicit open question.

View file

@ -36,6 +36,10 @@ The baseline is an author-model metadata assessment; no independent human review
implied. `assessed_at` does not reset `last_substantive_review_date`: the latter is
unknown until the evidence review's date and scope have been reconciled. Open limits
include counterexamples and contexts still untested. Supersession is explicit.
Current profiles require `substantive_review_ref` and `substantive_review_scope` for
a known substantive date. The [reconciliation](../reviews/ReviewDateReconciliation.md)
records original evidence-review dates; a synthesis or metadata refresh does not
renew them. Historical snapshots retain their original schema-v1 assessments.
## Closing a bounded cycle
@ -73,7 +77,7 @@ Snapshot creation pins committed candidate content and refuses to overwrite a fi
| Dimension | Observation to collect | Current limit |
| --- | --- | --- |
| Applicability | Reviewed decisions and failure contexts across the ten validation cases | Four synthetic/provisional walkthroughs; six planned |
| Trustworthiness | Scoped evidence, independent full-contract uses, unresolved contradictions, provenance and review age | Independent recurrence and substantive-review ages unassessed |
| Trustworthiness | Scoped evidence, independent full-contract uses, unresolved contradictions, provenance and review age | Independent recurrence unassessed; dated evidence-review provenance reconciled |
| Usefulness | Constraint misses, unsupported recommendations, decision quality and time against equivalent prose | Frozen small model-reviewed pilot; human gate open |
| Coherence | Ambiguous selections, redundant candidates and unjustified relations found/resolved in reviews | No measured baseline; reconciliation/copy overlap remains open |
| Maintainability | Reference checks, overdue review obligations, remaining gaps and effort per revision | Local links/hash checks automated; age/backlog estimates not yet measured |

View file

@ -26,11 +26,13 @@
],
"independent_full_contract_uses": null,
"review": {
"assessed_at": "2026-09-26",
"assessed_at": "2026-09-27",
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": null
"last_substantive_review_date": "2026-09-27",
"substantive_review_ref": "research/reviews/M1-SeedReview.md",
"substantive_review_scope": "Editorial review of the connected core; M1 revise/defer."
},
"gaps": [
"Authorized retention and export are separate decisions.",
@ -62,11 +64,13 @@
],
"independent_full_contract_uses": null,
"review": {
"assessed_at": "2026-09-26",
"assessed_at": "2026-09-27",
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": null
"last_substantive_review_date": "2026-09-27",
"substantive_review_ref": "research/reviews/M1-SeedReview.md",
"substantive_review_scope": "Editorial review of the connected core; M1 revise/defer."
},
"gaps": [
"No executed storage crash or backup test.",
@ -92,11 +96,13 @@
],
"independent_full_contract_uses": null,
"review": {
"assessed_at": "2026-09-26",
"assessed_at": "2026-09-27",
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": null
"last_substantive_review_date": "2026-09-27",
"substantive_review_ref": "research/reviews/M1-SeedReview.md",
"substantive_review_scope": "Editorial review of the connected core; M1 revise/defer."
},
"gaps": [
"Atomic supersession and retry contract proposed, not storage-tested."
@ -127,11 +133,13 @@
],
"independent_full_contract_uses": null,
"review": {
"assessed_at": "2026-09-26",
"assessed_at": "2026-09-27",
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": null
"last_substantive_review_date": "2026-09-27",
"substantive_review_ref": "research/reviews/M1-SeedReview.md",
"substantive_review_scope": "Editorial review of the connected core; M1 revise/defer."
},
"gaps": [
"Atomic resolution/provenance UI not executed.",
@ -175,11 +183,13 @@
],
"independent_full_contract_uses": null,
"review": {
"assessed_at": "2026-09-26",
"assessed_at": "2026-09-27",
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": null
"last_substantive_review_date": "2026-09-27",
"substantive_review_ref": "research/reviews/M1-SeedReview.md",
"substantive_review_scope": "Editorial review of the connected core; M1 revise/defer."
},
"gaps": [
"No native-unload, crash, multiple-tab or access-revocation guarantee.",
@ -217,11 +227,13 @@
],
"independent_full_contract_uses": null,
"review": {
"assessed_at": "2026-09-26",
"assessed_at": "2026-09-27",
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": null
"last_substantive_review_date": "2026-09-27",
"substantive_review_ref": "research/reviews/M1-SeedReview.md",
"substantive_review_scope": "Editorial review of the connected core; M1 revise/defer."
},
"gaps": [
"Distributed atomicity and complete frontend recurrence remain unverified.",
@ -271,11 +283,13 @@
],
"independent_full_contract_uses": null,
"review": {
"assessed_at": "2026-09-26",
"assessed_at": "2026-09-27",
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": null
"last_substantive_review_date": "2026-09-27",
"substantive_review_ref": "research/reviews/M1-SeedReview.md",
"substantive_review_scope": "Editorial review of the connected core; M1 revise/defer."
},
"gaps": [
"No production server deduplication or complete retention-window guarantee.",
@ -301,11 +315,13 @@
],
"independent_full_contract_uses": null,
"review": {
"assessed_at": "2026-09-26",
"assessed_at": "2026-09-27",
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": null
"last_substantive_review_date": "2026-09-27",
"substantive_review_ref": "research/reviews/M1-SeedReview.md",
"substantive_review_scope": "Editorial review of the connected core; M1 revise/defer."
},
"gaps": [
"Read-your-write and acceptance/refresh distinction still proposed.",
@ -338,19 +354,19 @@
"kind": "runtime",
"family": "htmx in authored public-catalog fixture",
"ref": "research/reviews/NavigationHistoryExperiment.md",
"scope": "NH01–NH06: native/enhanced routes, history hit/miss, actual browser cache ordering and missing-Vary negative control; explicit Node validator checks separate."
"scope": "NH01\u2013NH06: native/enhanced routes, history hit/miss, actual browser cache ordering and missing-Vary negative control; explicit Node validator checks separate."
},
{
"kind": "runtime",
"family": "htmx in authored public-catalog fixture",
"ref": "research/reviews/NavigationOwnershipExperiment.md",
"scope": "NO01–NO06: ordered history/success/error races, prior policy 0/12 full obligations versus guarded 12/12; separate focus ownership. Same fixture family; pinned history-XHR adapter."
"scope": "NO01\u2013NO06: ordered history/success/error races, prior policy 0/12 full obligations versus guarded 12/12; separate focus ownership. Same fixture family; pinned history-XHR adapter."
},
{
"kind": "static-code",
"family": "Zulip",
"ref": "research/reviews/ZulipNavigationSourceStudy.md",
"scope": "ZN01–ZN08 at pinned revision: partial hash/list/cache mechanisms and non-modal continuation contrast. No application/test execution, no no-script claim, no complete pattern recurrence."
"scope": "ZN01\u2013ZN08 at pinned revision: partial hash/list/cache mechanisms and non-modal continuation contrast. No application/test execution, no no-script claim, no complete pattern recurrence."
}
],
"independent_full_contract_uses": null,
@ -359,7 +375,9 @@
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": "2026-09-27"
"last_substantive_review_date": "2026-09-27",
"substantive_review_ref": "research/reviews/ZulipNavigationSourceStudy.md",
"substantive_review_scope": "Static navigation contrast; partial mechanisms, not independent full-contract use."
},
"gaps": [
"Independent application recurrence and human/AT validation remain unverified.",
@ -393,25 +411,25 @@
"kind": "runtime",
"family": "htmx in authored public-catalog fixture",
"ref": "research/reviews/NavigationHistoryExperiment.md",
"scope": "NH01–NH06: native/enhanced routes, history hit/miss, actual browser cache ordering and missing-Vary negative control; explicit Node validator checks separate."
"scope": "NH01\u2013NH06: native/enhanced routes, history hit/miss, actual browser cache ordering and missing-Vary negative control; explicit Node validator checks separate."
},
{
"kind": "runtime",
"family": "htmx in authored public-catalog fixture",
"ref": "research/reviews/NavigationFocusExperiment.md",
"scope": "NF01–NF06: Tab/Enter navigation, raw versus authored focus/status policy, held-response ownership and background update; DOM evidence only, not AT speech."
"scope": "NF01\u2013NF06: Tab/Enter navigation, raw versus authored focus/status policy, held-response ownership and background update; DOM evidence only, not AT speech."
},
{
"kind": "runtime",
"family": "htmx in authored public-catalog fixture",
"ref": "research/reviews/NavigationOwnershipExperiment.md",
"scope": "NO01–NO06: ordered history/success/error races, prior policy 0/12 full obligations versus guarded 12/12; separate focus ownership. Same fixture family; pinned history-XHR adapter."
"scope": "NO01\u2013NO06: ordered history/success/error races, prior policy 0/12 full obligations versus guarded 12/12; separate focus ownership. Same fixture family; pinned history-XHR adapter."
},
{
"kind": "static-code",
"family": "Zulip",
"ref": "research/reviews/ZulipNavigationSourceStudy.md",
"scope": "ZN01–ZN08 at pinned revision: partial hash/list/cache mechanisms and non-modal continuation contrast. No application/test execution, no no-script claim, no complete pattern recurrence."
"scope": "ZN01\u2013ZN08 at pinned revision: partial hash/list/cache mechanisms and non-modal continuation contrast. No application/test execution, no no-script claim, no complete pattern recurrence."
}
],
"independent_full_contract_uses": null,
@ -420,7 +438,9 @@
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": "2026-09-27"
"last_substantive_review_date": "2026-09-27",
"substantive_review_ref": "research/reviews/ZulipNavigationSourceStudy.md",
"substantive_review_scope": "Static navigation contrast; partial mechanisms, not independent full-contract use."
},
"gaps": [
"Independent application recurrence and human/AT validation remain unverified.",
@ -447,11 +467,13 @@
],
"independent_full_contract_uses": null,
"review": {
"assessed_at": "2026-09-26",
"assessed_at": "2026-09-27",
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": null
"last_substantive_review_date": "2026-09-26",
"substantive_review_ref": "research/reviews/PatternBreadthExpansion.md",
"substantive_review_scope": "Source normalization, decision probes and counterexamples."
},
"gaps": [
"No executed model/view integration or independently reviewed full-contract use."
@ -476,11 +498,13 @@
],
"independent_full_contract_uses": null,
"review": {
"assessed_at": "2026-09-26",
"assessed_at": "2026-09-27",
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": null
"last_substantive_review_date": "2026-09-26",
"substantive_review_ref": "research/reviews/PatternBreadthExpansion.md",
"substantive_review_scope": "Source normalization, decision probes and counterexamples."
},
"gaps": [
"Snapshot coherence and changed-locale cache test still planned."
@ -511,11 +535,13 @@
],
"independent_full_contract_uses": null,
"review": {
"assessed_at": "2026-09-26",
"assessed_at": "2026-09-27",
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": null
"last_substantive_review_date": "2026-09-26",
"substantive_review_ref": "research/reviews/FeatureDeploymentBoundaries.md",
"substantive_review_scope": "Static feature/import versus release-boundary assessment."
},
"gaps": [
"Build/import enforcement not executed.",
@ -541,11 +567,13 @@
],
"independent_full_contract_uses": null,
"review": {
"assessed_at": "2026-09-26",
"assessed_at": "2026-09-27",
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": null
"last_substantive_review_date": "2026-09-26",
"substantive_review_ref": "research/reviews/PatternBreadthExpansion.md",
"substantive_review_scope": "Source normalization, decision probes and counterexamples."
},
"gaps": [
"No executed island fixture, performance comparison or complete recurrence study."
@ -576,11 +604,13 @@
],
"independent_full_contract_uses": null,
"review": {
"assessed_at": "2026-09-26",
"assessed_at": "2026-09-27",
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": null
"last_substantive_review_date": "2026-09-26",
"substantive_review_ref": "research/reviews/BoundaryRecoveryExperiment.md",
"substantive_review_scope": "Authored runtime fixture and failure-class interpretation."
},
"gaps": [
"Synthetic host, not full application recurrence.",
@ -619,19 +649,19 @@
"kind": "runtime",
"family": "htmx in authored public-catalog fixture",
"ref": "research/reviews/NavigationFocusExperiment.md",
"scope": "NF01–NF06: Tab/Enter navigation, raw versus authored focus/status policy, held-response ownership and background update; DOM evidence only, not AT speech."
"scope": "NF01\u2013NF06: Tab/Enter navigation, raw versus authored focus/status policy, held-response ownership and background update; DOM evidence only, not AT speech."
},
{
"kind": "runtime",
"family": "htmx in authored public-catalog fixture",
"ref": "research/reviews/NavigationOwnershipExperiment.md",
"scope": "NO01–NO06: ordered history/success/error races, prior policy 0/12 full obligations versus guarded 12/12; separate focus ownership. Same fixture family; pinned history-XHR adapter."
"scope": "NO01\u2013NO06: ordered history/success/error races, prior policy 0/12 full obligations versus guarded 12/12; separate focus ownership. Same fixture family; pinned history-XHR adapter."
},
{
"kind": "static-code",
"family": "Zulip",
"ref": "research/reviews/ZulipNavigationSourceStudy.md",
"scope": "ZN01–ZN08 at pinned revision: partial hash/list/cache mechanisms and non-modal continuation contrast. No application/test execution, no no-script claim, no complete pattern recurrence."
"scope": "ZN01\u2013ZN08 at pinned revision: partial hash/list/cache mechanisms and non-modal continuation contrast. No application/test execution, no no-script claim, no complete pattern recurrence."
}
],
"independent_full_contract_uses": null,
@ -640,7 +670,9 @@
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": "2026-09-27"
"last_substantive_review_date": "2026-09-27",
"substantive_review_ref": "research/reviews/ZulipNavigationSourceStudy.md",
"substantive_review_scope": "Static navigation contrast; partial mechanisms, not independent full-contract use."
},
"gaps": [
"One implementation family; repeated trials are not independent uses.",
@ -686,11 +718,13 @@
],
"independent_full_contract_uses": null,
"review": {
"assessed_at": "2026-09-26",
"assessed_at": "2026-09-27",
"reviewer": "Codex",
"role": "author-model",
"independent_human": false,
"last_substantive_review_date": null
"last_substantive_review_date": "2026-09-26",
"substantive_review_ref": "research/reviews/ActivationConflictsAndReload.md",
"substantive_review_scope": "Authored activation/reload experiment and guarantee limits."
},
"gaps": [
"No upstream deployment or real team/release-independence validation.",

View file

@ -332,9 +332,9 @@ Workplan files own execution status. This table defines intended outcomes.
| Phase | Work record | Deliverable and exit criterion |
| --- | --- | --- |
| M0 — Scaffold | FEP-WP-0001, finished | Intent, repository structure and State Hub integration exist. |
| M1 — Seed investigation | [FEP-WP-0002](../../workplans/FEP-WP-0002-seed-language-validation.md), active | Reconciled schema; first source case and local-first contrast; 6–10 connected draft patterns; two completed case walkthroughs with evidence and counterexamples. |
| M2 — Broaden and challenge | [FEP-WP-0003](../../workplans/FEP-WP-0003-contrasting-schools.md), active (bounded exploration; M1 open) | Evidence from all six streams; coverage matrix for all ten application types; revise, merge or reject candidates; complete at least four further contrasting cases. |
| M3 — Retrieval and empirical use | [FEP-WP-0004](../../workplans/FEP-WP-0004-reference-surface.md), proposed | Validated metadata and graph export; held-out retrieval cases; at least two real repository studies tied to revisions; publish limitations. |
| M1 — Seed investigation | [FEP-WP-0002](../../workplans/FEP-WP-0002-seed-language-validation.md), blocked (independent evidence) | Reconciled schema; first source case and local-first contrast; 6–10 connected draft patterns; two completed case walkthroughs with evidence and counterexamples. |
| M2 — Broaden and challenge | [FEP-WP-0003](../../workplans/FEP-WP-0003-contrasting-schools.md), blocked (M1 open; bounded exploration permitted) | Evidence from all six streams; coverage matrix for all ten application types; revise, merge or reject candidates; complete at least four further contrasting cases. |
| M3 — Retrieval and empirical use | [FEP-WP-0004](../../workplans/FEP-WP-0004-reference-surface.md), blocked (M1/M2 prerequisites) | Validated metadata and graph export; held-out retrieval cases; at least two real repository studies tied to revisions; publish limitations. |
M1 does not require a large catalog. Six to ten patterns is a working scope cap,
not a maturity score. Expand toward the original 20–30 candidate ambition only

View file

@ -0,0 +1,118 @@
# M2 coverage and ontology review
Reviewed 2026-09-27 by Codex, author-model, under FEP-WP-0003 T03.
**M2 result: revise/defer; not passed.** This completes the current editorial review,
not the evidence gate. It assesses all seventeen candidates and all ten case briefs
against the [research program](../plan/ResearchProgram.md). No new application tests,
independent review, source retrieval or prospective learning cycle was performed.
## Gate assessment
| M2 criterion | Assessment | Basis and remaining owner |
| --- | --- | --- |
| M1 prerequisite | blocked | [M1 review](M1-SeedReview.md) is revise/defer; WP-0002 T03 retains independent usefulness, validated seed cases and quality limits |
| Evidence from all six streams | partial | Documentary coverage exists in A–F; mechanism tests and source inspections have unequal scope. Full-contract independent uses remain unassessed; WP-0003 T01 |
| Coverage matrix for ten application types | delivered, with gaps | Matrix below distinguishes prepared reasoning from validated coverage; planned cases have no completion credit |
| Candidate and relation dispositions | delivered, provisional | Seventeen dispositions below; conditional relations remain proposals, no canonical admission |
| Four further completed contrasting cases | unmet | VC-03/06 provisional; VC-04/05 planned. WP-0003 T02 retains completion after M1 |
## Six-stream evidence assessment
The [coverage inventory](NavigationCoverage.md), [breadth review](PatternBreadthExpansion.md)
and [current profiles](../evolution/profiles.json) provide the detailed locators.
Counts of files, documents, browser rows or repeated trials do not count independent uses.
| Stream | Available evidence | Missing coverage / decision |
| --- | --- | --- |
| A — historical GUI architecture | Fowler documentary contrast, Presentation Model normalization and synthetic probes | Retain view/model separation as a hypothesis; no executed independent whole-contract presentation use |
| B — web navigation and hypermedia | htmx history/cache, focus and completion-ownership fixtures; pinned Zulip navigation source contrast | Authored fixture and static application paths are distinct; offline availability, auxiliary continuations, lifecycle and independent accessible use remain unresolved |
| C — rendering and execution | Astro/SvelteKit documentary mechanisms; authority/projection comparison separates placement from acceptance | Selective activation is plausible; no island performance comparison or broad streaming/resumability validation |
| D — state authority and synchronization | Transactional/local-first sources, Zulip acceptance/projection source study, Matrix SDK with synthetic receiver | Client mechanisms do not establish real receiver deduplication, durable commit/restart or backup. WP-0003 T04 retains those tests |
| E — composition and organization | Pinned feature-sliced and microfrontend example inspection; native-module activation/rollback and conflict/reload fixtures | Source organization, artifact publication and session transition differ; no independent team/deployment or distributed-store guarantee |
| F — quality patterns | React failure-class fixture, Radix dismissal/focus experiments, navigation focus contrast | DOM observations do not validate assistive-technology speech, human usability, privacy/security boundaries or general performance |
The latest [acceptance/projection study](ZulipAcceptanceProjection.md) retains
response/event ordering and reopened-edit ownership as unknown. Its proposed next
reproduction remains WP-0003 T01; this review does not infer a defect from callbacks.
## Application coverage matrix
States agree with [context.json](../evolution/context.json). “Partial” below means
relevant reasoning exists, not that the case has passed the required walkthrough.
| Case | State / evidence | Unresolved coverage |
| --- | --- | --- |
| VC-01 transactional administration | Partial: [synthetic draft](../walkthroughs/VC01-TransactionalAdministration.md), core recovery candidates | Independent decision usefulness, actual write/receipt semantics, keyboard recovery |
| VC-02 offline field notes | Partial: [synthetic draft](../walkthroughs/VC02-OfflineFieldNotes.md), local commit/propagation/conflict sequence | Real storage restart/commit, receiver identity lifetime, device-loss backup and retention scope |
| VC-03 content publication | Partial: [provisional walkthrough](../walkthroughs/VC03-ContentPublication.md), navigation/history/focus fixtures | Offline-reading branch, interrupted enhancement, independent human/AT review |
| VC-04 collaborative editor | Unresolved: [brief](../plan/ValidationCases.md) only | Durable changes versus presence, reconnect/undo and authorization changes; no completed trace |
| VC-05 real-time dashboard | Unresolved: [brief](../plan/ValidationCases.md) only | Subscription lifetime, staleness and bounded overload; no completed trace |
| VC-06 microfrontend estate | Partial: [provisional walkthrough](../walkthroughs/VC06-MicrofrontendEstate.md), feature release fixtures | Real operational independence, retention/support policy and independent case review |
| VC-07 storefront | Unresolved: [brief](../plan/ValidationCases.md); catalog navigation and transactional hypotheses are leads | No integrated cart/price/authoritative-checkout decision trace |
| VC-08 SaaS workspace | Unresolved: [brief](../plan/ValidationCases.md); presentation/derived-state hypotheses are leads | No integrated dense-interaction/long-session case or coherence test |
| VC-09 local-first personal tool | Partial conceptual overlap with VC-02; [brief](../plan/ValidationCases.md) remains planned | Privacy, optional synchronization and backup/restore have no dedicated completed case |
| VC-10 mobile web | Unresolved: [brief](../plan/ValidationCases.md); persistence/reload hypotheses are leads | Constrained-memory startup, interrupted sessions and mobile recovery lack a dedicated completed case |
## Candidate dispositions and counterexamples
“Retain” means retain a qualified draft hypothesis. No candidate has sufficient new
evidence here for promotion, merge or deletion. Rejecting a universal claim is not
rejecting the useful conditional pattern. No relation is made mandatory merely to
connect the graph. The [preview ontology review](PreviewOntology-0.1.md) supplies the
core separation rationale; the breadth and runtime reviews above supply extensions.
| Candidate | Disposition | Distinction / counterexample that constrains the language |
| --- | --- | --- |
| CAND-0001 Conflict Copy | Retain separately from reconciliation | Preserving divergent intent need not include a user resolution workflow; authorized retention and privacy still constrain preservation |
| CAND-0002 Local Commit Boundary | Retain | Locally accepted durable intent differs from editable draft and remote acceptance; memory-only feedback is a counterexample to durability |
| CAND-0003 Pending Synchronization | Retain | Locally accepted work awaiting replication differs from a remote write of unknown outcome; network retry alone does not make the record durable |
| CAND-0004 Explicit Reconciliation | Retain separately from copy | A bounded conflict can be resolved without keeping a permanent copy; automatic convergence can remove the need for explicit user reconciliation |
| CAND-0005 Local Draft State | Retain | Mutable user intent differs from accepted records and presentation state; a refresh must not silently erase newer edits |
| CAND-0006 Version-Checked Mutation | Retain | Base-version preconditions prevent stale intent application; an idempotency key alone does not prove valid ancestry |
| CAND-0007 Mutation Outcome Tracking | Retain | Lost acknowledgement leaves outcome unknown; cancelling UI or creating a fresh operation identity can duplicate accepted work |
| CAND-0008 Invalidate and Reproject | Retain | Read refresh is distinct from mutation acceptance; failed refresh does not prove rejected write or authorize draft rollback |
| CAND-0009 URL-addressable State | Retain | Address reconstruction differs from content availability and authorization; client fragments do not imply server dereferenceability |
| CAND-0010 Progressive Enhancement | Retain | Essential task continuity differs from URL changes or selective hydration; a no-script link that loses the essential action does not satisfy the contract |
| CAND-0011 Presentation Model | Retain | Presentation decisions differ from domain authority and editable intent; a wrapper with no independent decisions does not justify an extra model |
| CAND-0012 Derived State | Retain | Computed results differ from independently editable state; incomplete inputs or stale memoization invalidate a derived result |
| CAND-0013 Vertical Feature Slice | Retain separately from independent release | Capability-oriented modules can share one build; import grouping is not evidence of autonomous deployment |
| CAND-0014 Islands of Interactivity | Retain | Selective execution differs from task fallback, fault containment and security isolation; islands alone guarantee none of those |
| CAND-0015 Failure Boundary | Retain | Specified render containment differs from request/handler failures and remote compensation; a failed fallback may itself escape |
| CAND-0016 Focus Return | Retain narrow scope | Temporary interaction return differs from non-modal route continuation; removed invokers and nested ownership need explicit targets/policy |
| CAND-0017 Independent Feature Boundary | Retain separately from source organization | Artifact release, activation binding and session lifetime differ; changing an import map does not update an already-bound session |
## Relations and quality constraints
Retain the conditional relations in the frozen 0.1 manifest as historical proposals;
no inverse or transitive inference is authorized. The current language must preserve
these decisions when a later export is considered:
- Reject unconditional `requires` between Conflict Copy and Explicit Reconciliation.
Preservation and resolution answer different questions; neither universally requires
the other's particular mechanism.
- Keep local acceptance, remote outcome and read projection separate. Pending
Propagation and Mutation Outcome Tracking may compose, but neither establishes the
other's preconditions. Version-Checked Mutation and operation identity solve different risks.
- Keep feature organization, activation and session transition separate. Do not merge
Vertical Feature Slice with Independent Feature Boundary or infer release autonomy.
- Keep modal return separate from route completion ownership. Reuse shared concerns
without broadening Focus Return into every navigation policy.
- Preserve cross-cutting obligations: authorized retention, explicit backup scope,
receipt/deduplication windows, stale-ancestry handling, newer-draft preservation,
keyboard recovery and fallback ownership. Existing tests qualify mechanisms only;
they do not confer security, accessibility, crash-safety or performance certification.
These are editorial dispositions of existing distinctions, not new empirical findings.
The canonical responsibility vocabulary stays provisional; classification coverage
must not be presented as maturity or proof that the seed inventory is complete.
## Existing work retains the gaps
No new task or workplan is opened. [WP-0003 T01/T02/T04](../../workplans/FEP-WP-0003-contrasting-schools.md)
retain stream evidence, contrasting case completion and real storage/receiver validation.
[WP-0002 T03](../../workplans/FEP-WP-0002-seed-language-validation.md) retains the M1
independent-usefulness gate. [WP-0004](../../workplans/FEP-WP-0004-reference-surface.md)
retains gated canonical export and held-out/real-repository evaluation. T03's review
artifact is complete with an explicit defer result; M2 may be reassessed only when
those existing evidence obligations change. No prospective trend or human validation
is inferred from completing this editorial review.

View file

@ -0,0 +1,38 @@
# Substantive review date reconciliation
Reconciled 2026-09-27 by Codex under FEP-WP-0006 T03. Dates below come from
original dated review artifacts, not the date of this metadata edit. An editorial
contract review is substantive but does not renew runtime evidence, external source
freshness, independent recurrence or human usefulness. All roles remain author-model,
all candidates hypotheses, and independent full-contract use counts unknown.
| Candidate | Recorded review date | Original artifact | Scope |
| --- | --- | --- | --- |
| CAND-0001 — Conflict Copy | 2026-09-27 | [M1-SeedReview](M1-SeedReview.md) | Editorial review of the connected core; M1 revise/defer. |
| CAND-0002 — Local Commit Boundary | 2026-09-27 | [M1-SeedReview](M1-SeedReview.md) | Editorial review of the connected core; M1 revise/defer. |
| CAND-0003 — Pending Synchronization | 2026-09-27 | [M1-SeedReview](M1-SeedReview.md) | Editorial review of the connected core; M1 revise/defer. |
| CAND-0004 — Explicit Reconciliation | 2026-09-27 | [M1-SeedReview](M1-SeedReview.md) | Editorial review of the connected core; M1 revise/defer. |
| CAND-0005 — Local Draft State | 2026-09-27 | [M1-SeedReview](M1-SeedReview.md) | Editorial review of the connected core; M1 revise/defer. |
| CAND-0006 — Version-Checked Mutation | 2026-09-27 | [M1-SeedReview](M1-SeedReview.md) | Editorial review of the connected core; M1 revise/defer. |
| CAND-0007 — Mutation Outcome Tracking | 2026-09-27 | [M1-SeedReview](M1-SeedReview.md) | Editorial review of the connected core; M1 revise/defer. |
| CAND-0008 — Invalidate and Reproject | 2026-09-27 | [M1-SeedReview](M1-SeedReview.md) | Editorial review of the connected core; M1 revise/defer. |
| CAND-0009 — URL-addressable State | 2026-09-27 | [ZulipNavigationSourceStudy](ZulipNavigationSourceStudy.md) | Static navigation contrast; partial mechanisms, not independent full-contract use. |
| CAND-0010 — Progressive Enhancement | 2026-09-27 | [ZulipNavigationSourceStudy](ZulipNavigationSourceStudy.md) | Static navigation contrast; partial mechanisms, not independent full-contract use. |
| CAND-0011 — Presentation Model | 2026-09-26 | [PatternBreadthExpansion](PatternBreadthExpansion.md) | Source normalization, decision probes and counterexamples. |
| CAND-0012 — Derived State | 2026-09-26 | [PatternBreadthExpansion](PatternBreadthExpansion.md) | Source normalization, decision probes and counterexamples. |
| CAND-0013 — Vertical Feature Slice | 2026-09-26 | [FeatureDeploymentBoundaries](FeatureDeploymentBoundaries.md) | Static feature/import versus release-boundary assessment. |
| CAND-0014 — Islands of Interactivity | 2026-09-26 | [PatternBreadthExpansion](PatternBreadthExpansion.md) | Source normalization, decision probes and counterexamples. |
| CAND-0015 — Failure Boundary | 2026-09-26 | [BoundaryRecoveryExperiment](BoundaryRecoveryExperiment.md) | Authored runtime fixture and failure-class interpretation. |
| CAND-0016 — Focus Return | 2026-09-27 | [ZulipNavigationSourceStudy](ZulipNavigationSourceStudy.md) | Static navigation contrast; partial mechanisms, not independent full-contract use. |
| CAND-0017 — Independent Feature Boundary | 2026-09-26 | [ActivationConflictsAndReload](ActivationConflictsAndReload.md) | Authored activation/reload experiment and guarantee limits. |
Fourteen formerly unknown dates now have traceable provenance; the three existing
September 27 dates are corroborated. The September 26 baseline and 0.1 release
remain unchanged historical records. Current profiles carry a separate metadata
assessment date, substantive review reference and scope. Missing references or dates
later than their metadata assessment are rejected by the current-profile validator.
This reconciliation is not a prospective investigation, adds no learning cycle and
estimates no historical effort. LEARN-0011–0016 remain six distinct comparison groups;
none supplies three comparable cycles. The remaining comparable-window review stays
in [FEP-WP-0006 T03](../../workplans/FEP-WP-0006-language-evolution.md).

View file

@ -3,14 +3,13 @@
import argparse
import hashlib
import json
from pathlib import Path
from pathlib import Path, PurePosixPath
import re
import subprocess
from classification_coverage import section_values, RESPONSIBILITIES
ROOT = Path(__file__).resolve().parents[1]
BASE = 'reference/0.1/'
def require(condition, message):
@ -18,21 +17,46 @@ def require(condition, message):
raise ValueError(message)
def locator(root, value):
require(isinstance(value, str) and bool(value), 'Empty reference')
path = (root / value).resolve()
require(path.is_relative_to(root.resolve()) and path.is_file(), 'Invalid reference: ' + value)
return path
def git_blob(root, revision, path):
require(isinstance(revision, str) and re.fullmatch(r'[0-9a-f]{40}', revision), 'Full pinned revision required')
require(isinstance(path, str) and path and not PurePosixPath(path).is_absolute()
and all(part not in {'.', '..', ''} for part in path.split('/'))
and '\\' not in path and ':' not in path, 'Invalid reference: ' + str(path))
try:
return subprocess.check_output(['git', 'show', revision + ':' + path], cwd=root, stderr=subprocess.DEVNULL)
except subprocess.CalledProcessError as exc:
raise ValueError('Missing pinned reference: ' + path) from exc
def build(root=ROOT):
manifest = json.loads((root / BASE / 'manifest.json').read_text())
def release(root, version=None):
registry = json.loads((root / 'reference/releases.json').read_text())
require(registry.get('schema_version') == 1, 'Unsupported release registry')
version = version or registry['current']
require(isinstance(version, str) and re.fullmatch(r'[0-9]+\.[0-9]+', version), 'Invalid reference version')
require(version in registry['releases'], 'Unknown reference version')
pin = registry['releases'][version]
base = 'reference/' + version + '/'
manifest_bytes = git_blob(root, pin['packaging_revision'], base + 'manifest.json')
require(hashlib.sha256(manifest_bytes).hexdigest() == pin['manifest_sha256'], 'Release manifest digest mismatch')
require((root / base / 'manifest.json').read_bytes() == manifest_bytes, 'Published manifest changed')
for name in ('development-cases.json', 'README.md', 'ReleaseNotes.md', 'ReleaseReview.md'):
require((root / base / name).read_bytes() == git_blob(root, pin['packaging_revision'], base + name), 'Published artifact changed: ' + name)
manifest = json.loads(manifest_bytes)
require(manifest['version'] == version, 'Release version mismatch')
return base, pin, manifest
def build(root=ROOT, version=None):
base, pin, manifest = release(root, version)
corpus = manifest['corpus_revision']
read_corpus = lambda path: git_blob(root, corpus, path)
read_package = lambda path: git_blob(root, pin['packaging_revision'], path)
for path, digest in manifest['inputs'].items():
require(hashlib.sha256(locator(root, path).read_bytes()).hexdigest() == digest, 'Stale input: ' + path)
profiles = json.loads((root / 'research/evolution/profiles.json').read_text())['profiles']
classifications = json.loads((root / 'research/catalog/ClassificationCoverage.json').read_text())['candidates']
require(hashlib.sha256(read_corpus(path)).hexdigest() == digest, 'Stale pinned input: ' + path)
profiles = json.loads(read_corpus('research/evolution/profiles.json'))['profiles']
classifications = json.loads(read_corpus('research/catalog/ClassificationCoverage.json'))['candidates']
classes = {r['path']: r for r in classifications}
vocab = (root / 'canon/vocabulary.yaml').read_text()
vocab = read_corpus('canon/vocabulary.yaml').decode()
ids = [p['id'] for p in profiles]
selected = manifest['core'] + manifest['extensions']
require(len(ids) == len(set(ids)) and all(re.fullmatch(r'CAND-\d{4}', x) for x in ids), 'Invalid candidate identities')
@ -40,10 +64,8 @@ def build(root=ROOT):
require(len(classes) == len(classifications) == len(profiles), 'Invalid classification coverage')
records = []
for p in profiles:
raw = locator(root, p['path']).read_bytes()
raw = read_corpus(p['path'])
require(hashlib.sha256(raw).hexdigest() == p['sha256'], 'Stale candidate: ' + p['id'])
pinned = subprocess.check_output(['git', 'show', manifest['corpus_revision'] + ':' + p['path']], cwd=root)
require(raw == pinned, 'Candidate differs from pinned revision: ' + p['id'])
front = raw.decode().split('---')[1]
c = classes[p['path']]
require(c['sha256'] == p['sha256'] and c['title'] == p['title'], 'Stale classification')
@ -61,7 +83,7 @@ def build(root=ROOT):
for labels in c['forces'].values():
require(set(labels) <= set(section_values(vocab, 'forces')), 'Invalid force')
for e in p['evidence']:
locator(root, e['ref'])
read_package(e['ref'])
require(e['kind'] and e['scope'], 'Missing evidence qualification')
require(p['evidence'] or p['independent_full_contract_uses'] is None, 'Missing evidence/unknown')
records.append(record)
@ -71,20 +93,20 @@ def build(root=ROOT):
require(edge['status'] == 'proposed' and all(edge[k].strip() for k in ('condition', 'rationale', 'unknown', 'evidence_kind')), 'Unqualified relation')
require(edge['evidence_refs'], 'Missing relation evidence')
for ref in edge['evidence_refs']:
locator(root, ref)
read_package(ref)
for ref in manifest['entrypoints'].values():
locator(root, ref)
read_package(ref)
for task in manifest['open_work']:
require(task['id'] in locator(root, task['path']).read_text(), 'Missing residual task')
cases = json.loads((root / BASE / 'development-cases.json').read_text())['cases']
require(task['id'] in read_package(task['path']).decode(), 'Missing residual task')
cases = json.loads(read_package(base + 'development-cases.json'))['cases']
require(len(cases) >= 6 and len({c['id'] for c in cases}) == len(cases), 'Invalid development cases')
for case in cases:
require(case['entrypoint'] in manifest['entrypoints'] and set(case['expected_candidates']) <= set(ids), 'Invalid development reference')
require(all(case[k].strip() for k in ('query', 'reviewed_answer', 'prohibited_claim', 'boundary')), 'Incomplete development case')
index = dict(schema_version=1, version='0.1', status='research-preview', corpus_revision=manifest['corpus_revision'],
index = dict(schema_version=1, version=manifest['version'], status='research-preview', corpus_revision=manifest['corpus_revision'],
candidates=records, relations=manifest['relations'], entrypoints=manifest['entrypoints'],
relation_semantics='Conditional proposals only; no inverse or transitive inference.')
catalog = ['# Candidate reference — 0.1', '', 'All records are draft hypotheses. Classification is provisional; linked candidate prose contains context, alternatives and consequences. Evidence locators describe partial support, not full-contract recurrence.', '']
catalog = ['# Candidate reference — ' + manifest['version'], '', 'All records are draft hypotheses. Classification is provisional; linked candidate prose contains context, alternatives and consequences. Evidence locators describe partial support, not full-contract recurrence.', '']
for subset in ('core', 'extensions'):
catalog += ['## ' + subset.title(), '', '| Candidate / decision | Families; scales | Evidence limits |', '| --- | --- | --- |']
for p in records:
@ -102,9 +124,11 @@ def build(root=ROOT):
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--check', action='store_true')
parser.add_argument('--version', help='Immutable published version; default is reference/releases.json current')
args = parser.parse_args()
for name, content in build().items():
path = ROOT / BASE / name
base, _, _ = release(ROOT, args.version)
for name, content in build(version=args.version).items():
path = ROOT / base / name
if args.check:
require(path.is_file() and path.read_text() == content, 'Stale export: ' + name)
else:

View file

@ -53,7 +53,10 @@ def validate(data, root=ROOT):
require(not p['review']['independent_human'] or p['review']['role'] == 'human', 'Model review cannot be human validation')
date.fromisoformat(p['review']['assessed_at'])
if p['review']['last_substantive_review_date'] is not None:
date.fromisoformat(p['review']['last_substantive_review_date'])
review = p['review']
require(date.fromisoformat(review['last_substantive_review_date']) <= date.fromisoformat(review['assessed_at']), 'Review date exceeds assessment')
require(review.get('substantive_review_ref') and review.get('substantive_review_scope', '').strip(), 'Substantive review needs provenance and scope')
ref_check(root, review['substantive_review_ref'])
require(p['independent_full_contract_uses'] is None or type(p['independent_full_contract_uses']) is int and p['independent_full_contract_uses'] >= 0, 'Invalid independent-use count')
require(set(p['superseded_by']) <= set(ids) - {p['id']}, 'Unknown/self successor')
for e in p['evidence']:
@ -164,7 +167,7 @@ def render(data, baseline=None):
lines += ['## Coherence and maintainability', '',
'Profile hashes and local references passed validation when this report was generated. That checks traceability, not source truth or external URL freshness.', '',
f'Profiles with unknown last substantive review date: {sum(p["review"]["last_substantive_review_date"] is None for p in profiles)}. '
'Assessment dates record this metadata review, not a new substantive validation. No age-based freshness claim is available for those profiles.', '',
'Assessment dates record this metadata review, not a new substantive validation. Recorded substantive dates identify scoped author-model reviews, not renewed empirical or external-source freshness.', '',
'Coherence metrics (ambiguous selections, unjustified relations and overlap resolved): not measured. Conflict Copy / Explicit Reconciliation overlap remains an explicit open question.', '',
'Review backlog and evidence gaps remain in ' + ', '.join(link(r) for r in context['open_work']) + '.', '',
'## Pattern profiles', '']

View file

@ -1,5 +1,7 @@
# Draft contract for FEP-WP-0008-T02; not an enabled collector or real-use evidence.
# The implementation must turn this into a strict versioned schema and validate it.
# Producer template for FEP-WP-0008-T02; placeholders are not valid use evidence.
# Executable schema-v1 event validation/collection: activity-core
# src/activity_core/context_resolvers/frontend_patterns.py (validate_event).
# Consumer closeout integration and real-use acceptance remain open in T02.
# Consumer produces immutable events; collector supplies independently verified origin.
schema_version: 1
use_id: "<consumer-repo>:<task-id>:<decision-id>"

View file

@ -1,4 +1,5 @@
"""Reject broken preview contracts before publishing generated references."""
import hashlib
import importlib.util
import json
from pathlib import Path
@ -48,16 +49,18 @@ def test_duplicate_identity(copy):
preview.build(copy)
def test_stale_candidate(copy):
def test_live_candidate_change_does_not_break_frozen_preview(copy):
with (copy / 'research/candidates/ConflictCopy.md').open('a') as f:
f.write('\nChanged contract.\n')
with pytest.raises(ValueError, match='Stale candidate'):
preview.build(copy)
assert preview.build(copy) == preview.build(ROOT)
import research_evolution as evolution
with pytest.raises(ValueError, match='Stale profile'):
evolution.validate(evolution.load(copy), copy)
def test_escaping_reference(copy):
mutate(copy, lambda m: m['entrypoints'].update(start='/etc/passwd'))
with pytest.raises(ValueError, match='Invalid reference'):
with pytest.raises(ValueError, match='Published manifest changed'):
preview.build(copy)
@ -68,3 +71,44 @@ def test_missing_metadata(copy):
path.write_text(json.dumps(data))
with pytest.raises((ValueError, KeyError)):
preview.build(copy)
def test_legitimate_new_research_remains_separate_from_old_release(copy):
import research_evolution as evolution
candidate = copy / 'research/candidates/ConflictCopy.md'
candidate.write_text(candidate.read_text() + '\nNew research clarification.\n')
digest = hashlib.sha256(candidate.read_bytes()).hexdigest()
profiles = copy / 'research/evolution/profiles.json'
data = json.loads(profiles.read_text())
data['profiles'][0]['sha256'] = digest
profiles.write_text(json.dumps(data))
classes = copy / 'research/catalog/ClassificationCoverage.json'
data = json.loads(classes.read_text())
next(c for c in data['candidates'] if c['path'] == 'research/candidates/ConflictCopy.md')['sha256'] = digest
classes.write_text(json.dumps(data))
evolution.validate(evolution.load(copy), copy)
assert preview.build(copy, '0.1') == preview.build(ROOT, '0.1')
def test_unknown_version_and_forged_release_pin(copy):
with pytest.raises(ValueError, match='Unknown'):
preview.build(copy, '9.9')
path = copy / 'reference/releases.json'
data = json.loads(path.read_text())
data['releases']['0.1']['manifest_sha256'] = '0' * 64
path.write_text(json.dumps(data))
with pytest.raises(ValueError, match='digest mismatch'):
preview.build(copy)
def test_published_cases_cannot_be_rewritten(copy):
path = copy / 'reference/0.1/development-cases.json'
path.write_text('{}')
with pytest.raises(ValueError, match='Published artifact changed'):
preview.build(copy)
@pytest.mark.parametrize('path', ['/etc/passwd', '../README.md', 'research/../README.md', 'research//README.md'])
def test_git_blob_rejects_escaping_paths(path):
with pytest.raises(ValueError, match='Invalid reference'):
preview.git_blob(ROOT, '0' * 40, path)

View file

@ -26,6 +26,9 @@ def test_current_records_and_report_are_consistent(data):
@pytest.mark.parametrize('mutation,match', [
(lambda d: d['profiles']['profiles'][0]['review'].update(last_substantive_review_date='2099-01-01'), 'Review date exceeds'),
(lambda d: d['profiles']['profiles'][0]['review'].update(substantive_review_ref=None), 'needs provenance'),
(lambda d: d['profiles']['profiles'][0]['review'].update(substantive_review_scope=''), 'needs provenance'),
(lambda d: d['profiles']['profiles'][0].update(sha256='0'*64), 'Stale profile'),
(lambda d: d['profiles']['profiles'].pop(), 'inventory mismatch'),
(lambda d: d['profiles']['profiles'][1].update(id='CAND-0001'), 'Duplicate candidate'),

View file

@ -4,7 +4,7 @@ type: workplan
title: "Validate the seed frontend pattern language"
domain: infotech
repo: frontend-patterns
status: active
status: blocked
quality_dor: DoR-Ok
quality_dor_at: "2026-09-24"
quality_dor_by: codex
@ -61,7 +61,7 @@ counterexamples. Reconcile README maturity claims with the evidence.
```task
id: FEP-WP-0002-T03
status: progress
status: wait
priority: medium
state_hub_task_id: "54940b04-1d0f-5bff-98d4-be290eca8048"
```
@ -347,3 +347,12 @@ obligation is declared satisfied merely by transfer. Workplan remains active.
The eight-record editorial core is suitable for a qualified research preview; M1
remains revise/defer and T03 progress. WP-0007 packages it without canonical admission,
independent-human claims or fresh held-out evaluation.
## Closeout audit — 2026-09-27
Workplan blocked; T03 waits on the independent usefulness/validated-case evidence
identified in [M1-SeedReview](../research/reviews/M1-SeedReview.md). The connected
core, two synthetic walkthroughs and review are delivered, but the gate is revise/defer.
Reopen when independent evidence and the outstanding quality/recovery assumptions
can be assessed; a metadata edit or another author-model review cannot supply it.
Storage/receiver mechanism work already belongs to WP-0003 T04. No new task.

View file

@ -4,7 +4,7 @@ type: workplan
title: "Challenge the language across architectural schools"
domain: infotech
repo: frontend-patterns
status: active
status: blocked
owner: codex
topic_slug: canon
created: "2026-09-24"
@ -34,7 +34,7 @@ Build a source coverage matrix for streams A–F in ResearchProgram.md. Complete
```task
id: FEP-WP-0003-T02
status: todo
status: wait
priority: high
state_hub_task_id: "05de53b6-1771-5137-9602-bf614cb1bf0a"
```
@ -45,7 +45,7 @@ After the M1 review, complete VC-03 through VC-06 using the walkthrough template
```task
id: FEP-WP-0003-T03
status: todo
status: done
priority: medium
state_hub_task_id: "2b7252c1-c453-5050-96fb-d86a3f3df0f0"
```
@ -330,3 +330,17 @@ infrastructure if feasible within a new budget. Existing auxiliary-navigation re
stays open, local navigation fixture stays paused, and WP-0003 T04 retains storage/
receiver validation. WP-0006 T03 retains review dates/comparable-window work; this sixth
prospective group supplies no learning trend. Human validation and M1/M2/M3 stay open.
## Closeout audit — 2026-09-27
T03 done: [M2-CoverageReview](../research/reviews/M2-CoverageReview.md) records all
seventeen dispositions, conditional relations, quality limits, six-stream evidence
and ten-case coverage. Result: revise/defer, not M2 acceptance. All unresolved work
stays in existing T01/T02/T04, WP-0002 T03 and WP-0004; no new task or workplan.
Workplan blocked because T02's M1 prerequisite remains unmet. T02 is wait until
WP-0002's evidence gate is satisfied; then complete VC-03–06 and review VC-07–10.
T01 remains progress for useful bounded source/reproduction questions; T04 remains
todo for a preregistered concrete storage/real-receiver investigation. These are
unfinished research, not falsely declared external blockers or completed by this
editorial review. Bounded exploratory work retains its existing authorization.

View file

@ -4,7 +4,7 @@ type: workplan
title: "Evaluate retrieval and real repository applicability"
domain: infotech
repo: frontend-patterns
status: proposed
status: blocked
owner: codex
topic_slug: canon
created: "2026-09-24"
@ -22,7 +22,7 @@ Individual task descriptions identify any work that can start earlier.
```task
id: FEP-WP-0004-T01
status: todo
status: wait
priority: high
state_hub_task_id: "4fec98f6-fee2-52fc-a01c-f490c79ee0f8"
```
@ -33,7 +33,7 @@ After the schema and seed examples pass M1, implement the smallest validator/exp
```task
id: FEP-WP-0004-T02
status: todo
status: wait
priority: medium
state_hub_task_id: "4bdd4c53-fcdb-5dfd-9a37-ebc3fee4d445"
```
@ -44,7 +44,7 @@ After M2, freeze a corpus revision and evaluate at least six unseen prompts foll
```task
id: FEP-WP-0004-T03
status: todo
status: wait
priority: medium
state_hub_task_id: "ab66848b-1045-54dd-9711-52c5560faafa"
```
@ -59,3 +59,11 @@ before M1/M2. It is distinct from this workplan's canonical export and held-out
claims; it does not rename consumed feedback into unseen evaluation cases. This plan
remains proposed with its original task gates. Routine reuse must not await those
claims or require a human survey; preserve evidence provenance and honest unknowns.
## Closeout audit — 2026-09-27
Workplan blocked. T01 waits for the schema/seed M1 acceptance; T02 and T03 wait for
M2 under the phase prerequisite. The M1 and M2 reviews both say revise/defer. Reopen
each task only on the recorded prerequisite evidence. Existing preview validation
and development cases are useful outputs of WP-0007/WP-0008, not canonical export,
held-out evaluation or two complete real-repository applicability studies.

View file

@ -176,3 +176,16 @@ infrastructure if feasible within a new budget. Existing auxiliary-navigation re
stays open, local navigation fixture stays paused, and WP-0003 T04 retains storage/
receiver validation. WP-0006 T03 retains review dates/comparable-window work; this sixth
prospective group supplies no learning trend. Human validation and M1/M2/M3 stay open.
## Closeout audit — 2026-09-27
T03 review-date reconciliation is complete: [dated provenance report](../research/reviews/ReviewDateReconciliation.md)
resolves fourteen unknown dates and corroborates the three known dates from original
artifacts. Current-profile validation requires review provenance/scope and prevents
a date later than its assessment. Historical baseline and 0.1 release are unchanged.
T03 remains progress, workplan active: LEARN-0011–0016 belong to six different
comparison groups, none with three comparable cycles. The returns review needs useful
further prospective research under the existing task; do not manufacture repetitions
or pool incompatible protocols to close it. There is no external blocker on that
research and no claim that a metadata reconciliation is a new learning cycle.

View file

@ -4,7 +4,7 @@ type: workplan
title: "Close the ecosystem reuse and improvement loop"
domain: infotech
repo: frontend-patterns
status: active
status: blocked
lane: blue
owner: codex
topic_slug: canon
@ -30,7 +30,7 @@ the user's instruction. This is not a request for another up-front approval roun
```task
id: FEP-WP-0008-T01
status: progress
status: wait
priority: high
lane: blue
state_hub_task_id: "453fc06b-be70-5913-a816-161cabe9a0a1"
@ -61,7 +61,7 @@ in this design session; hosted registration and consumer integration remain open
```task
id: FEP-WP-0008-T02
status: progress
status: wait
priority: high
lane: blue
state_hub_task_id: "49be8a8e-eaaf-5f1c-b4cd-f0c4dbac9823"
@ -88,7 +88,7 @@ refresh after 14 days and remain unknown after 30; no manual survey dependency.
```task
id: FEP-WP-0008-T03
status: progress
status: wait
priority: high
lane: blue
state_hub_task_id: "f823587c-727d-515a-974d-401719420ce5"
@ -179,3 +179,26 @@ sync remains off; authenticated receipt/identity and failed-health rollback proo
remain in ACTIVITY-WP-0041-T03. Digest-aware registry retention is tracked by
RPF-WP-0048-T03; current baseline tags are protected. Reporting is operational;
consumer enrollment and admitted pattern-editing execution remain unfinished.
## Closeout audit — 2026-09-27
Local frozen-publication prerequisite in T01 is complete: [release registry](../reference/releases.json),
explicit version selection and Git-pinned corpus/package reads isolate old exports
from legitimate current-research edits. Regression tests exercise current research
changing independently, stale live profiles and altered published artifacts.
Workplan blocked; T01/T02/T03 wait on their end-to-end dependencies. T01 needs hosted
discovery and common-template-owner integration into an actual eligible frontend task,
including its first pinned decision note. T02 needs the producer closeout hook and
real use plus linked outcome; activity-core owns the existing executable event validator
and deterministic collector. The roster is still empty. Do not invent a demo consumer
or copy its fixtures into the real stream. Reopen these tasks when an eligible actual
consumer and the template integration are available.
T03 needs an admitted, budget-enforced pattern-edit executor (GLAS-WP-0012 /
HFACT-WP-0001), authenticated standing release/rollback proof (ACTIVITY-WP-0041 T03),
and a real unassisted cycle with monthly packet. Reporting and collection are already
operational; their three schedules remain enabled. The first monthly packet remains
due October 1; missing consumer/executor evidence must be reported as such. This audit
does not disable schedules or conflate the reporting worker with mutation authority.
Existing owner work records retain all dependencies; no replacement workplan is opened.