Skip to content

RC19 Findings Register

Use this as the canonical issue ledger for the RC19 full-system audit.

IDSeverityTierFileSymbol/AreaImpactEvidenceOwnerStatusFix PR/CommitDecision
RC19-001P1BREADME.mdMCP tool countpublic capability claims drift from implementationREADME.md:17, docs/index.md:34, docs/reference/architecture.md:170, docs/vnext/README.md:73docsfixedlocalfix
RC19-002P1Bdocs/reference/cli.mdgroup commandsoperator-facing command examples include unsupported formsdocs/reference/cli.md:49, parser src/cccc/cli.py:2662docsfixedlocalfix
RC19-003P1Bdocs/reference/architecture.mdblob storage pathattachment storage path mismatch can cause broken operational guidancedocs/reference/architecture.md:140, runtime note src/cccc/resources/cccc-help.md:112docsfixedlocalfix
RC19-004P1Bdocs/standards/CCCC_DAEMON_IPC_V1.mdversion examplesstale protocol examples weaken SDK/client contract confidencedocs/standards/CCCC_DAEMON_IPC_V1.md:65, docs/standards/CCCC_DAEMON_IPC_V1.md:1137docsfixedlocalfix
RC19-005P2A.github/workflows/ci.ymlquality gatebuild-only green can miss runtime regressions.github/workflows/ci.yml:30relengfixedlocalfix
RC19-006P2A.github/workflows/release.ymlpublish gatepublish path lacks full regression gate before upload.github/workflows/release.yml:87relengfixedlocalfix
RC19-007P1Bdocs/vnext/RELEASE.mdrelease examplesrelease guidance still pinned to rc16 examplesdocs/vnext/RELEASE.md:28, docs/vnext/RELEASE.md:43docsfixedlocalfix
RC19-008P2Bdocs/vnext/STATUS.mdstatus boardstale status can misdirect release decisionsdocs/vnext/STATUS.md:1docsfixedlocalfix
RC19-009P2Brepository rootgovernance assetsmissing CHANGELOG/SECURITY/support policy reduces release readinessCHANGELOG.md:1, SECURITY.md:1, SUPPORT.md:1docsfixedlocalfix
RC19-010P1BREADME.zh-CN.md README.ja.mdmultilingual paritymultilingual docs repeat stale version/tool-count claimsREADME.zh-CN.md:17, README.ja.md:17docsfixedlocalfix
RC19-011P2Asrc/cccc/contracts/v1/automation.py src/cccc/ports/mcp/server.pystate surface parityautomation action allows group_state=stopped, but MCP group-state schema advertised only active/idle/pausedsrc/cccc/ports/mcp/server.py:784, src/cccc/ports/mcp/server.py:1823, tests/test_mcp_group_set_state_stopped.py:1mcp-surfacefixedlocalfix
RC19-012P1Asrc/cccc/ports/mcp/server.pyactor identity alias paritycccc_automation_manage schema exposes actor_id, but resolver only accepted by, causing valid schema calls to failsrc/cccc/ports/mcp/server.py:130, tests/test_mcp_automation_manage_actor_id_alias.py:1mcp-surfacefixedlocalfix
RC19-013P2Bsrc/cccc/ports/im/bridge.py src/cccc/ports/im/commands.py docs/guide/im-bridge/slack.md docs/guide/im-bridge/discord.mdIM implicit-send parityIM bridge supports routed plain text as implicit send, but subscribe/help/docs still instructed users that plain chat is ignored on some platformssrc/cccc/ports/im/bridge.py:422, src/cccc/ports/im/commands.py:188, docs/guide/im-bridge/slack.md:161, docs/guide/im-bridge/discord.md:148im-bridgefixedlocalfix
RC19-014P1Adocs/standards/CCCC_DAEMON_IPC_V1.mddaemon IPC op coverageimplementation exposed 5 ops without standards entries (debug_snapshot, debug_tail_logs, debug_clear_logs, group_automation_reset_baseline, registry_reconcile)src/cccc/daemon/server.py:1910, src/cccc/daemon/server.py:2088, src/cccc/daemon/server.py:2129, src/cccc/daemon/server.py:2776, src/cccc/daemon/server.py:2970, tests/test_daemon_ipc_docs_parity.py:1core-platformfixedlocalfix
RC19-015P2Asrc/cccc/kernel/permissions.pypermission type-surface parityrequire_group_permission(..., action="group.settings_update") is used by daemon, but GroupAction literal omitted this value, weakening type-level parity and review signalsrc/cccc/daemon/server.py:2334, src/cccc/daemon/server.py:2431, src/cccc/daemon/server.py:2793, src/cccc/kernel/permissions.py:19, tests/test_permissions_group_settings_update.py:1core-platformfixedlocalfix
RC19-016P2Asrc/cccc/kernel/permissions.py src/cccc/daemon/server.pypermission guardrail coverageaction literals for require_group_permission / require_actor_permission had no automated parity guard, allowing future silent drift between daemon usage and permission typingsrc/cccc/daemon/server.py:2267, src/cccc/daemon/server.py:3344, tests/test_permissions_action_parity.py:1core-platformfixedlocalfix
RC19-017P2Bdocs/reference/architecture.md docs/vnext/RELEASE.mdrelease/docs truth consistencyarchitecture page had mixed blob path terminology (state/ledger/blobs vs state/blobs) and release install example pinned to stale rc18 literaldocs/reference/architecture.md:43, docs/reference/architecture.md:140, docs/vnext/RELEASE.md:51, tests/test_docs_blob_path_consistency.py:1docsfixedlocalfix
RC19-018P1Asrc/cccc/contracts/v1/event.pycontract model coveragedaemon emitted standard group.* events that were missing from _KIND_TO_MODEL (group.set_state, group.settings_update, group.automation_update), reducing contract-level validation for core writessrc/cccc/contracts/v1/event.py:14, src/cccc/contracts/v1/event.py:174, src/cccc/daemon/server.py:2403, src/cccc/daemon/server.py:2456, src/cccc/daemon/server.py:3274, tests/test_event_kind_model_parity.py:1core-platformfixedlocalfix
RC19-019P2Bdocs/reference/architecture.mdMCP surface narrative driftarchitecture doc still presented legacy MCP grouping and omitted active capability families (automation/terminal/debug), creating operator-level expectation driftdocs/reference/architecture.md:168, src/cccc/ports/mcp/server.py:1633, tests/test_docs_mcp_architecture_surface.py:1docsfixedlocalfix
RC19-020P2Asrc/cccc/contracts/v1/event.pyevent contract guardrailno automated internal parity check between EventKind literals and _KIND_TO_MODEL, allowing contract drift during incremental editssrc/cccc/contracts/v1/event.py:14, src/cccc/contracts/v1/event.py:174, tests/test_event_contract_internal_parity.py:1core-platformfixedlocalfix
RC19-021P2Asrc/cccc/daemon/server.pyautomation error ergonomicsstrict canonical-only automation payload is correct, but legacy payload failures returned opaque pydantic errors that caused repeated operator/agent misusesrc/cccc/daemon/server.py:732, src/cccc/daemon/server.py:2441, src/cccc/daemon/server.py:2657, tests/test_automation_manage_legacy_shape.py:1core-platformfixedlocalfix
RC19-022P2Asrc/cccc/daemon/streaming.pystream resume robustnesswhen since_event_id aged out of tail history, resume returned empty even with since_ts; this could drop recoverable events after reconnectsrc/cccc/daemon/streaming.py:253, src/cccc/daemon/streaming.py:263, tests/test_events_stream_resume_filtering.py:140core-platformfixedlocalfix
RC19-023P2Asrc/cccc/daemon/delivery.pydelivery config robustnessinvalid/negative delivery.min_interval_seconds could raise during flush path and silently stall PTY delivery retries due outer swallow; now parser is resilient and clamps to safe valuessrc/cccc/daemon/delivery.py:60, src/cccc/daemon/delivery.py:768, tests/test_delivery_throttle.py:47core-platformfixedlocalfix
RC19-024P2Asrc/cccc/kernel/settings.pyglobal default mutabilityget_runtime_pool() returned shared DEFAULT_RUNTIME_POOL objects when settings were absent; caller mutation could pollute defaults process-widesrc/cccc/kernel/settings.py:283, src/cccc/kernel/settings.py:45, tests/test_runtime_pool_defaults_immutable.py:1core-platformfixedlocalfix
RC19-025P2Asrc/cccc/kernel/settings.pyruntime_pool dirty-config tolerancemalformed priority/scenarios fields could propagate unsafe types into runtime selection path; parser now sanitizes with deterministic fallbacksrc/cccc/kernel/settings.py:34, src/cccc/kernel/settings.py:310, tests/test_runtime_pool_defaults_immutable.py:31core-platformfixedlocalfix
RC19-026P2Asrc/cccc/kernel/registry.pyregistry doc normalizationmalformed registry.json structures could leave groups/defaults effectively non-writable; load path now normalizes root and map types before usesrc/cccc/kernel/registry.py:31, src/cccc/kernel/registry.py:47, tests/test_registry_doc_normalization.py:1core-platformfixedlocalfix
RC19-027P2Asrc/cccc/kernel/group_template.pytemplate export/preview robustnessdirect int(...)/bool(...) conversion on group settings could mis-handle dirty values (\"false\" -> True) or raise; parser now uses tolerant numeric coercion and canonical bool coercionsrc/cccc/kernel/group_template.py:19, src/cccc/kernel/group_template.py:86, src/cccc/kernel/group_template.py:200, tests/test_group_template_dirty_settings_tolerance.py:1core-platformfixedlocalfix
RC19-028P2Asrc/cccc/kernel/actors.pyactor-id rule consistencydocumented actor-id rule forbids leading underscore, but validator allowed it via regex; validation now enforces first-char rule explicitlysrc/cccc/kernel/actors.py:38, src/cccc/kernel/actors.py:17, tests/test_actor_id_validation.py:1core-platformfixedlocalfix
RC19-029P2Asrc/cccc/daemon/ops/context_ops.pycontext sync atomicitycontext_sync batch could partially persist presence updates before later op failure, violating single-batch atomicity expected by operators/agentssrc/cccc/daemon/ops/context_ops.py:184, src/cccc/daemon/ops/context_ops.py:486, tests/test_context_sync_atomicity.py:1core-platformfixedlocalfix
RC19-030P2Asrc/cccc/ports/mcp/server.pyMCP boolean coercion parityMCP dispatcher used bool(...) for several flags, making "false" truthy and causing behavior drift in agent workflows (dry_run, include_archived, requires_ack, strip_ansi)src/cccc/ports/mcp/server.py:2332, src/cccc/ports/mcp/server.py:2339, src/cccc/ports/mcp/server.py:2391, src/cccc/ports/mcp/server.py:2529, src/cccc/ports/mcp/server.py:2550, tests/test_mcp_tool_bool_coercion.py:1mcp-surfacefixedlocalfix
RC19-031P2Asrc/cccc/daemon_main.pydaemon start safetyccccd start could spawn a duplicate daemon when pid-file process was alive but IPC ping failed, creating operational contention risksrc/cccc/daemon_main.py:45, src/cccc/daemon_main.py:54, tests/test_daemon_main_start_safety.py:1core-platformfixedlocalfix
RC19-032P2Asrc/cccc/kernel/context.pycontext dirty-data resiliencecontext/task/presence loaders previously failed whole-document parse on single malformed entry; now parse per-item with safe status/int coercion to preserve usable statesrc/cccc/kernel/context.py:181, src/cccc/kernel/context.py:314, src/cccc/kernel/context.py:547, tests/test_context_storage_dirty_tolerance.py:1core-platformfixedlocalfix
RC19-033P2Asrc/cccc/ports/web/app.pyweb settings API resiliencesettings endpoint used direct int(...) casts on group config fields; dirty values could crash API and break Settings UX. now uses safe int coercion with bounded fallbackssrc/cccc/ports/web/app.py:123, src/cccc/ports/web/app.py:1315, tests/test_web_group_settings_dirty_tolerance.py:1web-uxfixedlocalfix
RC19-034P2Asrc/cccc/ports/web/streams.pySSE tailer lifecycle hygieneshared SSE tailers were not removed from global registry after idle shutdown, allowing dead entries to accumulate in long-running web processessrc/cccc/ports/web/streams.py:234, src/cccc/ports/web/streams.py:252, tests/test_web_streams_tailer_cleanup.py:1web-uxfixedlocalfix
RC19-035P2Aweb/src/hooks/useGlobalEvents.tsglobal events fallback resilienceafter switching to polling fallback (SSE errors), hook never retried SSE, causing permanent polling mode and weaker real-time consistencyweb/src/hooks/useGlobalEvents.ts:31, web/src/hooks/useGlobalEvents.ts:39, web/src/hooks/useGlobalEvents.ts:49, web/src/hooks/useGlobalEvents.ts:64web-uxfixedlocalfix
RC19-036P2Asrc/cccc/kernel/messaging.py src/cccc/kernel/system_prompt.py src/cccc/daemon/server.pyactor enabled-flag coercion parityseveral actor-enabled checks still used bool(...); dirty values like "false" were treated as enabled, causing recipient routing, foreman inference, system prompt team summary, and auto-wake decisions to drift from operator intentsrc/cccc/kernel/messaging.py:30, src/cccc/kernel/system_prompt.py:32, src/cccc/daemon/server.py:1818, tests/test_enabled_flag_coercion.py:42, tests/test_enabled_flag_coercion.py:94core-platformfixedlocalfix
RC19-037P2Asrc/cccc/ports/im/subscribers.pyIM subscriber state resiliencea single malformed thread_id (e.g. "oops") or boolean string in im_subscribers.json could make load logic misparse or drop practical routing intent; parser now safely coerces bool/int values per entrysrc/cccc/ports/im/subscribers.py:14, src/cccc/ports/im/subscribers.py:56, tests/test_im_subscribers_tolerance.py:8im-bridgefixedlocalfix
RC19-038P2Asrc/cccc/cli.pyCLI env flag semanticsCCCC_WEB_RELOAD="false" was interpreted as enabled due raw bool(...) conversion; this could unexpectedly force reload mode and change startup behaviorsrc/cccc/cli.py:170, src/cccc/cli.py:457, tests/test_cli_env_bool_parsing.py:6core-platformfixedlocalfix
RC19-039P2Asrc/cccc/daemon/server.pydaemon settings response resiliencegroup_settings_update response assembly used direct int(...) casts and could fail when unrelated dirty values existed in group config, even though update patch itself was valid; response now uses safe coercion/clampingsrc/cccc/daemon/server.py:103, src/cccc/daemon/server.py:2425, tests/test_daemon_group_settings_dirty_tolerance.py:8core-platformfixedlocalfix
RC19-040P2Asrc/cccc/kernel/active.pyactive pointer dirty-data resilienceload_active() returned raw JSON as-is; non-dict payloads could propagate and break callers expecting mapping semantics. loader now normalizes and self-heals persisted shapesrc/cccc/kernel/active.py:14, src/cccc/kernel/active.py:18, tests/test_active_doc_normalization.py:8core-platformfixedlocalfix
RC19-041P2Asrc/cccc/kernel/blobs.pyblob path resolution hardeningattachment path root check used string-prefix comparison and was path-separator fragile; now uses Path.relative_to() after resolve for platform-safe containment validationsrc/cccc/kernel/blobs.py:93, src/cccc/kernel/blobs.py:100, tests/test_blob_path_resolution.py:8core-platformfixedlocalfix
RC19-042P2Asrc/cccc/daemon/automation.pyautomation running-state coercionautomation group_state action path used raw bool(group.doc["running"]); dirty string values like "false" could suppress required group_start. running-state now uses canonical coercion; idle-notify tail lines are also safely clamped.src/cccc/daemon/automation.py:1258, src/cccc/daemon/automation.py:1033, tests/test_automation_rules_constraints.py:75core-platformfixedlocalfix
RC19-043P2Asrc/cccc/ports/mcp/server.pyMCP group-list running parityMCP group_list used raw bool(...) for running, so dirty "false" values could be exposed to agents as running groups. now uses canonical bool coercion.src/cccc/ports/mcp/server.py:692, tests/test_mcp_tool_bool_coercion.py:6mcp-surfacefixedlocalfix
RC19-044P2Asrc/cccc/daemon/ops/template_ops.pytemplate settings bool coerciontemplate import/replace settings path used raw bool(...) on delivery/terminal toggles; string-bool inputs could drift. replace path now coerces bool canonically before persistence.src/cccc/daemon/ops/template_ops.py:228, src/cccc/daemon/ops/template_ops.py:234, tests/test_group_template_auto_mark_on_delivery.py:95core-platformfixedlocalfix
RC19-045P2Asrc/cccc/ports/mcp/server.pyMCP file-send path containment hardeningMCP file_send active-scope guard used string-prefix checks and was separator/platform fragile; now uses Path.relative_to() containment semantics.src/cccc/ports/mcp/server.py:582, tests/test_mcp_tool_bool_coercion.py:43mcp-surfacefixedlocalfix
RC19-046P2Asrc/cccc/ports/mcp/server.pyMCP sanitized state coercionMCP agent-facing group_info/actor_list returned raw running/enabled; dirty string values could be surfaced as truthy. sanitized output now canonically coerces booleans.src/cccc/ports/mcp/server.py:626, src/cccc/ports/mcp/server.py:648, tests/test_mcp_tool_bool_coercion.py:7, tests/test_mcp_tool_bool_coercion.py:20mcp-surfacefixedlocalfix
RC19-047P2Asrc/cccc/contracts/v1/actor.pyGroupState contract parityGroupState literal omitted stopped despite runtime/CLI/MCP supporting stop-state workflows; contract now includes stopped to remove type-surface drift.src/cccc/contracts/v1/actor.py:34, tests/test_actor_group_state_contract.py:6core-platformfixedlocalfix
RC19-048P2Asrc/cccc/ports/mcp/server.pyMCP helper bool coercion parityMCP helper functions (message_send/message_reply/file_send) previously used raw bool(reply_required) and could mis-handle string inputs when called directly; now canonical coercion is used end-to-end.src/cccc/ports/mcp/server.py:460, src/cccc/ports/mcp/server.py:519, src/cccc/ports/mcp/server.py:614, tests/test_mcp_tool_bool_coercion.py:103, tests/test_mcp_tool_bool_coercion.py:124mcp-surfacefixedlocalfix
RC19-049P2Asrc/cccc/runners/pty.pyPTY attach selector registration robustnessnon-writer clients with empty backlog could be registered with events=0, causing selector registration failure and silent attach drops; attach path now always registers READ and adds WRITE only when needed.src/cccc/runners/pty.py:476, tests/test_pty_attach_selector_events.py:27core-platformfixedlocalfix
RC19-050P2A.github/workflows/ci.yml .github/workflows/release.yml web/package.jsonweb type-safety release gateweb pipeline only ran vite build, which transpiles without strict TS checking; type errors in AutomationTab passed build and could ship. release gates now include web lint + web typecheck.web/src/components/modals/settings/AutomationTab.tsx:464, .github/workflows/ci.yml:26, .github/workflows/release.yml:31, web/package.json:11web-uxfixedlocalfix
RC19-051P2Aweb/src/components/SettingsModal.tsx web/src/components/modals/RecipientsModal.tsxmodal backdrop close semanticsbackdrop used onClick close; drag-select starting in modal and ending on backdrop could accidentally close dialogs and discard in-progress edits. close trigger now moves to backdrop onPointerDown for consistent mouse/touch behavior.web/src/components/SettingsModal.tsx:793, web/src/components/modals/RecipientsModal.tsx:31web-uxfixedlocalfix
RC19-052P2Btests/test_group_automation_baseline.pybaseline automation regression guardno regression test guarded the intended baseline semantics (new groups seed standup baseline, but user-cleared rules/snippets stay cleared). added targeted test to prevent future drift.tests/test_group_automation_baseline.py:1, src/cccc/kernel/group.py:29, src/cccc/daemon/server.py:679qafixedlocalfix
RC19-053P2Aweb/src/stores/useGroupStore.ts web/src/components/AppModals.tsxgroup selection coherence after external/templated conflictsweb group refresh kept stale selectedGroupId when selected group disappeared (or list became empty), leaving stale caches visible; template-create conflict path could select an existing group before sidebar metadata refresh. refresh now self-heals selection/cache and conflict branch refreshes groups first.web/src/stores/useGroupStore.ts:286, web/src/components/AppModals.tsx:392web-uxfixedlocalfix
RC19-054P2Aweb/src/components/SearchModal.tsx web/src/components/ContextModal.tsxmodal backdrop close safety paritythese modals still used backdrop onClick close, so drag-select ending on backdrop could dismiss modal unexpectedly and interrupt edits. backdrop close now uses onPointerDown target-check semantics consistently (including Context nested notify modal).web/src/components/SearchModal.tsx:181, web/src/components/ContextModal.tsx:387, web/src/components/ContextModal.tsx:1666web-uxfixedlocalfix
RC19-055P2Aweb/src/utils/groupStatus.tsgroup status precedence coherencestatus pill could show paused/idle semantics even when runtime was not running, creating operational confusion on completed groups. status resolution now always prioritizes running=false as STOP.web/src/utils/groupStatus.ts:3, web/src/utils/groupStatus.ts:30web-uxfixedlocalfix
RC19-056P2Aweb/src/components/modals/settings/GuidanceTab.tsxguidance editor modal close safety parityexpanded guidance editor modal still used backdrop onMouseDown close. aligned to onPointerDown semantics for consistent mouse/touch behavior and reduced accidental dismiss while selecting text.web/src/components/modals/settings/GuidanceTab.tsx:215web-uxfixedlocalfix
RC19-057P2Aweb/src/components/layout/GroupSidebar.tsx web/src/components/layout/MobileMenuSheet.tsxmobile navigation backdrop close safety paritymobile sidebar/menu backdrops used onClick close and could dismiss on unintended click synthesis during pointer interactions. aligned to onPointerDown target-check semantics for consistent touch/mouse behavior.web/src/components/layout/GroupSidebar.tsx:267, web/src/components/layout/MobileMenuSheet.tsx:62web-uxfixedlocalfix
RC19-058P2Aweb/src/services/api.tsauth-required callback resilienceAPI client only triggered auth-required callback from parsed JSON error payloads; HTTP 401 with non-JSON/empty bodies could skip re-auth prompt. apiJson and apiForm now trigger callback on raw resp.status === 401 as well.web/src/services/api.ts:120, web/src/services/api.ts:160web-uxfixedlocalfix
RC19-059P2Bdocs/reference/features.mdautomation docs parity driftfeature documentation still described automation as retained built-ins only and omitted active rule-engine semantics (trigger kinds, action constraints, one-time completion behavior, MCP manage surface), creating product expectation drift.docs/reference/features.md:153docsfixedlocalfix
RC19-060P2Bdocs/sdk/CLIENT_SDK.mdsdk draft state example driftSDK draft API snippet documented group_set_state as `activeidlepausedonly, while current user-facing state surface includesstopped`; example now updated to avoid copy-paste drift.docs/sdk/CLIENT_SDK.md:69docsfixed
RC19-061P2Bdocs/guide/web-ui.mdweb guide automation parity driftuser guide still documented automation as a few timeout knobs only and omitted current rules/actions/policy model, causing setup confusion for new users. automation section now reflects rule triggers, one-time semantics, and built-in policy controls.docs/guide/web-ui.md:119docsfixedlocalfix
RC19-062P2Bdocs/guide/getting-started/index.md docs/guide/faq.mdonboarding docs freshness driftguide/faq still pinned RC install examples and old source repo URL, and FAQ mentioned outdated MCP tool-count wording. onboarding docs now use non-stale install patterns and current source URL, with tool-surface wording made version-agnostic.docs/guide/getting-started/index.md:57, docs/guide/faq.md:10docsfixedlocalfix
RC19-063P2Bdocs/vnext/ARCHITECTURE.md docs/vnext/FEATURES.md docs/vnext/README.mdlegacy-doc misguidance riskvNext docs are historical snapshots but lacked explicit stale-risk warnings; they also contained obvious drift points (blob path/tool-count wording). added clear "historical snapshot" guardrails and corrected the most misleading stale examples.docs/vnext/ARCHITECTURE.md:6, docs/vnext/FEATURES.md:3, docs/vnext/README.md:6docsfixedlocalfix
RC19-064P2BREADME.md README.zh-CN.mdexternal product narrative gaptop-level readmes were technically accurate but too thin on product positioning/value narrative and adoption guidance, weakening release readiness for external users. readmes were rewritten to product-level framing (value proposition, fit/non-fit, quick adoption path, architecture intent).README.md:1, README.zh-CN.md:1docsfixedlocalfix
RC19-065P2Bdocs/guide/use-cases.md docs/guide/operations.md docs/reference/positioning.md docs/.vitepress/config.tsdocs information architecture gapdocs lacked scenario-driven onboarding and operator runbooks, and navigation did not map cleanly to user intent. added new pages (use cases, operations runbook, positioning) and wired navigation for role-oriented discovery.docs/guide/use-cases.md:1, docs/guide/operations.md:1, docs/reference/positioning.md:1, docs/.vitepress/config.ts:35docsfixedlocalfix

Status Definitions

  • open: discovered, not yet started
  • in_progress: owner working
  • fixed: patch merged and validated
  • accepted_risk: consciously deferred with rationale and expiry

Decision Rules

  • P0 cannot be accepted_risk for rc19.
  • Every accepted_risk row must include expiry criteria.

Released under the Apache-2.0 License.