Files
chanora/docs/governance/traceability-matrix.md
T
EdisonJwa 29a553d4e1 docs(traceability): add Deferred Work Watchlist (DW-001..DW-012); matrix v0.9.11
Convert prose-only deferrals scattered across SDD-120 §10, SDD-119 §3, DEC-032 resolution prose, and researcher Wave 4 Tier B notes into a single durable governance register. Watchlist is governance-layer only; no engineering-chain coverage rule relaxed.

Entries:

- DW-001 Dimension 3 production telemetry export (SDD-120 §10 / SysRS-308; P1; systems-requirements)

- DW-002 Build-failing hard CI gate vs. current advisory-only (SDD-120 §10; P1; systems-requirements)

- DW-003 Multi-host benchmarking (macOS Apple Silicon + Windows x86_64; SDD-120 §10 / SysDes-157; P2; system-architect)

- DW-004 IDE integration for cargo bench (SDD-120 §10; P3; builder)

- DW-005 Dart-side flutter_rust_bridge round-trip bench (SDD-120 §10 / Tier B4; P2; detailed-designer)

- DW-006 iOS deployment-target SoT consolidation (SDD-119 §3 v0.9.17; macOS half already closed by b23b46c; P2; detailed-designer)

- DW-007 Opus encode/decode latency under varied conditions (Tier B; P2; verification-engineer)

- DW-008 Resampler throughput at non-canonical rate pairs (Tier B; P3; verification-engineer)

- DW-009 Protocol forwarder loop tracing benchmark (Tier B; P3; verification-engineer)

- DW-010 Remove [patch.crates-io] cmake-rs pin once PR #257 merges and a release lands (DEC-032 resolution prose; P2; builder)

- DW-011 Linux SIGABRT root cause + graceful shutdown SRS/SDD chain (no source SDD yet; P0; debugger then systems-requirements)

- DW-012 Manual bench-baseline-update.yml workflow_dispatch to seed first real baseline (SDD-120 §6 / SAD-091; P1; operator action)

DW-010 and DW-006 had partial prose precedents in DEC-032 and SDD-119 respectively; neither was tracked in a watchlist. No duplicates introduced. ID convention (monotonic DW-NNN, retired-not-reused) established in the section intro. Doc-only change; no code touched.
2026-05-18 14:52:01 +08:00

97 KiB
Raw Blame History

Chanora Requirements and Design Traceability Matrix

Version: 0.9.11 Status: Baseline Candidate
Language: English
Product: Chanora
Lifecycle hierarchy: SysRS -> SysDes -> SRS -> SAD -> SDD

Repo path: docs/governance/traceability-matrix.md ---

1. Strict Hierarchy

The Chanora documentation hierarchy shall follow this structure strictly:

SysRS -> SysDes -> SRS -> SAD -> SDD

Direct-source rules:

Document Direct upstream source allowed
SysDes SysRS
SRS SysDes only
SAD SRS only
SDD SAD only

Prohibited direct links:

Document Prohibited direct source
SRS SysRS
SAD SysRS, SysDes
SDD SysRS, SysDes, SRS

2. Current Baseline Documents

Layer Current baseline ID range
SysRS chanora_SysRS_v0.7.md SysRS-001 through SysRS-285
SysDes chanora_SysDes_ASPICE_SYS3_v0.6.md SysDes-001 through SysDes-132
SRS chanora_SRS_ASPICE_SWE1_v0.5.md SRS-001 through SRS-184
SAD chanora_SAD_ASPICE_SWE2_v0.3.md SAD-001 through SAD-060
SDD chanora_SDD_ASPICE_SWE3_v0.3.md SDD-001 through SDD-070

3. Coverage Rules

Upstream layer Downstream layer Coverage rule
SysRS SysDes SysRS shall be fully covered by SysDes.
SysDes SRS Software-team-related SysDes items shall be fully covered by SRS.
SRS SAD SAD shall cover all SRS items.
SAD SDD SDD shall cover all SAD items.

4. Baseline Coverage Summary

Source Target
SysRS-001 through SysRS-257 SysDes-001 through SysDes-110
SysRS-258 through SysRS-285 SysDes-111 through SysDes-132
SysDes-001 through SysDes-110 SRS-001 through SRS-143
SysDes-111 through SysDes-132 SRS-144 through SRS-184
SRS-001 through SRS-030 SAD-032, SAD-039, SAD-040, SAD-041
SRS-031 through SRS-060 SAD-033, SAD-039, SAD-041
SRS-061 through SRS-090 SAD-034, SAD-039, SAD-041
SRS-091 through SRS-110 SAD-035
SRS-111 through SRS-124 SAD-036, SAD-050
SRS-125 through SRS-134 SAD-037, SAD-049
SRS-135 through SRS-143 SAD-038
SRS-144 through SRS-184 SAD-001 through SAD-031, SAD-039 through SAD-060
SAD-001 through SAD-007 SDD-001 through SDD-010
SAD-008 through SAD-011 SDD-011 through SDD-015
SAD-012 through SAD-016 SDD-016 through SDD-026
SAD-017 through SAD-019 SDD-027 through SDD-030
SAD-020 through SAD-027 SDD-031 through SDD-041
SAD-028 through SAD-031 SDD-042 through SDD-045
SAD-032 through SAD-038 SDD-046 through SDD-050
SAD-039 through SAD-045 SDD-046 through SDD-050, SDD-055, SDD-056
SAD-046 through SAD-050 SDD-051 through SDD-058, SDD-061
SAD-051 through SAD-060 SDD-057 through SDD-070

5. Change Impact Rules

Changed layer Required impact analysis
SysRS Review SysDes coverage; update SRS only through updated SysDes.
SysDes Review affected SRS requirements; SRS shall not bypass SysDes.
SRS Review affected SAD items; SAD shall link only to SRS.
SAD Review affected SDD items; SDD shall link only to SAD.
SDD Review implementation, unit construction, and verification evidence.

6. Traceability Verification Checklist

Check Expected result
SysDes references SysRS Allowed
SRS references SysRS Not allowed
SRS references SysDes Required
SAD references SRS Required
SAD references SysRS or SysDes Not allowed
SDD references SAD Required
SDD references SysRS, SysDes, or SRS Not allowed
Latest SAD ID range SAD-001 through SAD-060
Latest SDD ID range SDD-001 through SDD-070

8. Verification Work Product Traceability

Verification work products are downstream evidence-producing artifacts. They do not change the strict engineering hierarchy.

Verification document Direct verification source Coverage
chanora_SWE4_Unit_Verification_Plan_v0.1.md SDD SDD-001 through SDD-070
chanora_SWE5_Software_Integration_Verification_Plan_v0.1.md SAD and SDD SAD-001 through SAD-060 and SDD-001 through SDD-070
chanora_SWE6_Software_Verification_Plan_v0.1.md SRS SRS-001 through SRS-184
chanora_SYS4_System_Integration_Verification_Plan_v0.1.md SysDes SysDes-001 through SysDes-132
chanora_Verification_Master_Plan_v0.1.md Verification planning baseline SWE.4, SWE.5, SWE.6, SYS.4

9. Verification Change Impact

Changed artifact Verification impact
SDD Re-select SWE.4 unit verification measures and affected SWE.5 integration measures.
SAD Update SDD if needed and re-select affected SWE.5 integration measures.
SRS Update SAD/SDD if needed and re-select affected SWE.6 verification measures.
SysDes Update downstream engineering artifacts if needed and re-select affected SYS.4 measures.
SysRS Update SysDes and downstream artifacts if requirements intent changes.

10. Change History

Version Date Description
0.1.0 2026-05-14 Initial strict traceability matrix.
0.2.0 2026-05-14 Updated current baseline to SAD v0.3 and SDD v0.3, with SAD-001 through SAD-060 and SDD-001 through SDD-070 coverage.
0.3.0 2026-05-14 Added downstream verification work product traceability for SWE.4, SWE.5, SWE.6, and SYS.4.

11. Product Decision Traceability Addendum

Source Target
SysRS-286 through SysRS-295 SysDes-133 through SysDes-141
SysDes-133 through SysDes-141 SRS-185 through SRS-194
SRS-185 through SRS-194 SAD-061 through SAD-070
SAD-061 through SAD-070 SDD-071 through SDD-080
SDD-071 through SDD-080 SWE.4 addendum SWE4-UV-031 through SWE4-UV-034
SAD-061 through SAD-070 and SDD-071 through SDD-080 SWE.5 addendum SWE5-IV-014
SRS-185 through SRS-194 SWE.6 addendum SWE6-SV-016
SysDes-133 through SysDes-141 SYS.4 addendum SYS4-SIV-015

Baseline Candidate 0.9.1 Update

Version Date Description
0.9.1 2026-05-14 Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set.

12. Platform Release Policy Traceability

Policy document Covered decisions
docs/release/platform-release-policy.md iOS runtime target, Apple App Store Connect upload SDK gate, Android runtime target, Google Play target API gate

The Apple App Store Connect upload gate remains linked through:

SysRS-287 -> SysDes-134 -> SRS-186 -> SAD-062 -> SDD-072

The corrected effective date is:

Since 2026-04-28:
App Store Connect upload builds require Xcode 26 or later
using iOS 26 / iPadOS 26 SDK or later.

This build-SDK gate is separate from the iOS runtime deployment target.

Baseline Candidate 0.9.2 Update

Version Date Description
0.9.2 2026-05-14 Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage.

Desktop Push-to-Talk Traceability Addendum (Baseline Candidate 0.9.3)

Strict layered sourcing for the desktop PTT chain:

SysRS-296..302
  -> SysDes-142..148
  -> SRS-195..203
  -> SAD-071..079
  -> SDD-081..092
SysRS SysDes SRS SAD SDD
SysRS-296 (Focused PTT mandatory) SysDes-142, SysDes-144 SRS-201 SAD-075 SDD-089
SysRS-297 (Global PTT capability-dependent) SysDes-142 SRS-195 SAD-071 SDD-081
SysRS-298 (Capability exposed) SysDes-143, SysDes-147, SysDes-148 SRS-196 SAD-076, SAD-078 SDD-082, SDD-088, SDD-091
SysRS-299 (Windows ladder) SysDes-145 SRS-197 SAD-072 SDD-083, SDD-084
SysRS-300 (macOS permission-aware) SysDes-145 SRS-198 SAD-073 SDD-085
SysRS-301 (Linux GNOME-Wayland) SysDes-145 SRS-199 SAD-074 SDD-086
SysRS-302 (No raw key history) SysDes-146 SRS-202 SAD-077 SDD-090
(DEC-026 mouse buttons) SysDes-142, SysDes-145 SRS-200 SAD-080 SDD-093
(DEC-028 missed-key-up watchdog) SysDes-142, SysDes-144 SRS-203 SAD-079 SDD-092

Verification coverage:

SDD-081..092 -> SWE4-UV-035..039
SAD-071..079 + SDD-081..092 -> SWE5-IV-015
SRS-195..203 -> SWE6-SV-017
SysDes-142..148 -> SYS4-SIV-016

No forbidden direct links introduced: SRS continues to source from SysDes only, SAD from SRS only, SDD from SAD only.

Version Date Description
0.9.3 2026-05-15 Added desktop PTT traceability rows covering SysRS-296..302 -> SysDes-142..148 -> SRS-195..203 -> SAD-071..079 -> SDD-081..092 and the verification coverage onto SWE.4 / SWE.5 / SWE.6 / SYS.4.

Baseline Candidate 0.9.4 Update

Version Date Description
0.9.4 2026-05-15 Corrected SRS-200 traceability row: SAD coverage moves from the narrative SAD-072..074 annotation to the dedicated SAD-080, with SDD coverage in the new SDD-093. The change preserves strict layer discipline (SRS-200 -> SAD-080 -> SDD-093). No other rows mutate.

v1 Audio + PTT Lifecycle Traceability Addendum (Baseline Candidate 0.9.5)

Strict layered sourcing for the v1 audio + PTT lifecycle chain:

SysRS-303..304
  -> SysDes-149..151
  -> SRS-204..207
  -> SAD-081..083
  -> SDD-094..097
SysRS SysDes SRS SAD SDD Cross-reference
SysRS-303 (Transmit modes, lifecycle, listen-only, hard-mute) SysDes-149, SysDes-150 SRS-204, SRS-205, SRS-207 SAD-081, SAD-083 SDD-094, SDD-095, SDD-097 DEC-029 (native PTT backend locked), DEC-030 (VAD deferred)
SysRS-304 (PTT release tail) SysDes-151 SRS-206 SAD-082 SDD-096

No forbidden direct links introduced: SRS continues to source from SysDes only, SAD from SRS only, SDD from SAD only. DEC-029 / DEC-030 are governance cross-references and do not act as engineering-layer direct sources.

Version Date Description
0.9.5 2026-05-15 Added v1 audio + PTT lifecycle traceability rows covering SysRS-303..304 -> SysDes-149..151 -> SRS-204..207 -> SAD-081..083 -> SDD-094..097, with DEC-029 (Flutter hotkey packages rejected) and DEC-030 (VAD deferred to P1) recorded as governance cross-references.

Android P0 Reconciliation Traceability Addendum (Baseline Candidate 0.9.6)

This addendum incorporates the Wave 2A.2 / Wave 2B Android P0 deltas across SysRS, SRS, SAD, SDD, Verification, and Code. It does not relax any hierarchy rule: SRS continues to source from SysDes only, SAD from SRS only, SDD from SAD only, and Verification remains downstream evidence.

A. Changed item: SysRS-288 (API 24 -> API 28 per DEC-004)

