mirror of
https://github.com/stablyai/orca.git
synced 2026-10-19 08:03:13 +00:00
246 lines
12 KiB
JSON
246 lines
12 KiB
JSON
{
|
|
"schemaVersion": 1,
|
|
"updatedAt": "2026-07-01",
|
|
"policy": {
|
|
"maturityLevels": ["experimental", "soak", "blocking", "accepted-gap", "deprecated"],
|
|
"blockingPromotion": {
|
|
"minimumSoakRuns": 100,
|
|
"minimumSoakDays": 14,
|
|
"maximumUnexplainedFlakes": 0
|
|
}
|
|
},
|
|
"gates": [
|
|
{
|
|
"id": "terminal-session.snapshot-freshness",
|
|
"title": "Stale liveness snapshots cannot close newer PTY bindings",
|
|
"maturity": "soak",
|
|
"owner": "terminal-runtime",
|
|
"layer": "renderer-unit",
|
|
"surfaces": ["terminal lifecycle", "dead-session reconciliation", "tab creation"],
|
|
"platforms": ["macos", "linux", "windows"],
|
|
"providers": ["local", "daemon"],
|
|
"motivatingLinks": [
|
|
"https://github.com/stablyai/orca/issues/6773",
|
|
"https://github.com/stablyai/orca/pull/6514",
|
|
"https://github.com/stablyai/orca/pull/6796",
|
|
"https://github.com/stablyai/orca/pull/6801"
|
|
],
|
|
"invariant": "A local or daemon liveness snapshot requested before a pane binds a PTY cannot prove that newer binding dead or route it through exit teardown.",
|
|
"oracle": "The decision layer rejects reconciliation when ptyBoundAt is greater than or equal to snapshotRequestedAt, still reconciles genuinely absent older local ids, and treats rejected provider listing as unknown.",
|
|
"commands": [
|
|
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/terminal-dead-session-reconcile.test.ts"
|
|
],
|
|
"testFiles": [
|
|
"src/renderer/src/components/terminal-pane/terminal-dead-session-reconcile.test.ts"
|
|
],
|
|
"runtimeBudget": {
|
|
"p95Seconds": 10,
|
|
"scope": "local unit test"
|
|
},
|
|
"flakeHistory": {
|
|
"status": "unknown",
|
|
"evidence": "Registered after existing targeted tests were found; needs soak history before blocking promotion."
|
|
},
|
|
"redGreenEvidence": {
|
|
"status": "partial",
|
|
"evidence": "Unit tests encode the stale snapshot/newborn race and fail if the freshness guard is removed. Needs saved CI or intentional-break artifact before blocking promotion."
|
|
},
|
|
"performanceBudget": {
|
|
"required": true,
|
|
"evidence": "The gate itself is cheap. Any PR changing reconciliation loops, hidden-pane scans, or provider polling must also run a terminal throughput or event-loop-delay measurement before blocking promotion."
|
|
},
|
|
"promotionCriteria": [
|
|
"Run in soak for at least 100 consecutive passes or 14 days across required CI platforms.",
|
|
"Attach red/green evidence from the freshness guard regression.",
|
|
"Add an integration/provider-contract follow-up that proves tab survival plus input/output after stale snapshot release."
|
|
],
|
|
"knownGaps": [
|
|
"Current command proves the pure decision and orchestration timestamp forwarding, not a full Electron tab-survival/input echo flow.",
|
|
"SSH and remote providers are intentionally unknown-liveness paths and need separate provider-contract gates."
|
|
],
|
|
"demotionRule": "Demote or quarantine if the gate flakes once without a product bug or harness bug filed to the owner."
|
|
},
|
|
{
|
|
"id": "agent-session.provider-ownership",
|
|
"title": "Provider sessions are resumed once per workspace ownership claim",
|
|
"maturity": "soak",
|
|
"owner": "agent-session",
|
|
"layer": "renderer-state",
|
|
"surfaces": [
|
|
"agent launch",
|
|
"workspace activation",
|
|
"sleep and hibernate restore",
|
|
"provider session dedupe",
|
|
"sidebar and mobile identity"
|
|
],
|
|
"platforms": ["macos", "linux", "windows"],
|
|
"providers": ["local", "daemon", "ssh", "wsl", "remote-runtime"],
|
|
"motivatingLinks": [
|
|
"https://github.com/stablyai/orca/pull/6800",
|
|
"https://github.com/stablyai/orca/pull/5240",
|
|
"https://github.com/stablyai/orca/pull/6411",
|
|
"https://github.com/stablyai/orca/pull/6833"
|
|
],
|
|
"invariant": "Workspace activation, launch, restore, sleep, hibernate, dedupe, clearing, and reconnect code must not replay or resume a provider session id already owned, queued, pending, or live in that workspace.",
|
|
"oracle": "Provider-session claim keys are owned by preserved active tabs, inactive split leaves, visible non-focused split groups, live records, quit records, and worktree-sleep records; duplicates clear without launching a second resume command.",
|
|
"commands": [
|
|
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/resume-sleeping-agent-session.test.ts"
|
|
],
|
|
"testFiles": ["src/renderer/src/lib/resume-sleeping-agent-session.test.ts"],
|
|
"runtimeBudget": {
|
|
"p95Seconds": 15,
|
|
"scope": "local renderer state test"
|
|
},
|
|
"flakeHistory": {
|
|
"status": "unknown",
|
|
"evidence": "Registered after targeted tests were found; needs soak history before blocking promotion."
|
|
},
|
|
"redGreenEvidence": {
|
|
"status": "partial",
|
|
"evidence": "Tests encode provider-session dedupe and ownership claims across active/inactive/visible split records. Needs saved red/green artifact for the class-level replay invariant."
|
|
},
|
|
"performanceBudget": {
|
|
"required": true,
|
|
"evidence": "Current state tests are cheap. PRs adding ownership scans must show bounded work over records and no hidden-pane wake loop before blocking promotion."
|
|
},
|
|
"promotionCriteria": [
|
|
"Run in soak for at least 100 consecutive passes or 14 days across required CI platforms.",
|
|
"Add explicit pending/queued ownership cases for resume commands already staged but not yet connected.",
|
|
"Attach red/green evidence that display/replay evidence alone cannot claim ownership."
|
|
],
|
|
"knownGaps": [
|
|
"Current command does not yet model delayed hooks, wrong-session hooks, or pending connection claims explicitly.",
|
|
"Current command does not run a real workspace activation loop repeatedly through Electron."
|
|
],
|
|
"demotionRule": "Demote or quarantine if failures are non-actionable or if a duplicate resume escape occurs outside the modeled matrix."
|
|
},
|
|
{
|
|
"id": "terminal-geometry.visible-convergence",
|
|
"title": "Visible desktop terminals converge across xterm, fit, PTY, and shell size",
|
|
"maturity": "experimental",
|
|
"owner": "terminal-rendering",
|
|
"layer": "renderer-provider-contract",
|
|
"surfaces": ["PTY sizing", "split layout", "restore", "hidden-to-visible transitions"],
|
|
"platforms": ["macos", "linux", "windows"],
|
|
"providers": ["local", "daemon", "ssh", "remote-runtime"],
|
|
"motivatingLinks": [
|
|
"https://github.com/stablyai/orca/pull/6644",
|
|
"https://github.com/stablyai/orca/pull/6649",
|
|
"https://github.com/stablyai/orca/pull/6725",
|
|
"https://github.com/stablyai/orca/pull/6785",
|
|
"https://github.com/stablyai/orca/pull/6853",
|
|
"https://github.com/stablyai/orca/pull/6939"
|
|
],
|
|
"invariant": "A visible desktop-owned terminal cannot trust 0x0, stale requested size, or renderer-only size; xterm, fit/proposed size, applied PTY size, and shell-visible size must converge or enter explicit degraded state.",
|
|
"oracle": "Fault injection forces 0x0 first fit, delayed layout settle, dropped resize ack, and hidden-to-visible activation, then asserts xterm cols/rows, provider-applied size, stty size, and echo-wrap behavior converge.",
|
|
"commands": [],
|
|
"testFiles": [],
|
|
"runtimeBudget": {
|
|
"p95Seconds": 60,
|
|
"scope": "provider-contract or focused Electron test"
|
|
},
|
|
"flakeHistory": {
|
|
"status": "not-started",
|
|
"evidence": "Harness not implemented."
|
|
},
|
|
"redGreenEvidence": {
|
|
"status": "missing",
|
|
"evidence": "Needs deterministic broken variant or old regression fixture."
|
|
},
|
|
"performanceBudget": {
|
|
"required": true,
|
|
"evidence": "Must include resize/throughput budget so convergence loops do not add frame or SIGWINCH churn."
|
|
},
|
|
"promotionCriteria": [
|
|
"Build deterministic fault hooks before adding broad E2E coverage.",
|
|
"Keep stress variants non-blocking until runtime and flake history are known."
|
|
],
|
|
"knownGaps": ["No manifest command yet."],
|
|
"demotionRule": "Cannot promote without deterministic oracle and runtime history."
|
|
},
|
|
{
|
|
"id": "xterm-addon.boundary-containment",
|
|
"title": "xterm addon failures stay pane-scoped and input survives",
|
|
"maturity": "experimental",
|
|
"owner": "terminal-rendering",
|
|
"layer": "renderer-unit",
|
|
"surfaces": ["terminal search", "links", "WebGL", "decorations", "keyboard navigation"],
|
|
"platforms": ["macos", "linux", "windows"],
|
|
"providers": ["local", "daemon", "ssh", "remote-runtime"],
|
|
"motivatingLinks": [
|
|
"https://github.com/stablyai/orca/pull/6852",
|
|
"https://github.com/stablyai/orca/pull/6872",
|
|
"https://github.com/stablyai/orca/pull/6855"
|
|
],
|
|
"invariant": "Search, link, WebGL, decoration, input-protocol, or keyboard-navigation errors must not unmount the terminal surface, crash React/window, break focus, or stop PTY input/output.",
|
|
"oracle": "Injected addon throws and invalid dimensions disable or degrade only the affected addon for one pane, emit one structured breadcrumb, and preserve focus plus typed input echo.",
|
|
"commands": [],
|
|
"testFiles": [],
|
|
"runtimeBudget": {
|
|
"p95Seconds": 30,
|
|
"scope": "renderer unit or component test"
|
|
},
|
|
"flakeHistory": {
|
|
"status": "not-started",
|
|
"evidence": "Harness not implemented."
|
|
},
|
|
"redGreenEvidence": {
|
|
"status": "missing",
|
|
"evidence": "Needs injected addon failure fixture."
|
|
},
|
|
"performanceBudget": {
|
|
"required": false,
|
|
"evidence": "Required only if containment adds retry loops, polling, or renderer fallback churn."
|
|
},
|
|
"promotionCriteria": [
|
|
"Add deterministic addon throw injection.",
|
|
"Prove input/output survives after boundary failure."
|
|
],
|
|
"knownGaps": ["No manifest command yet."],
|
|
"demotionRule": "Cannot promote while it only checks visual rendering."
|
|
},
|
|
{
|
|
"id": "startup-upgrade.persisted-session-corpus",
|
|
"title": "Current Orca preserves or recovers old production persisted sessions",
|
|
"maturity": "experimental",
|
|
"owner": "startup-persistence",
|
|
"layer": "upgrade-fixture",
|
|
"surfaces": ["startup", "upgrade", "session restore", "daemon restore"],
|
|
"platforms": ["macos", "linux", "windows"],
|
|
"providers": ["local", "daemon", "ssh", "wsl"],
|
|
"motivatingLinks": [
|
|
"https://github.com/stablyai/orca/issues/5356",
|
|
"https://github.com/stablyai/orca/pull/5234",
|
|
"https://github.com/stablyai/orca/pull/5240"
|
|
],
|
|
"invariant": "Startup and restore fixes must preserve or explicitly recover sessions from the last affected production persisted-state schema, not only from state written by current code.",
|
|
"oracle": "Boot current Orca against immutable copied user-data fixtures from affected versions and reject blank replacement panes, duplicate resume tabs, silent session loss, or works-only-after-current-write behavior.",
|
|
"commands": [],
|
|
"testFiles": [],
|
|
"runtimeBudget": {
|
|
"p95Seconds": 120,
|
|
"scope": "focused Electron upgrade fixture"
|
|
},
|
|
"flakeHistory": {
|
|
"status": "not-started",
|
|
"evidence": "Fixture corpus not implemented."
|
|
},
|
|
"redGreenEvidence": {
|
|
"status": "missing",
|
|
"evidence": "Needs immutable pre-fix persisted-state fixture."
|
|
},
|
|
"performanceBudget": {
|
|
"required": true,
|
|
"evidence": "Startup fixture must record startup latency and avoid adding blocking migration scans."
|
|
},
|
|
"promotionCriteria": [
|
|
"Land immutable old-version fixture with documented source version.",
|
|
"Run second restart after current code writes upgraded state.",
|
|
"Record startup timing and failure artifact."
|
|
],
|
|
"knownGaps": ["No fixture corpus or command yet."],
|
|
"demotionRule": "Cannot promote without old production fixture provenance."
|
|
}
|
|
]
|
|
}
|