You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Workbench project catalog is all-or-nothing. If one persisted historical project head cannot pass current validation, GET /api/projects returns 503 and hides otherwise valid projects.
Evidence
The shared catalog reader deliberately returns unavailable for any unreadable project directory or revision. The BFF and native preview now both use that reader, so the wiring fix does not address legacy reopen compatibility.
Impact
A valid pinned project can remain readable while global project discovery is unavailable because an unrelated historical project predates the current validation contract.
Acceptance criteria
Define a versioned legacy-reopen or migration policy that preserves original bytes and provenance.
Keep exact-current validation fail-closed for normal project reads.
Expose historical incompatibility explicitly, with stable project identity and reason.
Ensure one incompatible historical project does not silently misrepresent or hide valid project entries.
Add fixtures for legacy valid, legacy incompatible, malformed identity, and mixed catalogs.
Do not delete projects, backfill signed history, or weaken resolved-operation-plan validation as a workaround.
Read-only runtime verification on 2026-09-09: GET /api/projects returned HTTP 503 with state: unavailable and reason: Persisted project revisions could not be reopened exactly. The same control plane returned the current ID01 project snapshot successfully.
Fact-check scope
ID01 F15; reviewed on 2026-09-09. Source inspection, focused tests where relevant, and recorded evidence establish only the scope stated here.
Source pointers (local checkout; the public mirror may lag):
desktop/src/workbench/bff.ts:175-186
scripts/serve/serve-native-workbench.ts:248-299
scripts/serve/serve-native-workbench.ts:2042-2057
Evidence limit: The reader intentionally fails closed. This audit did not mutate or reopen the historical persisted projects, so it does not identify a safe migration design.
Diagnostic du 2026-09-25 sur checkout local : les 5 tetes legacy (ps01, mcs01, mcs02, hs01, sl01) echouent toutes sur le meme contrat — runs historiques sans resolvedOperationPlan (champ requis pour les operations a plan ferme). Exemple : $.agentRuns[11].resolvedOperationPlan: is required for a closed plan-bearing operation.
Consequence : la partie decouvrabilite est faite (/api/project-discovery 2.0 repond partial avec identite stable + reasonCode: validation-failure par projet, verifie en live : 6 disponibles / 5 indisponibles). Le reliquat "reopen as current" exigerait de reconstituer des plans stampilles serveur pour des runs historiques, ce que les criteres interdisent (ni backfill d'historique signe, ni affaiblissement de la validation). Propose : clore comme remplace par la decouverte v2, ou garder pour un futur design de projection legacy lecture seule explicitement marquee.
Activity
superWorldSavior commentedon Sep 25, 2026
Diagnostic du 2026-09-25 sur checkout local : les 5 tetes legacy (ps01, mcs01, mcs02, hs01, sl01) echouent toutes sur le meme contrat — runs historiques sans
resolvedOperationPlan(champ requis pour les operations a plan ferme). Exemple :$.agentRuns[11].resolvedOperationPlan: is required for a closed plan-bearing operation.Consequence : la partie decouvrabilite est faite (
/api/project-discovery2.0 repondpartialavec identite stable +reasonCode: validation-failurepar projet, verifie en live : 6 disponibles / 5 indisponibles). Le reliquat "reopen as current" exigerait de reconstituer des plans stampilles serveur pour des runs historiques, ce que les criteres interdisent (ni backfill d'historique signe, ni affaiblissement de la validation). Propose : clore comme remplace par la decouverte v2, ou garder pour un futur design de projection legacy lecture seule explicitement marquee.