SysRS-288 (API 28 baseline, DEC-004)
  -> SysDes-135 (Android platform baseline)
  -> SRS-187 (API 28 minimum)
  -> SAD-063 (Android build config isolation, API 28 baseline)
  -> SDD-073 (AndroidBuildConfig API 28, NDK ABIs, AAB, R8)
  -> SWE4-UV-040 (build-config unit), SWE5-IV-020 (AAB pipeline integration),
     SWE6-SV-022 (Android minimum API qualification),
     SYS4-SIV-015 (strengthened Android target gate)
  -> android-p0-acceptance TC-0.x (device matrix floor row), TC-13
Code anchors: apps/chanora_flutter/android/app/build.gradle.kts (SDD-073/SDD-109).
Governance cross-reference: decision-impact-assessment.md §2 row updated to API 28.

B. New items: SysRS-305, SysRS-306 (Android in-call mode + RECORD_AUDIO timing)

Both items currently trace through SysDes-135 as the nearest SysDes anchor. A SysDes follow-up is recommended to introduce dedicated derivation items so that the Source SysDes field for SRS-208/209/210..215 can be tightened beyond the general Android platform baseline (see §F).

SysRS-305 (Android in-call audio mode engagement)
  -> SysDes-135
  -> SRS-208 (in-call audio mode on voice-session connect/release)
  -> SAD-084 (AndroidAudioModeController)
  -> SDD-108 (AndroidAudioModeController snapshot/restore + refcount)
  -> SWE4-UV-045 (unit), SWE5-IV-018 (FGS + mode round-trip),
     SWE6-SV-020 (in-call mode round-trip qualification),
     SYS4-SIV-017 (in-call mode + Bluetooth SCO awareness)
  -> android-p0-acceptance TC-6, TC-3.4
SysRS-306 (RECORD_AUDIO runtime acquisition + listen-only fallback)
  -> SysDes-135
  -> SRS-209 (RECORD_AUDIO + listen-only fallback)
  -> SAD-085 (Android permission adapter, listen-only first-class)
  -> SDD-106 (AndroidPermissionRequester)
  -> SWE4-UV-041 (unit state machine), SWE5-IV-017 (permission deny + FGS not started + listen-only),
     SWE6-SV-019 (RECORD_AUDIO timing + listen-only qualification)
  -> android-p0-acceptance TC-2
Code anchors: AndroidPermissionRequester.kt (SDD-106), MainActivity.kt (SDD-106).

C. New SRS items derived from SysDes-135 for the Android voice audio backend

SRS Source SysDes SysRS addressed SAD SDD SWE.4 SWE.5 SWE.6 Acceptance
SRS-210 (Android mouth-to-ear latency ≤150 ms low-latency / ≤250 ms fallback) SysDes-135 SysRS-055, SysRS-288 SAD-081 (audio engine) + SAD-084 (mode controller dependency) PENDING_SDD (latency budget item — reserved as SDD-111) PENDING PENDING PENDING TC-6 supporting (mode → routing), latency measurement deferred to P1 device lab
SRS-211 (AAudio input preset VOICE_COMMUNICATION + fallback) SysDes-135 SysRS-055, SysRS-305 SAD-081 PENDING_SDD (reserved as SDD-112) PENDING PENDING PENDING TC-6 indirect
SRS-212 (Hardware AEC/NS/AGC engagement + software fallback) SysDes-135 SysRS-055, SysRS-305 SAD-081 PENDING_SDD (reserved as SDD-113) PENDING PENDING PENDING TC-6 indirect; AndroidManifest.xml carries SDD-113 trace comment
SRS-213 (AAUDIO_USAGE_VOICE_COMMUNICATION / CONTENT_TYPE_SPEECH on output) SysDes-135 SysRS-305 SAD-081 PENDING_SDD (reserved as SDD-114) PENDING PENDING PENDING TC-6 supporting
SRS-214 (AAUDIO sharing-mode EXCLUSIVE best-effort + SHARED fallback) SysDes-135 SysRS-055 SAD-081 PENDING_SDD (reserved as SDD-115) PENDING PENDING PENDING
SRS-215 (Foreground service hosting for background mic capture) SysDes-135 SysRS-217, SysRS-111 chain SAD-086 (AndroidVoiceForegroundService) SDD-107 (AndroidVoiceForegroundService) + PENDING_SDD reserved as SDD-116 for foregroundServiceType="microphone" manifest binding SWE4-UV-044 (FGS lifecycle) SWE5-IV-016 (JNI → FGS), SWE5-IV-017 (permission deny → FGS not started) SWE6-SV-018 (FGS satisfies SRS-111) TC-3, TC-3.4

PENDING_SDD rows above are reserved for the in-flight detailed-designer task that authors SDD-111..SDD-116. At the time of this revision, the SDD file contains SDD-001..SDD-110 only. See §G.

Status pointer (v0.9.7+): SDD-111..SDD-116 have since been authored in docs/architecture/sdd.md (SDD v0.9.9). For the resolved SRS-210..SRS-215 → SDD-111..SDD-116 mapping, see the "Android Voice Audio Backend SDD Closure Addendum (Baseline Candidate 0.9.7)" below and its subsequent §A delta inventory. The PENDING_SDD markers above are retained for historical context only.

D. New SAD items (Android-specific allocations)

SAD Source SRS SDD Code anchors
SAD-084 (AndroidAudioModeController) SRS-208 SDD-108 (Android Kotlin scaffolding pending; AndroidManifest.xml carries SDD-108 trace)
SAD-085 (Android permission adapter, listen-only first-class) SRS-209 SDD-106 AndroidPermissionRequester.kt, MainActivity.kt
SAD-086 (AndroidVoiceForegroundService) SRS-111 (Android-specific allocation) SDD-107 AndroidVoiceForegroundService.kt, AndroidManifest.xml

E. New / refreshed SDD items and their Code + Verification anchors

SDD Source SAD Code anchor (this session) Verification
SDD-028 (BackIntentService — expanded full spec) SAD-018 BackIntentBridge.kt, back_intent_policy.dart, back_intent_service.dart, MainActivity.kt, AndroidManifest.xml SWE4-UV-042, SWE5-IV-019, SWE6-SV-021, TC-11, TC-12
SDD-073 (AndroidBuildConfig — refreshed: API 28, NDK ABIs, AAB, R8) SAD-063 apps/chanora_flutter/android/app/build.gradle.kts SWE4-UV-040, SWE5-IV-020, SWE6-SV-022, SWE6-SV-023, SYS4-SIV-015 (strengthened), SYS4-SIV-018, TC-0.x, TC-13
SDD-105 (AndroidJniBootstrap) SAD-063 (Android platform services bootstrap) ChanoraApplication.kt, MainActivity.kt SWE4-UV-043, SWE5-IV-016
SDD-106 (AndroidPermissionRequester) SAD-085 AndroidPermissionRequester.kt, MainActivity.kt SWE4-UV-041, SWE5-IV-017, SWE6-SV-019, TC-2
SDD-107 (AndroidVoiceForegroundService) SAD-086 AndroidVoiceForegroundService.kt, AndroidManifest.xml SWE4-UV-044, SWE5-IV-016, SWE5-IV-017, SWE5-IV-018, SWE6-SV-018, TC-3
SDD-108 (AndroidAudioModeController) SAD-084 (Kotlin controller scaffolding pending; AndroidManifest.xml carries SDD-108 trace) SWE4-UV-045, SWE5-IV-018, SWE6-SV-020, SYS4-SIV-017, TC-6
SDD-109 (AndroidAaBuildPipeline) SAD-063 / SAD-037 apps/chanora_flutter/android/app/build.gradle.kts SWE5-IV-020, SWE6-SV-023, SYS4-SIV-018, TC-13
SDD-110 (AndroidPttCapability — Focused only on Android) SAD-086 (Android-specific PTT allocation) / SAD-075 (Focused) (capability badge wiring; pending Kotlin/Dart) SWE4-UV-046, SWE6-SV-024, TC-4, TC-10
SDD-111 (reserved — AndroidVoiceLatencyBudget for SRS-210) SAD-081 PENDING_SDD PENDING
SDD-112 (reserved — AAudioInputPreset for SRS-211) SAD-081 PENDING_SDD PENDING
SDD-113 (reserved — AndroidHardwareEffects for SRS-212; AndroidManifest.xml already carries SDD-113 trace) SAD-081 AndroidManifest.xml (trace-only; spec PENDING) PENDING
SDD-114 (reserved — AAudioOutputUsage for SRS-213) SAD-081 PENDING_SDD PENDING
SDD-115 (reserved — AAudioSharingMode for SRS-214) SAD-081 PENDING_SDD PENDING
SDD-116 (reserved — ForegroundServiceTypeManifest for SRS-215) SAD-086 AndroidManifest.xml (trace-only; spec PENDING) PENDING

F. Code → SDD / SRS back-fill trace summary (this session)

Code path SDD trace SRS trace (via test header where applicable)
apps/chanora_flutter/test/widget_test.dart SRS header comments added (verification stub)
apps/chanora_flutter/test/alpha_e2e_test.dart SRS header comments added
apps/chanora_flutter/test/beta_e2e_test.dart SRS header comments added
apps/chanora_flutter/android/app/src/main/AndroidManifest.xml SDD-107, SDD-108, SDD-113 (reserved) indirectly SRS-111, SRS-208, SRS-212
apps/chanora_flutter/android/app/build.gradle.kts SDD-073, SDD-109 SRS-187, SRS-188, SRS-119
.../kotlin/.../ChanoraApplication.kt SDD-105 SRS via SAD-063 → SRS-187
.../kotlin/.../MainActivity.kt SDD-105, SDD-028, SDD-106 SRS-163, SRS-209
.../kotlin/.../AndroidVoiceForegroundService.kt SDD-107 SRS-111
.../kotlin/.../AndroidPermissionRequester.kt SDD-106 SRS-209
.../kotlin/.../BackIntentBridge.kt SDD-028 SRS-163
lib/services/back_intent_policy.dart SDD-028 SRS-163
lib/services/back_intent_service.dart SDD-028 SRS-163

G. Verification document anchors added this session

SWE4-UV-040..046  -> SDD-028 (exp), SDD-073 (ref), SDD-105, SDD-106, SDD-107, SDD-108, SDD-110
SWE5-IV-016..020  -> SAD-018, SAD-063, SAD-077, SAD-081, SAD-084, SAD-085, SAD-086
                  + SDD-028 (exp), SDD-073 (ref), SDD-105..110
SWE6-SV-018..024  -> SRS-111, SRS-119, SRS-163, SRS-187, SRS-188, SRS-208, SRS-209
SYS4-SIV-015 (strengthened), SYS4-SIV-017, SYS4-SIV-018
                  -> SysDes-135 (Android subset of SysDes-133..148)
docs/verification/android-p0-acceptance.md TC-1..TC-13
                  -> cross-links SRS-111, SRS-119, SRS-163, SRS-187, SRS-188, SRS-208, SRS-209,
                     SRS-201; SDD-028, SDD-106..110; DEC-004, DEC-006, DEC-027

H. Orphans, Conflicts, and Dangling References

H.1 Orphans (items whose upward trace is incomplete pending an owner action)

Orphan ID Issue Proposed owner
SRS-210..215 (Source SysDes = SysDes-135 generic) SysDes lacks dedicated derivation items for the Android voice audio backend; SRS-210..215 currently reuse the generic Android platform baseline. Per SRS-187 §18 self-flag, a SysDes follow-up is required. system-designer (add SysDes derivation items downstream of SysRS-055 / SysRS-305 covering the Android voice audio backend)
SRS-208 / SRS-209 (Source SysDes = SysDes-135 generic) Same shape: SysDes-135 reused for SysRS-305/306 pending dedicated SysDes items. system-designer
SDD-111..SDD-116 Not yet authored at read time; SRS-210..215 lack a direct SDD anchor. Reserved as PENDING_SDD in §C / §E. detailed-designer (in flight per the task brief)

H.2 Conflicts

Conflict Detail Proposed resolution path
SRS-111 dual allocation: SAD-036 (cross-cutting diagnostics/foreground-service range) AND SAD-086 (Android-specific FGS) SAD §coverage row explicitly states "SAD-036 retains the cross-cutting diagnostics allocation for the SRS-111124 range" while SAD-086 is the Android-specific allocation. The coverage rows at lines 6471 of this matrix still show SRS-111..124 → SAD-036, SAD-050. This is acceptable as a cross-cutting + platform-specific split (SAD-036 retains the cross-platform allocation; SAD-086 is the Android specialisation), and not a true conflict, but it should be made explicit in §4 baseline-coverage rows. Alternative: a SysRS split that separates the cross-platform foreground-service obligation from the Android-specific one — recommended only if future audits flag the dual allocation as ambiguous. software-architect to record the cross-cutting + platform-specific split as the intended pattern in SAD §coverage; OR system-requirements to split SysRS upstream if a single SAD allocation is preferred by ASPICE auditors. Do not resolve here by editing upstream docs.
SDD-110 source SAD ambiguity SDD-110 (AndroidPttCapability) sources from "SAD-086 Android-specific PTT allocation / SAD-075 Focused PTT". SAD-086 is defined as AndroidVoiceForegroundService, not as the PTT allocation. The Android-specific PTT obligation traces through SysRS-298 (capability exposure) → SRS-196 / SAD-076 (capability badge) and SysRS-297 → SRS-195 / SAD-071 (Global PTT capability-dependent). SDD-110's anchor should be SAD-076 + SAD-071, not SAD-086. software-architect / detailed-designer to correct the Source SAD field on SDD-110. Flag-only here.

