feat(06-05): capability guards — haptics + close protection + optional webapp members + RS10/BA9 gate bumps (GREEN)

- fireHaptic: the three D-08 cues (selectionChanged / impactOccurred medium / notificationOccurred success) via ?. chains; silent no-op without the API; header carries the no-haptic-on-reroute law
- engage/releaseCloseProtection: PX-03 layers gated BEFORE each call — isVersionAtLeast("7.7") body-swipe, ("6.2") native-close net; no-throw on capability-less clients (T-06-06)
- webapp.ts: HapticFeedback / vertical-swipes / closing-confirmation / isActive join as OPTIONAL members only — existing fakes untouched
- RS10 floor 16→24; BA9 input list += web/src/guidance (69507 / 204800 gz, printed)
This commit is contained in:
araharah-executor
2026-10-24 14:21:21 +08:00
parent 47b1524472
commit da42c7793b
5 changed files with 105 additions and 12 deletions
+2 -2
View File
@@ -543,10 +543,10 @@ test("RS9 strings-only copy — no pending-card English in web/src/route; the ca
/* ————— RS10 — the route family exists under the storage gate ————— */
test("RS10 no-storage floor bump — web/src/route exists and joins the GEO3 scan (>= 16 files)", () => {
test("RS10 no-storage floor bump — web/src/route exists and joins the GEO3 scan (>= 24 files, the guidance family landed)", () => {
assert.ok(existsSync(ROUTE_DIR), "web/src/route exists (the Phase 5 route module family)");
const all = listFiles(SRC, [".ts", ".html"]);
assert.ok(all.length >= 16, `the src scan totals >= 16 files now the route family landed (found ${all.length})`);
assert.ok(all.length >= 24, `the src scan totals >= 24 files now the Phase 6 guidance family landed (found ${all.length})`);
const routeFiles = listFiles(ROUTE_DIR, [".ts"]);
assert.ok(routeFiles.length >= 4, `the route family carries its four modules (found ${routeFiles.length})`);
for (const file of routeFiles) {