H.3 Dangling references

Source row Target ID Status
SRS-210..215 → "SDD-111..SDD-116" (reserved) SDD-111..SDD-116 Not yet present in docs/architecture/sdd.md (file ends at SDD-110). Tracked as PENDING_SDD per §C and §E. Not a defect — the in-flight detailed-designer task owns these.
android-p0-acceptance.md TC-13 → "SRS-119" + "SRS-188" + "SDD-109" all present OK
SAD-086 narrative anchor for SDD-110 (PTT) SAD-086 exists but its scope is FGS, not PTT Dangling-by-scope (see §H.2).

I. Items intentionally left as PENDING_*

ID Reason
SDD-111 Reserved for SRS-210 Android voice latency budget. PENDING_SDD.
SDD-112 Reserved for SRS-211 AAudio input preset. PENDING_SDD.
SDD-113 Reserved for SRS-212 hardware AEC/NS/AGC engagement (AndroidManifest.xml already carries the trace comment in anticipation). PENDING_SDD.
SDD-114 Reserved for SRS-213 AAudio output usage/content-type. PENDING_SDD.
SDD-115 Reserved for SRS-214 AAudio sharing-mode best-effort. PENDING_SDD.
SDD-116 Reserved for SRS-215 foreground-service-type manifest binding (AndroidManifest.xml already carries the trace comment in anticipation). PENDING_SDD.
SWE.4 / SWE.5 / SWE.6 anchors for SRS-210..215 PENDING — to be added by verification-planner once SDD-111..116 land.

J. Decision

TRACEABILITY_GAPS_REMAIN. The chain SysRS-288 / 305 / 306 → SRS-187 / 208 / 209 → SAD-063 / 084 / 085 / 086 → SDD-073 / 106 / 107 / 108 → Code → SWE.4 / SWE.5 / SWE.6 / SYS.4 / android-p0-acceptance is closed end to end. The gaps that remain are:

  1. SDD-111..SDD-116 not yet authored — blocks the downward chain from SRS-210..215 to Code and Verification. Owner: detailed-designer (in flight per task brief).
  2. SysDes lacks dedicated derivation items for the Android voice audio backend and for SysRS-305 / SysRS-306 — SRS-208..215 currently reuse SysDes-135 as a generic anchor. Owner: system-designer.
  3. SDD-110 Source SAD field cites SAD-086 (which is the FGS allocation) instead of the SAD-071 / SAD-076 PTT capability allocations. Owner: detailed-designer (one-line correction in SDD).

No code-without-SDD-or-upstream-trace condition was found: every code anchor added this session carries an SDD or SRS reference comment, and every SDD reference resolves to an existing SDD item (SDD-028, SDD-073, SDD-105..110). BLOCKED_REQUIREMENT_GAP is not raised.

  1. detailed-designer — author SDD-111..SDD-116 covering SRS-210..215; correct the Source SAD field on SDD-110 to cite SAD-071 / SAD-076.
  2. system-designer — introduce dedicated SysDes derivation items for SysRS-305 / SysRS-306 and for the Android voice audio backend so that SRS-208..215 can tighten their Source SysDes away from the generic SysDes-135.
  3. verification-planner — once SDD-111..116 land, extend SWE.4 / SWE.5 / SWE.6 to cover SRS-210..215 and add the corresponding android-p0 acceptance test rows.
  4. software-architect — formalise the SAD-036 + SAD-086 cross-cutting
    • platform-specific allocation pattern explicitly in SAD §coverage so it is not re-flagged as a dual-allocation conflict by future audits.
Version Date Description
0.9.6 2026-05-18 Added Android P0 reconciliation addendum incorporating SysRS-288 (API 28 per DEC-004), SysRS-305 (in-call audio mode), SysRS-306 (RECORD_AUDIO timing); SRS-187 (refreshed), SRS-208, SRS-209, SRS-210..215; SAD-063 (refreshed), SAD-084, SAD-085, SAD-086; SDD-028 (expanded), SDD-073 (refreshed), SDD-105..SDD-110, with SDD-111..SDD-116 reserved as PENDING_SDD; SWE4-UV-040..046, SWE5-IV-016..020, SWE6-SV-018..024, SYS4-SIV-015 (strengthened) + SYS4-SIV-017..018, and android-p0-acceptance.md TC-1..TC-13. Code back-fill traces recorded for AndroidManifest.xml, build.gradle.kts, ChanoraApplication.kt, MainActivity.kt, AndroidVoiceForegroundService.kt, AndroidPermissionRequester.kt, BackIntentBridge.kt, back_intent_policy.dart, back_intent_service.dart, and the three Flutter test files. Three gaps flagged: SDD-111..116 in flight, SysDes dedicated derivation items pending for SysRS-305/306 + Android voice audio backend, SDD-110 Source SAD field cites wrong SAD ID. TRACEABILITY_GAPS_REMAIN (no BLOCKED_REQUIREMENT_GAP).

Android Voice Audio Backend SDD Closure Addendum (Baseline Candidate 0.9.7)

This addendum closes the PENDING_SDD markers recorded in §C / §E / §I of the 0.9.6 addendum, after docs/architecture/sdd.md was extended with SDD-111..SDD-116 (Android voice audio backend detailed design, sourced from SAD-077 / SAD-081 / SAD-084 / SAD-085 / SAD-086 per the SDD v0.9.9 revision). Per the strict hierarchy rules in §1, SRS-210..SRS-215 continue to source from SysDes only; SDD-111..SDD-116 continue to source from SAD only. No forbidden direct links are introduced.

A. SRS-210..SRS-215 → SDD-111..SDD-116 closure mapping

The following table supersedes the corresponding rows in §C of the 0.9.6 addendum. Source SysDes remains SysDes-135 pending the system-designer follow-up recorded in §B below; the SDD anchors are now concrete.

SRS Source SysDes SAD SDD (closed) SWE.4 / SWE.5 / SWE.6 Acceptance
SRS-210 (Android mouth-to-ear latency ≤150 ms low-latency / ≤250 ms fallback) SysDes-135 SAD-081 (audio engine) + SAD-084 (mode controller dependency) SDD-111 (AndroidVoiceAudioBackend) + SDD-112 (AndroidVoiceStreamConfig — performance mode) + SDD-116 (AndroidVoiceVerificationMatrix — latency observation contract) PENDING (verification-planner) TC-6 supporting; device-lab latency measurement per SDD-116
SRS-211 (AAudio input preset VOICE_COMMUNICATION + fallback) SysDes-135 SAD-081 SDD-112 (AndroidVoiceStreamConfig — input preset retry ladder) PENDING (verification-planner) TC-6 indirect
SRS-212 (Hardware AEC/NS/AGC engagement + software fallback) SysDes-135 SAD-081 SDD-113 (AndroidHardwareAudioEffects — session-id-bound engagement + per-effect software fallback) PENDING (verification-planner) TC-6 indirect; AndroidManifest.xml carries SDD-113 trace comment
SRS-213 (AAUDIO_USAGE_VOICE_COMMUNICATION / CONTENT_TYPE_SPEECH on output) SysDes-135 SAD-081 SDD-112 (AndroidVoiceStreamConfig — output usage + content type) PENDING (verification-planner) TC-6 supporting
SRS-214 (AAUDIO sharing-mode EXCLUSIVE best-effort + SHARED fallback) SysDes-135 SAD-081 SDD-112 (AndroidVoiceStreamConfig — sharing-mode fallback) PENDING (verification-planner)
SRS-215 (Foreground service hosting for background mic capture) SysDes-135 SAD-086 (AndroidVoiceForegroundService) SDD-107 (AndroidVoiceForegroundService) + SDD-114 (AndroidVoiceManifestRequirements — foregroundServiceType="microphone" manifest binding) + SDD-115 (AndroidVoiceLifecycleSequencing — service-start-before-stream-open ordering) SWE4-UV-044, SWE5-IV-016/017/018, SWE6-SV-018 TC-3, TC-3.4

B. Code-anchor refresh for SDD-114 and SDD-115

The 0.9.6 §F table is extended with the following anchors that newly resolve to concrete SDD items (replacing the PENDING_SDD reservations for SRS-212 / SRS-215 manifest binding):

Code path SDD trace SRS trace (indirect) Status
apps/chanora_flutter/android/app/src/main/AndroidManifest.xml SDD-105 (application element), SDD-107, SDD-108, SDD-113, SDD-114 (back-fill: all voice-subsystem manifest declarations), SDD-116 (device-matrix observation contract — trace-only, no manifest delta) SRS-111, SRS-208, SRS-212, SRS-215 Confirmed: SDD-105 application-element trace and SDD-107/108/113 traces present after Wave 2B-1 + fast-builder fix
apps/chanora_flutter/android/app/src/main/kotlin/app/chanora/chanora_flutter/MainActivity.kt SDD-105 (bootstrap), SDD-028 (back-intent), SDD-106 (permission requester, with M-4 fix) SRS-163, SRS-209 Confirmed after fast-builder M-4 fix
crates/chanora_audio/src/engine.rs SDD-115 (AndroidVoiceLifecycleSequencing — forward/reverse order; supersedes the prior no-op rationale comment at engine.rs:316-323 per SDD-113 item 5) SRS-210..215 (via SDD-115) PENDING_CODE — lifecycle sequencing implementation not yet landed; SDD-115 anchor recorded here so future code edit carries the trace

C. Remaining open issues (carried forward from prior auditor pass)

The closure of SDD-111..SDD-116 does not resolve three orthogonal issues that remain owned by other agents. They are recorded here unchanged from the 0.9.6 §H / §J reading, with proposed owners restated for clarity.

# Open issue Proposed owner Resolution scope
1 SDD-110 Source SAD field cites SAD-086 (FGS), should cite SAD-071 (Global PTT capability-dependent) and/or SAD-076 (capability badge). SDD-110 anchors the Android PTT capability; SAD-086 is the FGS allocation, not the PTT allocation. The matrix continues to record SDD-110's current Source SAD field as authored (SAD-086 / SAD-075). This is an SDD-content fix, NOT a matrix fix. detailed-designer One-line correction to SDD-110's Source SAD field in docs/architecture/sdd.md. Do not edit upstream from the matrix.
2 SysDes-135 generic reuse for SysRS-305, SysRS-306, and SRS-208..SRS-215. SysDes-135 is the Android platform baseline; using it as the direct upstream for the in-call mode, RECORD_AUDIO timing, and voice-audio-backend SRS items is overloaded. SRS hierarchy discipline is preserved (SRS continues to source from SysDes only), but the SysDes anchor will be tightened in the next SysDes revision by introducing dedicated derivation items downstream of SysRS-055 / SysRS-305 / SysRS-306. system-architect (system-designer) Add dedicated SysDes items; then SRS-208..215 Source SysDes fields can be re-pointed in a follow-up SRS revision.
3 SRS-111 dual allocation: SAD-036 (cross-cutting diagnostics/foreground-service range) AND SAD-086 (Android-specific FGS). Acknowledged as the intended cross-cutting + platform-specific allocation pattern, not a true conflict. The pattern should be formalised explicitly in SAD §coverage so future audits do not re-flag it. software-architect Add an explicit "cross-cutting + platform-specific allocation" note to SAD §coverage. Do not resolve here.

D. Decision

TRACEABILITY_GAPS_REMAIN. The PENDING_SDD blockage that prevented SRS-210..SRS-215 from reaching the SDD layer is now closed: every SRS in that range has at least one concrete SDD anchor (SDD-111..SDD-116, plus the previously-landed SDD-107 for SRS-215). The end-to-end chain SysRS → SysDes → SRS → SAD → SDD now closes for SRS-210..SRS-215.

Remaining gaps are non-blocking with respect to BLOCKED_REQUIREMENT_GAP:

  1. SWE.4 / SWE.5 / SWE.6 verification anchors for SRS-210..SRS-215 — PENDING for verification-planner now that SDD-111..SDD-116 are authored. Acceptance test coverage in android-p0-acceptance.md TC-1..TC-13 already cross-links SRS-210..215 indirectly via TC-6 and TC-3 / TC-3.4; dedicated SWE.4 / SWE.5 / SWE.6 rows are still owed.
  2. crates/chanora_audio/src/engine.rs lifecycle sequencing implementation per SDD-115 — PENDING_CODE; SDD-115 anchor recorded in §B above so the future code edit is pre-traced and the prior no-op rationale comment at engine.rs:316-323 is superseded per SDD-113 item 5.
  3. Open issues 13 from §C above (SDD-110 Source SAD correction, SysDes-135 generic reuse tightening, SRS-111 dual-allocation pattern formalisation) — each carries a named proposed owner. None are matrix-layer fixes.

BLOCKED_REQUIREMENT_GAP is not raised. No code anchor exists without either an SDD reference or an upstream-traceable SRS comment. The engine.rs SDD-115 PENDING_CODE row in §B is a forward-looking trace reservation for a code change that has not been made; it is not a code-without-SDD condition.

  1. verification-planner — extend SWE.4 / SWE.5 / SWE.6 to cover SRS-210..SRS-215 against SDD-111..SDD-116, and add corresponding android-p0-acceptance test rows (particularly latency measurement per SDD-116, hardware-effect attach evidence per SDD-113, and lifecycle ordering per SDD-115).
  2. detailed-designer — correct the Source SAD field on SDD-110 in docs/architecture/sdd.md from SAD-086 to SAD-071 / SAD-076 (one- line change; see open issue 1 in §C).
  3. system-architect — introduce dedicated SysDes derivation items downstream of SysRS-055 / SysRS-305 / SysRS-306 covering the Android voice audio backend, in-call mode engagement, and RECORD_AUDIO timing, so that SRS-208..SRS-215 can tighten their Source SysDes fields away from the generic SysDes-135 (see open issue 2 in §C).
  4. software-architect — formalise the SAD-036 + SAD-086 cross- cutting + platform-specific allocation pattern explicitly in SAD §coverage (see open issue 3 in §C).
  5. codex-builder — implement the SDD-115 lifecycle sequencing in crates/chanora_audio/src/engine.rs, superseding the prior no-op rationale comment at engine.rs:316-323 per SDD-113 item 5 (see §B PENDING_CODE row).
Version Date Description
0.9.7 2026-05-18 Closed PENDING_SDD markers for SRS-210..SRS-215 after SDD-111..SDD-116 landed in docs/architecture/sdd.md (Android voice audio backend detailed design, SDD v0.9.9). Concrete SRS → SDD mapping recorded in §A: SRS-210 → SDD-111+112+116; SRS-211 → SDD-112; SRS-212 → SDD-113; SRS-213 → SDD-112; SRS-214 → SDD-112; SRS-215 → SDD-107+114+115. Code-anchor refresh in §B added SDD-114 trace to AndroidManifest.xml (back-fill of Wave 2B-1 manifest declarations), confirmed SDD-105 application-element trace and SDD-106 M-4 fix on MainActivity.kt after fast-builder pass, and recorded SDD-115 as PENDING_CODE on crates/chanora_audio/src/engine.rs (lifecycle sequencing implementation not yet landed; SDD-113 item 5 supersedes the prior no-op rationale comment). Three open issues carried forward unchanged: SDD-110 Source SAD field cites SAD-086 instead of SAD-071 / SAD-076 (owner: detailed-designer); SysDes-135 generic reuse for SysRS-305/306 + SRS-208..215 (owner: system-architect); SRS-111 dual allocation SAD-036 + SAD-086 (owner: software-architect). TRACEABILITY_GAPS_REMAIN; BLOCKED_REQUIREMENT_GAP not raised.

End-to-End Closure Addendum (Baseline Candidate 0.9.8)

This addendum incorporates the deltas accumulated since the 0.9.7 addendum across SysDes, SRS, SAD, SDD, and Code. It records the resolution of the three open issues carried forward by the 0.9.7 audit and re-runs the end-to-end traceability check for the six chains exercised by the most recent sub-wave. Strict hierarchy discipline is preserved at every layer (SysDes -> SysRS, SRS -> SysDes, SAD -> SRS, SDD -> SAD, verification downstream of all four).

A. Delta inventory (since 0.9.7)

A.1 SysDes (docs/architecture/sysdes.md, baseline 0.9.6 → 0.9.7)

New SysDes Subsystem Source SysRS Replaces (generic anchor)
SysDes-152 Android in-call audio mode subsystem SysRS-305 SysDes-135 (generic Android baseline)
SysDes-153 Android RECORD_AUDIO runtime permission acquisition flow SysRS-306 SysDes-135 (generic)
SysDes-154 Android voice audio backend subsystem SysRS-055 (+ SysRS-305 refinement) SysDes-135 (generic)
SysDes-155 macOS runtime baseline (parallel to SysDes-133 iOS / SysDes-135 Android) SysRS-002, SysRS-050, SysRS-193 none (new platform-baseline element)

SysDes §17 SysRS-coverage statement extended to record the SysRS-305/306 → SysDes-152..154 mapping and the SysRS-002/050/193 macOS-slice → SysDes-155 mapping; SysDes-135 retained unchanged as the platform-baseline context item.

A.2 SRS (docs/requirements/srs.md, baseline 0.9.7 → 0.9.8)

Source SysDes retargeted on the eight Android voice-audio SRS items:

SRS Primary Source SysDes (new) Secondary Source SysDes
SRS-208 SysDes-152 SysDes-135 (context)
SRS-209 SysDes-153 SysDes-135 (context)
SRS-210 SysDes-154 SysDes-135 (context)
SRS-211 SysDes-154 SysDes-135 (context)
SRS-212 SysDes-154 SysDes-135 (context)
SRS-213 SysDes-154 SysDes-152 (in-call-mode routing precondition), SysDes-135 (context)
SRS-214 SysDes-154 SysDes-135 (context)
SRS-215 SysDes-154 SysDes-135 (context)

No SRS text/behavioural content was modified.

A.3 SAD (docs/architecture/sad.md, baseline 0.9.6 → 0.9.7 → 0.9.8)

  • §24.1 "Cross-cutting + platform-specific allocations" subsection added with the SRS-111 ↔ SAD-036 + SAD-086 worked example. §24.2 SRS-111..124 matrix row annotated to record the dual allocation explicitly.
  • SAD-087 (macOS runtime baseline; deployment-target isolation in apps/chanora_flutter/macos/chanora_bridge.podspec, universal-binary arm64+x86_64 lipo packaging, .framework Versions/A layout, hand-rolled CocoaPods podspec automation) added as the macOS counterpart to SAD-061 (iOS) and SAD-063 (Android). Source SRS = SRS-013 (multi-platform support).
  • SAD-087's initial Source SysDes = open follow-up retargeted in the same session to SysDes-155.
  • §27 SRS-to-SAD coverage matrix updated to add the SRS-013 → SAD-087 row.

A.4 SDD (docs/architecture/sdd.md, baseline 0.9.10 → 0.9.11 → 0.9.12)

  • SDD-110 (AndroidPttCapability) Source SAD corrected from the incorrect SAD-077 (PttSanitizer) and the previously-flagged SAD-086 (FGS) to SAD-071 (PTT-backend trait isolation + capability publish) + SAD-076 (BridgeEvent::PttCapability event surface). §11 coverage matrix moved SDD-110 from the SAD-063/081/084/085/086 row to a new SAD-071 / SAD-076 row. Resolves 0.9.7 open issue 1.
  • SDD-119 (iOSAndMacOSBridgeBuildAutomation) Source SAD extended from SAD-061, SAD-062 to SAD-061, SAD-062, SAD-087 with explicit iOS-vs-macOS attribution. §11 coverage matrix row updated.

A.5 Code (since prior auditor pass)

Code path Trace tags Notes
apps/chanora_flutter/android/app/src/main/kotlin/app/chanora/chanora_flutter/AndroidPermissionRequester.kt SDD-106 §1..§8, SRS-209 M-1 fix: SharedPreferences-backed has-ever-requested flag (SDD-106 §3, §4).
apps/chanora_flutter/android/app/src/main/kotlin/app/chanora/chanora_flutter/BackIntentBridge.kt SDD-028 (§1, §4) M-2 popToSystem idempotency, M-3 object→class refactor, X-2 channel constants pulled from MethodChannels.
apps/chanora_flutter/android/app/src/main/kotlin/app/chanora/chanora_flutter/MainActivity.kt SDD-028, SDD-105, SDD-106 Owns the BackIntentBridge instance and AndroidPermissionRequester lifecycle wiring.
apps/chanora_flutter/android/app/src/main/kotlin/app/chanora/chanora_flutter/MethodChannels.kt SDD-028, SAD-018 New constants BACK_INTENT, METHOD_BACK_INTENT, METHOD_POP_TO_SYSTEM (X-2 fix).
apps/chanora_flutter/android/app/build.gradle.kts SDD-118 items 113, SDD-073, SDD-105, SDD-109 Gradle automation for chanora_bridge cdylib (cargo-ndk, three ABIs, jniLibs staging, preflight, release-inspection assertion).
crates/chanora_audio/src/android_voice_unit.rs (new) SDD-111..SDD-115 AndroidVoiceUnit.
crates/chanora_audio/src/mobile_voice_backend.rs (new) SDD-111, SDD-112 MobileVoiceAudioBackend trait + AndroidVoiceStreamConfig.
crates/chanora_audio/src/engine.rs SDD-111, SDD-113, SDD-115; android_engage_voice_communication path for SDD-108 Android backend integration; forward/reverse lifecycle sequencing closed.
crates/chanora_audio/Cargo.toml SDD-111 oboe = "0.6" dependency added.

The 0.9.7 engine.rs SDD-115 PENDING_CODE row is closed by the forward/reverse lifecycle sequencing that now lives in engine.rs (start path at lines ~307388, teardown path at lines ~748772, helper android_engage_voice_communication at line 1494).

B. End-to-end chain verification

Each chain below is rebuilt top-to-bottom from the present state of the repository. Evidence citations refer to file paths and (where useful) the line locations of trace tags. "CLOSED" means every layer between SysRS and Verification/Code has a concrete, in-document anchor.

# Chain Status Evidence
1 SysRS-305 → SysDes-152 → SRS-208 → SAD-084 → SDD-108 → engine.rs::android_engage_voice_communication → SWE4-UV-045 / SWE5-IV-018 / SWE6-SV-020 / TC-6 CLOSED SysDes-152 narrative in sysdes.md; SRS-208 Source SysDes: SysDes-152 at srs.md:2633; SAD-084 in sad.md; SDD-108 + §11 row in sdd.md (v0.9.8 entry); engine.rs:1494 android_engage_voice_communication; 0.9.6 addendum §B records the verification anchors.
2 SysRS-306 → SysDes-153 → SRS-209 → SAD-085 → SDD-106 → AndroidPermissionRequester.kt → SWE4-UV-041 / SWE5-IV-017 / SWE6-SV-019 / TC-2 CLOSED SysDes-153 in sysdes.md; SRS-209 Source SysDes: SysDes-153 at srs.md:2645; SAD-085 in sad.md; SDD-106 in sdd.md (v0.9.8); AndroidPermissionRequester.kt lines 18, 65, 83, 102, 142, 158, 175, 193, 217, 258, 267 (SDD-106 trace tags incl. M-1 SharedPreferences fix); 0.9.6 addendum §B records verification anchors.
3 SysRS-055 + SysRS-305 → SysDes-154 → SRS-210..215 → SAD-081 (+SAD-077 for SRS-212 narrative / SAD-086 for SRS-215 FGS aspect) → SDD-111..SDD-116 → crates/chanora_audio/src/android_voice_unit.rs (+ mobile_voice_backend.rs, engine.rs) → SWE4-UV-047..052 / SWE5-IV-021..026 / SWE6-SV-025..030 / TC-14..18 CLOSED (engineering layers) / PENDING (verification rows) SysDes-154 in sysdes.md; SRS-210..215 Source SysDes: SysDes-154 (primary) at srs.md:2670, 2682, 2694, 2706 (+SysDes-152 sec.), 2718, 2730; SDD-111..116 authored in sdd.md per the 0.9.7 addendum §A; code anchors android_voice_unit.rs, mobile_voice_backend.rs, engine.rs (SDD-111/113/115 traces lines 147, 307, 339, 367, 383, 748, 766), Cargo.toml line 69 (oboe = "0.6"). Verification SWE.4/5/6 rows for SRS-210..215 remain PENDING_VERIFICATION (carried from 0.9.7 §D item 1; owner: verification-planner).
4 SysRS-002 + SysRS-050 + SysRS-193 → SysDes-155 → SRS-013 (macOS slice) → SAD-087 → SDD-119 → apps/chanora_flutter/macos/chanora_bridge.podspec CLOSED (engineering layers) SysDes-155 narrative in sysdes.md:2930 (citing the podspec by path, value not embedded); SAD-087 in sad.md:1427, Source SysDes: SysDes-155 per sad.md:1499 (v0.9.8 history entry); SDD-119 Source SAD: SAD-061 + SAD-062 + SAD-087 per sdd.md:1773 (v0.9.12 history entry) and §11 coverage row; podspec exists at the cited path. Note: SDD-119 is an explicit back-fill unit (per its own narrative); the podspecs do not carry an SDD-119 trace tag in-source — acceptable for a back-fill anchor and not a defect.
5 SDD-118 (Android auto-build) → apps/chanora_flutter/android/app/build.gradle.kts. Upstream chain SDD-118 → SAD-063, cross-traces to SDD-073, SDD-105, SDD-109. CLOSED build.gradle.kts lines 154, 165, 171, 176, 183, 190, 200, 207, 212, 217, 226, 238, 252, 259, 263, 270, 273, 276, 277, 291, 297, 304, 324, 332, 344, 356, 365, 373, 380, 393 all carry SDD-118 trace tags (items 113). SDD-118 narrative in sdd.md v0.9.10 entry sources from SAD-063 with cross-trace to SDD-073 / SDD-105 / SDD-109.
6 SDD-119 (iOS/macOS auto-build) → apps/chanora_flutter/ios/chanora_bridge.podspec + apps/chanora_flutter/macos/chanora_bridge.podspec. Upstream chain SDD-119 → SAD-061 + SAD-062 + SAD-087. CLOSED SDD-119 narrative in sdd.md v0.9.10 + v0.9.12 entries; both podspec files exist at the cited paths. Back-fill anchor; in-source trace tags not required (and not present), per the SDD-119 narrative.
7 SDD-110 (AndroidPttCapability) → SAD-071 + SAD-076 anchors CLOSED sdd.md v0.9.11 history entry records the SAD-077 → SAD-071 + SAD-076 retarget; §11 coverage matrix updated accordingly. 0.9.7 open issue 1 closed.

C. Resolved open issues (from prior auditor passes)

# Prior issue Resolution
1 SDD-110 Source SAD mis-anchor (0.9.6 §H.2, 0.9.7 §C row 1) — cited SAD-086 (FGS) / SAD-077 (PttSanitizer), should cite SAD-071 + SAD-076. CLOSED in sdd.md v0.9.11 entry. Section 11 coverage matrix moved SDD-110 to a new SAD-071/SAD-076 row.
2 SysDes-135 generic reuse for SysRS-305 / SysRS-306 / Android voice audio backend (0.9.6 §H.1, 0.9.7 §C row 2). CLOSED by SysDes v0.9.6 (added SysDes-152, SysDes-153, SysDes-154) and SRS v0.9.8 (retargeted SRS-208/209/210..215 Source SysDes away from SysDes-135 to SysDes-152/153/154 with SysDes-135 retained only as secondary/context).
3 SRS-111 dual allocation (SAD-036 + SAD-086) pattern not formalised (0.9.6 §H.2, 0.9.7 §C row 3). CLOSED by SAD v0.9.7 (added §24.1 "Cross-cutting + platform-specific allocations" subsection with SRS-111 / SAD-036 / SAD-086 as the worked example; §24.2 SRS-111..124 matrix row annotated to record the dual allocation explicitly).
4 SDD-115 engine.rs lifecycle sequencing PENDING_CODE (0.9.7 §B / §D item 2). CLOSED by engine.rs (forward sequence lines 307388 invoking chanora_android_start_voice_serviceandroid_engage_voice_communicationAndroidVoiceUnit::openstart; reverse sequence lines 748772).
5 SAD-087 Source SysDes open follow-up (created by SAD v0.9.7). CLOSED in same session by SAD v0.9.8 retargeting Source SysDes to SysDes-155.

D. Remaining open issues

# Issue Severity Proposed owner
1 SWE.4 / SWE.5 / SWE.6 verification rows for SRS-210..SRS-215 are still PENDING — SDD-111..SDD-116 are authored and code anchors exist (android_voice_unit.rs, mobile_voice_backend.rs, engine.rs, Cargo.toml), but dedicated unit / integration / qualification verification rows have not yet been added. Acceptance coverage is via TC-6, TC-3, TC-3.4 indirectly. Medium — engineering chain is closed end-to-end, but verification evidence for SRS-210..215 is currently indirect. Does NOT raise BLOCKED_REQUIREMENT_GAP because code is fully traced to SDD and upstream. verification-planner
2 SDD-119 known iOS podspec doc-drift — the iOS podspec comment mentions aarch64-apple-ios-sim but the script does not build the simulator slice (recorded as a TODO in SDD-119 narrative itself; not a traceability defect). Low — internal to SDD-119, no upstream/downstream linkage broken. detailed-designer or codex-builder (per SDD-119's own TODO).
3 SDD-119 macOS deployment-target single-source-of-truth is recorded as an open follow-up improvement in SDD-119; SysDes-155 already cites the podspec as the canonical location, so the SysDes/SAD/SDD chain is aligned, but the SoT improvement work is still TODO. Low — chain is closed; this is an internal hardening item. detailed-designer (improvement, not defect).
4 Optional finer-grained macOS minimum-runtime SysRS item parallel to SysRS-286 (iOS) and SysRS-288 (Android) was recommended by SysDes-155 itself; current chain is closed via SysRS-002 / SysRS-050 / SysRS-193 (multi-platform + macOS runtime + signed/notarized macOS build), so absence is non-blocking. Low — optional refinement. system-requirements owner (optional).

E. Orphan inventory

Zero new orphans introduced by this sub-wave. The four 0.9.7-listed PENDING items (SDD-111..116 reservations) are all closed:

ID range Prior status Current status Evidence
SDD-111..SDD-116 PENDING_SDD (0.9.6) AUTHORED (0.9.7 §A) sdd.md body + 0.9.7 addendum §A mapping.
engine.rs SDD-115 anchor PENDING_CODE (0.9.7 §B) LANDED engine.rs:307388 + :748772 + :1494.
SAD-087 Source SysDes open follow-up (SAD 0.9.7) RESOLVED to SysDes-155 (SAD 0.9.8) sad.md:1499.
SDD-110 Source SAD flagged conflict (0.9.6, 0.9.7) CORRECTED to SAD-071 + SAD-076 (SDD 0.9.11) sdd.md:1779.

Total orphans / dangling references / conflicts remaining: 0.

F. Dangling references

None at this revision. The previously dangling SAD-086 → SDD-110 scope-mismatch reference is resolved by the SDD-110 retarget. The previously dangling SDD-111..116 PENDING anchors are all resolved. The SDD-119 macOS-anchor follow-up is closed by SAD-087 + SysDes-155.

G. Conflicts

None at this revision. The 0.9.6 SRS-111 dual-allocation conflict was formalised as a deliberate cross-cutting + platform-specific allocation pattern in SAD §24.1 (v0.9.7), and is no longer a conflict.

H. Strict-hierarchy discipline check

  • SRS-208..215 source from SysDes only (SysDes-152/153/154 + SysDes-135 as context); no direct SysRS source.
  • SAD-084..087 source from SRS only; no direct SysDes link.
  • SDD-106, SDD-108, SDD-110, SDD-111..116, SDD-118, SDD-119 source from SAD only; no direct SysRS / SysDes / SRS link.
  • Verification artifacts remain downstream evidence and do not participate in the engineering hierarchy.

No forbidden direct links were introduced by this sub-wave.

I. BLOCKED_REQUIREMENT_GAP check

No code anchor exists without an SDD trace and an upstream-traceable reference:

  • AndroidPermissionRequester.kt, BackIntentBridge.kt, MainActivity.kt, MethodChannels.kt: SDD-106 / SDD-028 / SDD-105 traces present in-source, resolving upward to SAD-085 / SAD-018 / SAD-063 → SRS-209 / SRS-163 / SRS-187.
  • build.gradle.kts: SDD-118 / SDD-073 / SDD-109 traces present, resolving upward to SAD-063.
  • crates/chanora_audio/src/android_voice_unit.rs, mobile_voice_backend.rs, engine.rs, Cargo.toml: SDD-111..SDD-115 traces present, resolving upward to SAD-081 (+ SAD-077 / SAD-084 / SAD-086 for cross-cutting aspects) → SRS-210..215.

BLOCKED_REQUIREMENT_GAP is not raised.

J. Decision

TRACEABILITY_OK (engineering hierarchy) — the SysRS → SysDes → SRS → SAD → SDD → Code chain is closed end-to-end for every item exercised by this sub-wave (chains 17 in §B). The three open issues flagged by the prior auditor (SDD-110 mis-anchor, SysDes-135 generic reuse, SRS-111 dual-allocation pattern) and the two PENDING markers carried by 0.9.7 (engine.rs SDD-115 PENDING_CODE, SAD-087 Source SysDes follow-up) are all resolved.

TRACEABILITY_GAPS_REMAIN (verification only) — dedicated SWE.4 / SWE.5 / SWE.6 rows for SRS-210..SRS-215 are still pending against the now-authored SDD-111..SDD-116 anchors. Acceptance coverage in android-p0-acceptance.md (TC-6, TC-3, TC-3.4) provides indirect coverage, so this gap is non-blocking for the engineering chain but should be closed by the verification owner.

Overall decision: TRACEABILITY_OK for the engineering layers (SysRS → SDD → Code); TRACEABILITY_GAPS_REMAIN for SRS-210..SRS-215 verification rows only. No BLOCKED_REQUIREMENT_GAP raised.

  1. verification-planner — author SWE.4 / SWE.5 / SWE.6 rows for SRS-210..SRS-215 against SDD-111..SDD-116 (specifically: latency observation per SDD-116, hardware-effect attach per SDD-113, lifecycle ordering per SDD-115, input/output AAudio stream configs per SDD-112, sharing-mode fallback per SDD-112, FGS manifest binding per SDD-114). Add corresponding android-p0-acceptance.md TC rows if dedicated tests are warranted beyond the indirect TC-6 / TC-3 / TC-3.4 coverage already recorded.
  2. detailed-designer or codex-builder — address the SDD-119 iOS podspec doc-drift TODO (aarch64-apple-ios-sim comment vs. script). Low priority.
  3. detailed-designer — pursue the SDD-119 macOS deployment-target single-source-of-truth improvement (optional, internal hardening).
  4. system-requirements owner (optional) — author a finer-grained macOS minimum-runtime SysRS item parallel to SysRS-286 / SysRS-288 if future audits prefer a dedicated SysRS anchor over the current SysRS-002 + SysRS-050 + SysRS-193 composite.

If items 14 above are deferred, no further action is required to preserve end-to-end engineering-layer traceability at this revision.

Version Date Description
0.9.8 2026-05-18 End-to-end closure addendum. Incorporated SysDes v0.9.7 deltas (SysDes-152 Android in-call audio mode, SysDes-153 Android RECORD_AUDIO permission flow, SysDes-154 Android voice audio backend, SysDes-155 macOS runtime baseline); SRS v0.9.8 retargeting of SRS-208..215 Source SysDes from generic SysDes-135 to SysDes-152/153/154 (with SysDes-135 retained as secondary/context, and SysDes-152 as secondary on SRS-213 for output-usage routing precondition); SAD v0.9.7 + 0.9.8 deltas (§24.1 cross-cutting + platform-specific allocation pattern formalised with SRS-111 / SAD-036 / SAD-086 worked example; SAD-087 macOS runtime baseline added; SAD-087 Source SysDes retargeted to SysDes-155 in same session); SDD v0.9.11 + 0.9.12 deltas (SDD-110 Source SAD corrected from SAD-077 / SAD-086 to SAD-071 + SAD-076; SDD-119 Source SAD extended to include SAD-087 for the macOS half); and Code deltas across AndroidPermissionRequester.kt (M-1 SharedPreferences fix), BackIntentBridge.kt (M-2/M-3/X-2 fixes), MainActivity.kt, MethodChannels.kt (new channel constants), build.gradle.kts (SDD-118 Gradle automation), crates/chanora_audio/src/android_voice_unit.rs (new), mobile_voice_backend.rs (new), engine.rs (SDD-115 lifecycle sequencing landed; android_engage_voice_communication path for SDD-108), Cargo.toml (oboe = "0.6"). All three open issues flagged by the prior auditor are resolved: (1) SDD-110 mis-anchor → corrected; (2) SysDes-135 generic reuse → tightened to SysDes-152/153/154; (3) SRS-111 dual-allocation pattern → formalised in SAD §24.1. PENDING_CODE for engine.rs SDD-115 → landed. SAD-087 Source SysDes open follow-up → resolved to SysDes-155. End-to-end engineering chain (SysRS → SysDes → SRS → SAD → SDD → Code) verified CLOSED for chains 17 (SysRS-305 → TC-6, SysRS-306 → TC-2, SysRS-055 + SysRS-305 → engine.rs/android_voice_unit.rs, SysRS-002/050/193 → podspec, SDD-118 → build.gradle.kts, SDD-119 → podspec, SDD-110 → SAD-071 + SAD-076). Decision: TRACEABILITY_OK (engineering hierarchy) / TRACEABILITY_GAPS_REMAIN (SWE.4/5/6 rows for SRS-210..215 are PENDING for verification-planner; non-blocking, indirect acceptance coverage via TC-6 / TC-3 / TC-3.4 already present). BLOCKED_REQUIREMENT_GAP is NOT raised: every code anchor carries an SDD trace and resolves upstream. Strict hierarchy preserved at every layer.

SDD v0.9.13 Absorption + SRS-210..SRS-215 Verification Closure Addendum (Baseline Candidate 0.9.9)

This addendum absorbs the SDD v0.9.13 documentation-cleanup amendments into the matrix, closes the PENDING verification-row markers for SRS-210..SRS-215 against concrete SWE.4/5/6 IDs that now exist in the verification baselines, adds crates/chanora_bridge/build.rs to the code-anchor table, and cross-references the newly-allocated DEC-032 (temporary abiFilters reduction). Strict layered sourcing is preserved (SDD -> SAD only); no upstream documents were edited.

A. SDD v0.9.13 deltas absorbed

SDD change Matrix impact
SDD-105 software-unit list extended to include crates/chanora_bridge/build.rs, ChanoraApplication.kt (loader: System.loadLibrary), and MainActivity.kt (initChanoraContext invocation) §E SDD-105 row code-anchors and 0.9.6 §F back-fill table extended (see §B and §C below). The prior 0.9.6 / 0.9.7 entries that listed only ChanoraApplication.kt, MainActivity.kt for SDD-105 are superseded by §B.
SDD-105 new Cross-trace bullet → SDD-118 item 6 (extended) — libc++_shared.so runtime co-staging + DT_NEEDED preload contract Recorded in §B. SDD-105's Source SAD is unchanged (still SAD-063).
SDD-118 new "Item 6 (extended)" sub-paragraph mandating libc++_shared.so co-staging from NDK sysroot into jniLibs/<abi>/ with explicit sysroot-triple mapping Recorded in §B; build.gradle.kts continues to carry the SDD-118 trace tags. Release-inspection assertion (SDD-118 item 10) now also covers libc++_shared.so.
SDD-119 item 4 simulator doc-drift RESOLVED (Option α: drop aarch64-apple-ios-sim comment) §D row 2 of 0.9.8 closed. Removed from the remaining-open-issues list (see §E).

No SDD-content was authored by this addendum; the above merely records the matrix-side absorption of changes already present in SDD v0.9.13.

B. Code-anchor table — new and extended rows

The following rows extend the 0.9.6 §F and 0.9.8 §A.5 code-anchor tables to absorb SDD v0.9.13:

Code path SDD trace SRS trace (indirect) Notes
crates/chanora_bridge/build.rs SDD-105 (software unit; emits cargo:rustc-link-lib=dylib=c++_shared so DT_NEEDED libc++_shared.so is baked into libchanora_bridge.so) — Cross-trace: SDD-118 item 6 (extended) for the runtime co-staging contract SRS via SAD-063 → SRS-187 New row introduced by SDD v0.9.13. Anchored to SDD-105.
apps/chanora_flutter/android/app/src/main/kotlin/app/chanora/chanora_flutter/ChanoraApplication.kt SDD-105 (loader: System.loadLibrary for libchanora_bridge.so) SRS via SAD-063 → SRS-187 Re-confirmed as the canonical loader site by SDD v0.9.13; supersedes the prior MainActivity-as-loader wording.
apps/chanora_flutter/android/app/src/main/kotlin/app/chanora/chanora_flutter/MainActivity.kt SDD-105 (initChanoraContext invocation only — NOT System.loadLibrary), SDD-028, SDD-106 SRS-163, SRS-209 Loader responsibility moved to ChanoraApplication.kt; MainActivity retains initChanoraContext only per SDD v0.9.13 item 1.
apps/chanora_flutter/android/app/build.gradle.kts SDD-073, SDD-105 (load-order preload via co-staging), SDD-109, SDD-118 items 113 incl. item 6 (extended)libc++_shared.so co-staging from NDK sysroot into jniLibs/<abi>/; release-inspection assertion (item 10) extended to cover libc++_shared.so SRS-187, SRS-188, SRS-119 Trace tags already present in source; SDD-118 item 6 (extended) is absorbed here for the matrix record. Cross-references DEC-032 (§D) for the current temporary abiFilters reduction to arm64-v8a only.

C. SRS-210..SRS-215 verification-row closure (replaces PENDING markers)

The 0.9.6 §C, 0.9.7 §A, and 0.9.8 §D row 1 PENDING markers for the SWE.4 / SWE.5 / SWE.6 rows of SRS-210..SRS-215 are CLOSED. The verification documents now enumerate the concrete IDs (existence verified by grep against swe4-unit-verification-plan.md, swe5-software-integration-verification-plan.md, swe6-software-verification-plan.md).

SRS SWE.4 (unit) SWE.5 (integration) SWE.6 (qualification) Replaces
SRS-210 (mouth-to-ear latency tier) SWE4-UV-051 SWE5-IV-021 SWE6-SV-025 0.9.6 §C PENDING
SRS-211 (AAudio input preset + fallback) SWE4-UV-048 SWE5-IV-021 SWE6-SV-026 0.9.6 §C PENDING
SRS-212 (hardware AEC/NS/AGC + software fallback) SWE4-UV-050 SWE5-IV-022 SWE6-SV-027 0.9.6 §C PENDING
SRS-213 (AAUDIO_USAGE_VOICE_COMMUNICATION / CONTENT_TYPE_SPEECH output) SWE4-UV-047, SWE4-UV-052 SWE5-IV-021 SWE6-SV-028 0.9.6 §C PENDING
SRS-214 (sharing-mode EXCLUSIVE best-effort + SHARED fallback) SWE4-UV-049 SWE5-IV-021 SWE6-SV-029 0.9.6 §C PENDING
SRS-215 (foreground-service-hosted background mic capture) SWE4-UV-044 SWE5-IV-018 SWE6-SV-030 (device-matrix expansion; SWE6-SV-018 remains single-device baseline) 0.9.6 §C PENDING

Existence confirmation:

  • SWE.4 IDs SWE4-UV-044, -047, -048, -049, -050, -051, -052 present in docs/verification/swe4-unit-verification-plan.md.
  • SWE.5 IDs SWE5-IV-018, -021, -022 present in docs/verification/swe5-software-integration-verification-plan.md.
  • SWE.6 IDs SWE6-SV-025, -026, -027, -028, -029, -030 present in docs/verification/swe6-software-verification-plan.md.

No NEEDS_VERIFICATION_ID_AUTHORING flag is raised: every recommended ID exists in the corresponding verification baseline.

D. DEC-032 governance cross-reference

DEC-032 (temporary reduction of Android abiFilters to arm64-v8a only during the P0 smoke-test cycle) is recorded in docs/governance/product-decision-register.md. It is a temporary deviation from SDD-073 item 4 and SDD-118 item 3 (which mandate the three-ABI set {arm64-v8a, armeabi-v7a, x86_64}). The deviation is governance-layer only — neither SDD-073 item 4 nor SDD-118 item 3 is mutated, and the existing matrix rows that anchor build.gradle.kts to SDD-073 / SDD-118 / SDD-109 are unchanged.

Cross-reference scope:

  • SDD-073 item 4 (canonical three-ABI set)
  • SDD-118 item 3 (Gradle automation enforcing the three-ABI set)
  • DEC-032 (active temporary deviation; restore-by gate = P0 release)
  • Audit task ses_1c7645e36ffeY007MaYPep4wqs (auditor New-D)

Status: Active (temporary deviation) until the audiopus_sys + cmake-rs + NDK toolchain-file ANDROID_ABI propagation fix lands, all three ABIs compile cleanly in CI, the abiFilters declaration is restored to the three-ABI set, and the release-inspection assertion confirms all three .so files (plus libc++_shared.so per SDD-118 item 6 extended) are staged in any release AAB.

E. Open-issue inventory refresh

The 0.9.8 §D remaining-open-issues list updates as follows:

0.9.8 # Issue Current status
1 SWE.4 / SWE.5 / SWE.6 rows for SRS-210..SRS-215 pending CLOSED by §C above. Concrete IDs replace PENDING markers in every cell.
2 SDD-119 known iOS podspec doc-drift (aarch64-apple-ios-sim comment) CLOSED. SDD v0.9.13 item 5 resolved the doc-drift with Option α (drop the comment); simulator support explicitly deferred to a future P1 SDD revision.
3 SDD-119 macOS deployment-target single-source-of-truth OPEN (carried). Internal hardening item; owner: detailed-designer. Intentionally not changed by this addendum.
4 Optional finer-grained macOS minimum-runtime SysRS item parallel to SysRS-286 / SysRS-288 OPEN (carried, deferred). SysRS-290 anchor work explicitly deferred per the task brief; current chain via SysRS-002 / SysRS-050 / SysRS-193 remains adequate. Owner: system-requirements (optional).

New open follow-ups recorded by this addendum:

# Issue Severity Proposed owner
5 DEC-032 restore-by gateabiFilters must return to the canonical three-ABI set before P0 release. Tracked in product-decision-register.md DEC-032. High (release-gate) but non-traceability — engineering chain to SDD-073 item 4 / SDD-118 item 3 remains intact. Build/Toolchain owner.
6 MissedKeyUpWatchdog production-design follow-up to unblock SWE4-UV-045 — DEC-031 disables the watchdog on P0, and unit verification of the Android AudioMode lifecycle (SWE4-UV-045) interacts with the P1 redesign space. Recorded here as a governance cross-reference; not an upstream-document edit. Low (P1 scope; no P0 blocker). Audio Owner / detailed-designer (per DEC-031 P1 redesign).
7 SDD-106 §5 / §6 Rust-side variant — the Rust-side counterpart for the permission-state-machine helpers in SDD-106 §5 / §6 has been noted in prior reviews as a follow-up; not an upstream-document edit and not changed by this addendum. Low. detailed-designer (future SDD revision).
8 No dedicated SAD anchor for the platform-abstracted MobileVoiceAudioBackend trait — SDD-111 self-flags (per docs/architecture/sdd.md:1713-1715, §11 coverage matrix) that no dedicated SAD allocation item exists for the platform-abstracted mobile-voice-audio-backend trait itself; SDD-111 is currently sourced from SAD-077 / SAD-081 pending a SAD revision that introduces a dedicated allocation item. Governance cross-reference only; not an upstream edit by this addendum. Low (engineering chain remains intact via SAD-077 / SAD-081). software-architect (future SAD revision to add a dedicated allocation item for MobileVoiceAudioBackend).

F. Items intentionally NOT changed by this addendum

Item Reason for non-change
docs/architecture/sdd.md This is a governance-layer absorption only. SDD already at v0.9.13 — no SDD edits required.
docs/architecture/sad.md, docs/requirements/srs.md, docs/requirements/sysrs.md, docs/architecture/sysdes.md The task brief explicitly forbids upstream edits.
docs/verification/** The task brief explicitly forbids verification edits; verification baselines already contain the IDs cited in §C.
Source code (incl. apps/chanora_flutter/android/app/build.gradle.kts) The task brief explicitly forbids code edits; the temporary abiFilters reduction is recorded as DEC-032 (governance-only).
Deployment-target single-source-of-truth (SDD-119 item 3) Carried open; not part of this absorption pass.
Optional SysRS-290 anchor work Explicitly deferred per task brief.

G. Strict-hierarchy discipline check

  • No SRS / SAD / SDD direct sources were added, mutated, or relaxed.
  • DEC-032 is a governance cross-reference and does not act as an engineering-layer direct source (consistent with the treatment of DEC-029 / DEC-030 / DEC-031 in earlier addenda).
  • crates/chanora_bridge/build.rs is anchored to SDD-105 with a cross-trace to SDD-118 item 6 (extended); both anchors live in docs/architecture/sdd.md v0.9.13.

H. BLOCKED_REQUIREMENT_GAP check

No code anchor was added without an SDD trace and an upstream-traceable reference. crates/chanora_bridge/build.rs resolves SDD-105 → SAD-063 → SRS-187 → SysDes-135 → SysRS-288 / SysRS-055 (multi-platform). BLOCKED_REQUIREMENT_GAP is not raised.

I. Final verdict

TRACEABILITY_OK. With the §C verification-row closures and the §B code-anchor refresh, the SRS-210..SRS-215 chain is now closed end-to-end at every layer (SysRS → SysDes → SRS → SAD → SDD → Code → Verification). The remaining carried-open issues (§E rows 3, 4, 5, 6, 7) are non-blocking governance / hardening follow-ups; none represents a SysRS → SysDes → SRS → SAD → SDD → Code → Verification gap.

Version Date Description
0.9.9 2026-05-18 Absorbed SDD v0.9.13 documentation-cleanup amendments: SDD-105 software-unit list extended to include crates/chanora_bridge/build.rs (DT_NEEDED libc++_shared.so emission) + ChanoraApplication.kt (loader) + MainActivity.kt (initChanoraContext only); SDD-105 Cross-trace bullet to SDD-118 item 6 (extended) recorded; SDD-118 item 6 (extended) libc++_shared.so co-staging contract absorbed onto the build.gradle.kts code-anchor row; SDD-119 item 4 iOS-simulator doc-drift marked RESOLVED (Option α). Closed the 0.9.6 §C / 0.9.7 §A / 0.9.8 §D row 1 PENDING markers for SRS-210..SRS-215 with concrete SWE.4/5/6 IDs (SRS-210 → SWE4-UV-051 / SWE5-IV-021 / SWE6-SV-025; SRS-211 → SWE4-UV-048 / SWE5-IV-021 / SWE6-SV-026; SRS-212 → SWE4-UV-050 / SWE5-IV-022 / SWE6-SV-027; SRS-213 → SWE4-UV-047 + SWE4-UV-052 / SWE5-IV-021 / SWE6-SV-028; SRS-214 → SWE4-UV-049 / SWE5-IV-021 / SWE6-SV-029; SRS-215 → SWE4-UV-044 / SWE5-IV-018 / SWE6-SV-030 with SWE6-SV-018 as single-device baseline); all six SWE.4 IDs, three SWE.5 IDs, and six SWE.6 IDs confirmed present in the respective verification baselines. Added crates/chanora_bridge/build.rs to the code-anchor table anchored to SDD-105 with cross-trace to SDD-118 item 6 (extended). Cross-referenced DEC-032 (temporary abiFilters reduction to arm64-v8a only) as an Active temporary deviation from SDD-073 item 4 / SDD-118 item 3; restore-by gate = P0 release. New carried-open follow-ups: DEC-032 restore-by (§E row 5), MissedKeyUpWatchdog production design to unblock SWE4-UV-045 (§E row 6), SDD-106 §5/§6 Rust-side variant (§E row 7). TRACEABILITY_OK; BLOCKED_REQUIREMENT_GAP not raised.

SDD-120 Benchmark Infrastructure Chain Absorption Addendum (Baseline Candidate 0.9.10)

This addendum absorbs the full SDD-120 (RealtimeAudioBenchmarkHarnessAndAdvisoryCI) end-to-end chain into the matrix. The chain spans:

SysRS-307..309
  -> SysDes-156..158
  -> SRS-216..219
  -> SAD-088..091
  -> SDD-120 (v0.9.16)
  -> Code (commits 3a7750a + 8e95972 + 75b04f0)
  -> SWE4-UV-058..062 (verification-engineer authoring in parallel)

Strict layered sourcing is preserved at every layer (SysDes -> SysRS, SRS -> SysDes, SAD -> SRS, SDD -> SAD); verification artifacts remain downstream evidence.

A. End-to-end traceability rows — SDD-120 metric-family chain

One row per SRS-216 / SysDes-156 metric family. SWE4-UV-058..062 were authored in parallel at v0.9.15 of docs/verification/swe4-unit-verification-plan.md (verification-engineer dispatch landed concurrent with this matrix update); §A markers reconciled to PENDING_BASELINE accordingly. What remains pending is the baseline measurement (first workflow_dispatch run on bench-baseline-update.yml), not the IDs themselves.

Metric family SysRS SysDes SRS SAD SDD-120 § Code anchor SWE.4
1 — Capture-path allocation count (steady-state zero) SysRS-307 SysDes-156 SRS-216 (metric 1) + SRS-219 clause-a (tolerance = 0) SAD-088 §1 + §3 item 1 + §4 crates/chanora_audio/benches/realtime_capture.rs::bench_capture_alloc_count (with crates/chanora_audio/benches/common.rs synthetic input) SWE4-UV-058 (PENDING_BASELINE)
2 — Capture callback wall-clock (p50/p95/p99) SysRS-307 SysDes-156 SRS-216 (metric 2) + SRS-219 (per-metric tolerance) SAD-088 §1 + §3 item 2 crates/chanora_audio/benches/realtime_capture.rs::bench_capture_callback_wall_clock SWE4-UV-059 (PENDING_BASELINE)
3 — Opus encode latency (20 ms / 960-sample frame, p50/p95/p99) SysRS-307 SysDes-156 SRS-216 (metric 3) + SRS-219 SAD-088 §1 + §3 item 3 crates/chanora_audio/benches/opus_codec.rs::bench_opus_encode_latency SWE4-UV-060 (PENDING_BASELINE)
4 — Opus decode latency (codec-level audiopus::coder::Decoder::decode_float, p50/p95/p99) SysRS-307 SysDes-156 SRS-216 (metric 4) + SRS-219 SAD-088 §1 + §3 item 4 crates/chanora_audio/benches/opus_codec.rs::bench_opus_decode_latency SWE4-UV-061 (PENDING_BASELINE)
5 — Resampler throughput (per-mode triplet, samples/sec) SysRS-307 SysDes-156 SRS-216 (metric 5) + SRS-219 SAD-088 §1 + §3 (resampler bench) crates/chanora_audio/benches/resampler.rs SWE4-UV-062 (PENDING_BASELINE)

The SDD-120 §11 verification matrix records SWE4-UV-058..062 as a Suggested SWE.4 forward allocation. The IDs are not invented by this addendum; they originate from the SDD §11 forward-allocation note and were authored by verification-engineer into swe4-unit-verification-plan.md at v0.9.15. With authoring complete, the §A markers are now PENDING_BASELINE only (the first workflow_dispatch run that establishes the SAD-089 baseline JSON remains gated on CI minutes return).

B. CI infrastructure chain — bench-advisory workflow + comparator

SysRS SysDes SRS SAD SDD-120 § Code anchor
SysRS-308 SysDes-157 SRS-218 SAD-090 §6 (advisory PR-comment workflow, merge-base baseline read, actions/github-script@v7 posting, sentinel-marker comment update, always() && exit 0 non-blocking semantics, status-check name bench-advisory explicitly NOT added to required-checks per SRS-218 clause 4) .github/workflows/bench-advisory.yml + crates/chanora_audio/examples/compare_baseline.rs

C. CI infrastructure chain — baseline-update workflow isolation

SysRS SysDes SRS SAD SDD-120 § Code anchor
SysRS-308 SysDes-157 SRS-218 SAD-091 (sole-writer of SAD-089) §7 (workflow_dispatch-only trigger; peter-evans/create-pull-request@v6 opens a reviewable PR rather than direct-pushing main; add-paths: crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json) .github/workflows/bench-baseline-update.yml

D. Tolerance-window chain

SRS-219 carries the per-metric tolerance table directly; no dedicated SAD allocation exists (the tolerance numerics live in the SRS clause and are operationalized by the compare_baseline binary per SDD-120 §8). This is acknowledged in §B above by carrying SRS-219 as a tolerance contributor on every metric row.

SysRS SysDes SRS SAD SDD-120 § Code anchor
SysRS-309 SysDes-158 SRS-219 (clause-a tolerance = 0 for capture_alloc_count; per-metric tolerance percentages for the latency / throughput metrics) (no dedicated SAD allocation; tolerance numerics live in SRS-219 and are realized in code) §8 (yellow-marker trending logic — committed SAD-089 baseline is also the trending comparator per the SAD-090 yellow-marker pin; zero-tolerance branch for capture_alloc_count emits 🔴 if c != 0) crates/chanora_audio/examples/compare_baseline.rs

Strict-hierarchy note: the absence of a SAD allocation between SRS-219 and SDD-120 §8 is acceptable because SRS-219 is a tolerance-numerics clause that the SAD-088 / SAD-090 allocations operationalize through their respective harness and workflow components; no design split was lost. The SDD-120 §11 coverage matrix already cites SAD-088..091 inclusive and does not omit SRS-219 from the chain.

E. Baseline storage chain

SRS SAD SDD-120 § Code anchors
SRS-217 (baseline JSON record schema: { metric, value, unit, tolerance_pct, host, timestamp_utc }, top-level metrics array) SAD-089 (baseline JSON on-disk path pinned to crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json) §5 (post-processor binary; cargo run --example emit_baseline; parses criterion estimates.json into SRS-217 records; writes ./current.json at workspace root, NOT the SAD-089 path — the SAD-089 path is read by the comparator on advisory runs and written by copy on baseline-update runs per §6 step 7 / §7 step 5) crates/chanora_audio/examples/emit_baseline.rs (producer) + crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json (storage)

F. Code-anchor table — new rows for commits 3a7750a + 8e95972 + 75b04f0

The following rows extend the prior code-anchor tables (0.9.6 §F, 0.9.8 §A.5, 0.9.9 §B) to absorb the SDD-120 infrastructure landed by commits 3a7750a (initial harness), 8e95972 (workflow + comparator), and 75b04f0 (.gitignore for local bench outputs):

Code path SDD trace SRS / SAD trace (indirect) Notes
crates/chanora_audio/benches/common.rs SDD-120 §4 (deterministic synthetic-input generation: 440 Hz sine at amplitude 0.5, no RNG, byte-stable across runs) SAD-088 → SRS-216 / SRS-219 Shared module imported by the three bench files.
crates/chanora_audio/benches/realtime_capture.rs SDD-120 §3 items 12 (capture benches: bench_capture_alloc_count with dhat 100-call pre-warm + 1000-call measurement window; bench_capture_callback_wall_clock) SAD-088 → SRS-216 (metrics 1, 2) → SRS-219 clause-a Bench seam: CaptureState::ingest at crates/chanora_audio/src/engine.rs:1207.
crates/chanora_audio/benches/opus_codec.rs SDD-120 §3 items 34 (codec benches: bench_opus_encode_latency, bench_opus_decode_latency) SAD-088 → SRS-216 (metrics 3, 4) Pinned to audiopus::coder::Decoder::decode_float directly, NOT tsclientlib::AudioHandler::fill_buffer, per SDD-120 §3 item 4 rationale (composite-call conflation).
crates/chanora_audio/benches/resampler.rs SDD-120 §3 (resampler throughput bench, three sub-bench groups aggregated into per-mode triplet) SAD-088 → SRS-216 (metric 5)
crates/chanora_audio/examples/emit_baseline.rs SDD-120 §5 (post-bench JSON aggregator; reads criterion estimates.json; projects to SRS-217 records; writes ./current.json) SAD-089 → SRS-217 Placed under examples/ not src/bin/ per SDD-120 §2 item 5 ([dev-dependencies] routing; v0.9.16 amendment).
crates/chanora_audio/examples/compare_baseline.rs SDD-120 §6 (advisory comparator invoked by workflow step 8) + §8 (yellow-marker trending logic; zero-tolerance branch for capture_alloc_count) SAD-090 → SRS-218; SRS-219 (tolerance application); SAD-089 (baseline JSON consumer) Always exits 0 per SRS-218 clause 4; regression is rendered as 🔴 marker inside the PR comment, not as a non-zero exit code.
crates/chanora_audio/Cargo.toml SDD-120 §1 (criterion = "0.5", dhat = "0.3", serde_json dev-deps; three [[bench]] entries; [[example]] auto-discovery via examples/ directory per v0.9.16 amendment) SAD-088
.github/workflows/bench-advisory.yml SDD-120 §6 (PR + push triggers, dtolnay/rust-toolchain@stable + Swatinem/rust-cache@v2, audio system deps libasound2-dev libpulse-dev pkg-config libopus-dev, fetch-depth: 0, git show $MERGE_BASE:…/x86_64-unknown-linux-gnu.json with missing-baseline short-circuit, actions/github-script@v7 PR comment with sentinel-marker upsert, always() && exit 0 non-blocking) SAD-090 → SRS-218 Status-check name bench-advisory explicitly NOT added to branch-protection required-checks (SRS-218 clause 4).
.github/workflows/bench-baseline-update.yml SDD-120 §7 (workflow_dispatch-only trigger; peter-evans/create-pull-request@v6 opens a reviewable PR; add-paths scoped to the SAD-089 baseline JSON; sole writer of SAD-089) SAD-091 → SRS-218 Preserves SAD-091 sole-writer invariant: the PR-merge commit is also written by this workflow's PR, not by a human directly editing the JSON.
.gitignore (75b04f0) SDD-120 §5 (local bench outputs ./current.json and ./report.md at workspace root are produced by the post-processor and the comparator respectively; both are gitignored and never tracked) SAD-089 (path discipline) Untracked workspace-root files current.json and report.md confirmed gitignored as of 75b04f0.

G. Closed open-issue confirmation (carried from prior auditor passes)

# Item Confirmed status
1 matrix-row entries for SRS-210..SRS-215 (PENDING_SDD reservations from 0.9.6 §C) CLOSED by 0.9.7 §A (concrete SDD-111..SDD-116 mapping) and 0.9.9 §C (concrete SWE.4/5/6 IDs).
2 SDD-110 Source SAD field correction (0.9.6 §H.2, 0.9.7 §C row 1) CLOSED by SDD v0.9.11 (retargeted to SAD-071 + SAD-076); confirmed in 0.9.8 §C row 1.
3 SysDes-135 generic reuse for SysRS-305 / SysRS-306 / Android voice audio backend (0.9.6 §H.1, 0.9.7 §C row 2) CLOSED by SysDes v0.9.7 (SysDes-152/153/154/155) and SRS v0.9.8 retargeting; confirmed in 0.9.8 §C row 2.
4 SRS-111 dual-allocation pattern formalization (0.9.6 §H.2, 0.9.7 §C row 3) CLOSED by SAD v0.9.7 §24.1 (cross-cutting + platform-specific allocation pattern); confirmed in 0.9.8 §C row 3.
5 SWE4-UV-040 x86 inclusion (Wave 3 fold) CLOSED by Wave 3 fold per the 0.9.6 §G coverage and absorbed into the SWE4-UV-040 row anchored to SDD-073 / SAD-063 (Android build config — three-ABI set with x86_64 included). The DEC-032 temporary abiFilters reduction (§H below) does not invalidate this closure; SDD-073 item 4 / SDD-118 item 3 still mandate x86_64 as part of the canonical three-ABI set and SWE4-UV-040 verifies against the canonical set.

All five carried items confirmed closed at this audit revision. No reopens.

H. DEC-032 status note (unchanged)

DEC-032 (temporary reduction of Android abiFilters to arm64-v8a only during the P0 smoke-test cycle) remains Active (temporary deviation) as recorded in 0.9.9 §D. The exit criteria (canonical three-ABI set restoration per SDD-073 item 4 / SDD-118 item 3, all-three-ABI clean CI compilation, release-inspection assertion covering all three .so files plus libc++_shared.so per SDD-118 item 6 extended) remain PENDING. Owner: Build/Toolchain. No matrix-side change at this revision; the existing 0.9.9 §D cross-reference remains the canonical record.

I. New traceability gaps surfaced by this audit

# Gap Severity Owner
1 SWE4-UV-058..SWE4-UV-062 authoring (RESOLVED at commit time). At audit time the IDs were absent from docs/verification/swe4-unit-verification-plan.md and verification-engineer's dispatch was in flight in parallel. The dispatch landed at swe4 plan v0.9.15 concurrent with this matrix update; §A markers reconciled to PENDING_BASELINE. Only remaining gap: first workflow_dispatch run on bench-baseline-update.yml to seed the SAD-089 baseline JSON (gated on CI minutes return). Medium → Low (resolved). Engineering chain (SysRS → … → SDD → Code) closed end-to-end; SWE.4 authoring complete. Does NOT raise BLOCKED_REQUIREMENT_GAP. RESOLVED (verification-engineer landed SWE4-UV-058..062 at swe4 plan v0.9.15).
2 First workflow_dispatch run of .github/workflows/bench-baseline-update.yml has not occurred — the crates/chanora_audio/benches/baselines/x86_64-unknown-linux-gnu.json file exists as a seeded SAD-089 baseline per SDD-120 §1, but the first CI-driven baseline-establishment run is gated on CI minutes return. Once the run lands, the seeded file is superseded by the workflow-produced PR. Low — non-traceability; affects baseline-value freshness only. Build/Toolchain (CI-minutes scheduling); Audio Owner (PR review).

No code-without-SDD-or-upstream-trace condition was found. Every code anchor in §F carries an SDD-120 reference and resolves upward through SAD-088..091 → SRS-216..219 → SysDes-156..158 → SysRS-307..309. BLOCKED_REQUIREMENT_GAP is not raised.

J. Strict-hierarchy discipline check

  • SRS-216..219 source from SysDes-156..158 only; no direct SysRS source.
  • SAD-088..091 source from SRS-216..219 only; no direct SysDes link.
  • SDD-120 sources from SAD-088..091 only; no direct SysRS / SysDes / SRS link.
  • SWE4-UV-058..062 (forward-allocated) source from SDD-120 only; verification remains downstream evidence.
  • DEC-032 remains a governance cross-reference and does not act as an engineering-layer direct source.

No forbidden direct links were introduced by this sub-wave.

K. Items intentionally NOT changed by this addendum

Item Reason for non-change
docs/requirements/sysrs.md, docs/architecture/sysdes.md, docs/requirements/srs.md, docs/architecture/sad.md, docs/architecture/sdd.md Read-only per task brief.
docs/verification/swe4-unit-verification-plan.md and all other docs/verification/** Read-only per task brief; SWE4-UV-058..062 authoring is owned by verification-engineer in parallel dispatch.
docs/governance/product-decision-register.md The SDD-120 chain is a normal SDD-anchored feature delivery, NOT a deviation; DEC-032 is the only relevant DEC and is unchanged. No new DEC entry is warranted.
Source code (incl. crates/chanora_audio/**, .github/workflows/**) Read-only per task brief.
Workspace-root untracked files current.json and report.md Gitignored as of 75b04f0; ignored per task brief.

L. Final verdict

TRACEABILITY_OK (engineering hierarchy). The chain SysRS-307..309 → SysDes-156..158 → SRS-216..219 → SAD-088..091 → SDD-120 → Code (commits 3a7750a + 8e95972 + 75b04f0) is closed end-to-end at every engineering layer. Every code anchor in §F resolves to SDD-120 and upward. No forbidden direct links introduced. No code-without-SDD condition found.

TRACEABILITY_GAPS_REMAIN (verification only). SWE4-UV-058..062 are absent from swe4-unit-verification-plan.md at this audit time (parallel verification-engineer dispatch in flight). The gap is verification-authoring only; the engineering chain is unaffected and BLOCKED_REQUIREMENT_GAP is not raised.

Overall decision: TRACEABILITY_OK for the engineering layers (SysRS → … → Code); TRACEABILITY_GAPS_REMAIN for SWE4-UV-058..062 verification authoring only.

Verification-engineer's parallel dispatch landed SWE4-UV-058..062 into docs/verification/swe4-unit-verification-plan.md at v0.9.15 concurrent with this matrix update. The two updates were committed + pushed together as a single doc commit; §A markers were reconciled to PENDING_BASELINE at commit time (no follow-up patch required).

Version Date Description
0.9.10 2026-05-18 Absorbed the full SDD-120 (RealtimeAudioBenchmarkHarnessAndAdvisoryCI, v0.9.16) end-to-end chain: SysRS-307/308/309 → SysDes-156/157/158 → SRS-216..219 → SAD-088..091 → SDD-120 → Code (commits 3a7750a initial harness + 8e95972 workflow/comparator + 75b04f0 gitignore). Added five end-to-end metric-family rows in §A (capture alloc count → SWE4-UV-058; capture callback wall-clock → SWE4-UV-059; opus encode → SWE4-UV-060; opus decode → SWE4-UV-061; resampler throughput → SWE4-UV-062), all marked PENDING_BASELINE post-reconciliation (verification-engineer's parallel dispatch landed SWE4-UV-058..062 at swe4-unit-verification-plan.md v0.9.15 concurrent with this matrix update; §A markers reconciled at commit time). Added §B advisory CI workflow row (SysRS-308 → SysDes-157 → SRS-218 → SAD-090 → SDD-120 §6 → bench-advisory.yml + compare_baseline.rs), §C workflow-isolation row (SAD-091 → SDD-120 §7 → bench-baseline-update.yml), §D tolerance-window row (SysRS-309 → SysDes-158 → SRS-219 → SDD-120 §8 → compare_baseline.rs; no dedicated SAD allocation acknowledged), and §E baseline-storage row (SRS-217 → SAD-089 → SDD-120 §5 → emit_baseline.rs + x86_64-unknown-linux-gnu.json). §F refreshed the code-anchor table with 10 new entries (common.rs, realtime_capture.rs, opus_codec.rs, resampler.rs, emit_baseline.rs, compare_baseline.rs, Cargo.toml, bench-advisory.yml, bench-baseline-update.yml, .gitignore). §G confirmed five prior open issues CLOSED (SRS-210..215 matrix rows, SDD-110 Source SAD correction, SysDes-135 generic reuse, SRS-111 dual-allocation pattern, SWE4-UV-040 x86 inclusion). §H noted DEC-032 status unchanged (Active temporary deviation; exit criteria pending). §I surfaced two new non-blocking gaps (SWE4-UV-058..062 absent from swe4 plan; first workflow_dispatch baseline run gated on CI minutes). §J confirmed strict-hierarchy discipline preserved. SDD-120 §10 deferred items (multi-host benches, Dart-side bridge bench, production telemetry export, hard CI gate) recorded as DEFERRED. TRACEABILITY_OK for engineering layers; TRACEABILITY_GAPS_REMAIN for SWE.4 authoring only; BLOCKED_REQUIREMENT_GAP not raised.

Deferred Work Watchlist (Baseline Candidate 0.9.11)

This section is the single canonical durable register for deferred / future-work commitments surfaced by ratified SysRS / SysDes / SRS / SAD / SDD / DEC artefacts in this product line. Prior to v0.9.11 such deferrals lived only in document prose (e.g. SDD-120 §10, SDD-119 §3, DEC-032 resolution prose, researcher Tier B notes), where they are at risk of silent slippage when the originating document is consulted as a status source ("are we doing X?" → "yes" forgetting the escalation/closure work was queued).

The watchlist is governance-layer only. It does not act as an engineering-layer direct source (SysRS -> SysDes -> SRS -> SAD -> SDD is unaffected) and it does not relax any coverage rule. Each entry is a commitment to act once a gating condition is met, not a ratified decision; ratified decisions continue to live in docs/governance/product-decision-register.md.

Conventions

  • ID format: DW-NNN (Deferred Work). Numbering is monotonic and watchlist-local; gaps are permitted (e.g. when a DW is dropped, its ID is retired, not reused).
  • Source: the upstream artefact whose prose flags the deferral. A DW must cite a concrete document/section/clause; "general intent" is not a valid source.
  • Gating condition: the externally observable trigger that converts the DW from "deferred" to "actionable". Once met, the DW is the entry point for dispatching the named owner agent.
  • Priority: P0 (blocks current product baseline), P1 (near-term post-baseline), P2 (medium-term hardening), P3 (optional polish).
  • Owner Agent: the agent layer that owns the next action when the gating condition fires. "operator action" is reserved for human-only steps that no agent can dispatch on its own.

A DW is retired (not deleted) by marking its row RETIRED in a future matrix revision once the work is either (a) ratified into an SysRS/SysDes/SRS/SAD/SDD/DEC chain, or (b) explicitly dropped via a recorded governance decision.

Watchlist

ID Source Item Gating Condition Priority Owner Agent
DW-001 SDD-120 §10 / SysRS-308 deferred clause Dimension 3 production telemetry export (real-device, real-call benchmark dimension of the Option B benchmark scope) Post-baseline-maturity SysRS clause authored + ratified DEC entry P1 systems-requirements
DW-002 SDD-120 §10 / SysRS-308 deferred clause Build-failing hard CI gate (escalation from the current advisory-only bench-advisory workflow) 46 weeks of clean baseline data accumulated + ratified DEC entry authorising the escalation P1 systems-requirements
DW-003 SDD-120 §10 / SysDes-157 Multi-host benchmarking (macOS Apple Silicon, Windows x86_64 runners — currently Linux x86_64 only) SysDes revision to allow more than one canonical bench host + CI minutes budget approval P2 system-architect
DW-004 SDD-120 §10 IDE integration (cargo bench from rust-analyzer, IntelliJ run configs, flutter-tool wrappers) Optional tooling polish — no external gate; pick up when capacity allows P3 builder
DW-005 SDD-120 §10 / researcher Wave 4 Tier B4 Dart-side flutter_rust_bridge round-trip benchmark SAD/SDD authoring for the Dart-side bench infrastructure P2 detailed-designer
DW-006 SDD-119 §3 v0.9.17 (iOS half of the deployment-target SoT consolidation; macOS half closed by commit b23b46c) iOS deployment-target SoT consolidation — collapse the multi-site IPHONEOS_DEPLOYMENT_TARGET=13.0 declarations in the iOS podspec / Podfile to a single Ruby constant parallel to apps/chanora_flutter/macos/macos_deployment_target.rb Parallel-to-macOS work; pick up when iOS build hardening capacity available P2 detailed-designer
DW-007 researcher Wave 4 Tier B Opus encode/decode latency under varied conditions (per-bitrate, per-complexity, per-frame-size sweeps beyond the SDD-120 §3 canonical 20 ms / 960-sample / default-complexity baseline) SDD-120 baseline maturity (DW-002 prerequisite recommended but not strictly required) P2 verification-engineer
DW-008 researcher Wave 4 Tier B Resampler throughput at non-canonical rate pairs (beyond the SDD-120 §3 canonical triplet) SDD-120 baseline maturity P3 verification-engineer
DW-009 researcher Wave 4 Tier B Protocol forwarder loop tracing benchmark SDD-120 baseline maturity P3 verification-engineer
DW-010 DEC-032 resolution prose (product-decision-register.md v0.9.8.1 row; DEC-032 §"Resolved" status row) Remove the workspace [patch.crates-io] cmake-rs pin (currently pinned to fork pr2502/cmake-rs @ bdad5edc569d82151922c5c6c4685b1563f12aa1 carrying cmake-rs PR #257) and switch to a plain upstream cmake crate version bump cmake-rs PR #257 merges into upstream + a fresh cmake crate release is published to crates.io carrying that fix P2 builder
DW-011 (no source SDD yet — investigation pending; surfaced by recent Linux runtime reports) Linux SIGABRT root-cause investigation + graceful-shutdown SRS/SDD chain authoring User-supplied reproducer artifacts (crash log, stack trace, environment) sufficient to begin debugger analysis P0 debugger then systems-requirements
DW-012 SDD-120 §6 / SAD-091 Manual workflow_dispatch invocation of .github/workflows/bench-baseline-update.yml to seed the first real SAD-089 baseline JSON (superseding the currently-seeded committed baseline) CI minutes return + human operator schedules the dispatch and reviews the resulting PR P1 operator action (not an agent dispatch)

Already-tracked check

A pre-authoring search for these items confirmed:

  • DW-010 partial precedent: DEC-032's resolution prose in product-decision-register.md (v0.9.8.1 history row + DEC-032 §Notes/Status row) explicitly calls out "re-evaluate the [patch.crates-io] override once cmake-rs PR #257 merges and a fresh cmake release lands". This is prose only — there is no durable watch-list entry, so DW-010 is the canonical tracker. The DEC-032 prose remains the source citation.
  • DW-006 partial precedent: SDD-119 §3 v0.9.17 prose flags the iOS SoT consolidation as an "open follow-up" (the macOS half is closed by commit b23b46c). This is prose only — no other governance register tracks it, so DW-006 is the canonical tracker.
  • DW-011 not pre-tracked: no SysRS / SysDes / SRS / SAD / SDD / DEC currently anchors a Linux SIGABRT graceful-shutdown clause. DW-011 holds the slot until reproducer artifacts arrive and a SysRS/SysDes/SRS/SAD/SDD chain can be authored (at which point DW-011 retires and ordinary engineering-layer traceability takes over).
  • DW-001..005, DW-007..009, DW-012: surfaced from SDD-120 §10 prose and researcher Tier B notes only; no other governance register currently tracks them.

No duplicates introduced.

Strict-hierarchy discipline check

The watchlist does not introduce any forbidden direct link. Each DW cites its source artefact for traceability but does not itself act as an upstream source for any SysRS / SysDes / SRS / SAD / SDD item. Owner-agent fields are dispatch hints, not engineering-layer allocations.

Decision

TRACEABILITY_OK. The matrix now durably tracks 12 deferred work commitments that previously lived only in document prose. No engineering-chain regression. BLOCKED_REQUIREMENT_GAP is not raised (the watchlist absorbs prose-only deferrals into a durable register; it does not surface any code-without-SDD condition).

None. The watchlist is the deliverable. Once a DW's gating condition is satisfied, that DW row becomes the entry point for dispatching its named owner agent into the ordinary SysRS / SysDes / SRS / SAD / SDD / Code / Verification chain.

Version Date Description
0.9.11 2026-05-18 Added §"Deferred Work Watchlist" as the single canonical durable register for prose-only deferrals previously scattered across SDD-120 §10 (5 items: Dimension 3 telemetry, hard CI gate, multi-host benches, IDE integration, Dart-side frb round-trip bench), SDD-119 §3 v0.9.17 (iOS deployment-target SoT consolidation; macOS half already closed by commit b23b46c), researcher Wave 4 Tier B (Opus latency sweeps, non-canonical resampler rate pairs, protocol forwarder loop tracing), DEC-032 resolution prose (cmake-rs [patch.crates-io] override removal once PR #257 merges upstream), Linux SIGABRT investigation (no source SDD yet; held in DW-011 pending reproducer artifacts), and the manual seed-baseline workflow_dispatch operator action (SDD-120 §6 / SAD-091). 12 entries authored: DW-001..DW-012. ID convention introduced (monotonic DW-NNN, retired-not-reused). Watchlist is governance-only and does not relax any coverage rule; strict-hierarchy discipline preserved (SysDes -> SysRS, SRS -> SysDes, SAD -> SRS, SDD -> SAD unaffected). Recommended next agent: none — the watchlist is the deliverable; each row becomes the entry point for its named owner agent once its gating condition fires. BLOCKED_REQUIREMENT_GAP not raised.