Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
185 commits
Select commit Hold shift + click to select a range
c21652e
fix: DEBUG-511 honour ACK on a close that died without a verdict
MP2EZ Aug 23, 2026
d88e298
fix: DEBUG-516 pin the save control against the live keyboard frame
MP2EZ Aug 23, 2026
677839b
chore: MAINT-513 App Store Server API hosts to Apple's documented bas…
MP2EZ Aug 23, 2026
96b52c8
test: DEBUG-516 restore the keyboard-up save block at XXXL
MP2EZ Aug 23, 2026
e4a8e0c
Merge remote-tracking branch 'origin/development' into fix/DEBUG-516-…
MP2EZ Aug 23, 2026
b073405
Merge pull request #422 from MP2EZ/chore/MAINT-513-app-store-server-a…
MP2EZ Aug 23, 2026
095cb52
test: DEBUG-516 the drag block cannot be a second capture — `saved` i…
MP2EZ Aug 23, 2026
b5d0817
chore: INFRA-512 adversarial crisis-corpus harness, fixture and offli…
MP2EZ Aug 23, 2026
836acb8
test: DEBUG-516 drop the drag-dismissal block — it loses a race with …
MP2EZ Aug 23, 2026
a6103a4
Merge pull request #423 from MP2EZ/chore/INFRA-512-adversarial-crisis…
MP2EZ Aug 23, 2026
8d6834d
Merge remote-tracking branch 'origin/development' into fix/DEBUG-511-…
MP2EZ Aug 23, 2026
5c5c3f9
chore: DEBUG-516 declare the new hook suite in the CI-coverage ledger
MP2EZ Aug 23, 2026
78a73f6
Merge remote-tracking branch 'origin/development' into fix/DEBUG-516-…
MP2EZ Aug 23, 2026
79bce8a
test: derive required iOS purpose strings from linked native sources
MP2EZ Aug 23, 2026
017f60e
fix: stop release.yml reporting green for a failed build
MP2EZ Aug 23, 2026
18c4167
Merge pull request #424 from MP2EZ/fix/DEBUG-511-b-close-status-ack-s…
MP2EZ Aug 23, 2026
e5e713f
Merge branch 'development' into chore/release-hardening
MP2EZ Aug 23, 2026
5bdec24
Merge pull request #425 from MP2EZ/chore/release-hardening
MP2EZ Aug 23, 2026
f2af6ca
Merge remote-tracking branch 'origin/development' into fix/DEBUG-516-…
MP2EZ Aug 23, 2026
3850b57
Merge pull request #427 from MP2EZ/fix/DEBUG-516-journal-save-occlude…
MP2EZ Aug 23, 2026
93ebc6b
chore: INFRA-459 main-branch-health SCOPE comment stated drift as a d…
MP2EZ Aug 23, 2026
d7c05b3
Merge pull request #428 from MP2EZ/chore/INFRA-459-workflow-parity-doc
MP2EZ Aug 23, 2026
c1412e0
docs: hotfix cuts a worktree off origin/main, which no longer has one
MP2EZ Aug 23, 2026
f7bf37b
Merge pull request #429 from MP2EZ/docs/hotfix-no-main-worktree
MP2EZ Aug 23, 2026
84c2837
fix: DEBUG-527 completed practice card no longer fails WCAG AA
MP2EZ Aug 24, 2026
4d0df43
fix: DEBUG-519 guard the two continue taps DEBUG-465's ruling never r…
MP2EZ Aug 24, 2026
c7b6473
chore: INFRA-420 pin the guidance gate's gentle-band tier cap
MP2EZ Aug 24, 2026
7654b22
feat: FEAT-288 date-range filter for journal re-read (Slice C)
MP2EZ Aug 24, 2026
e0d6338
Merge pull request #430 from MP2EZ/feat/FEAT-288-journal-date-range-f…
MP2EZ Aug 24, 2026
cd9e528
Merge remote-tracking branch 'origin/development' into fix/DEBUG-519-…
MP2EZ Aug 24, 2026
bbf7f74
fix: DEBUG-519 record the measured bounds, which correct the derivation
MP2EZ Aug 24, 2026
389fa99
Merge remote-tracking branch 'origin/development' into chore/INFRA-42…
MP2EZ Aug 24, 2026
783b0e7
chore: INFRA-420 scroll before asserting the tier cap — it was vacuous
MP2EZ Aug 24, 2026
472487e
Merge pull request #431 from MP2EZ/fix/DEBUG-519-continue-tap-scroll-…
MP2EZ Aug 24, 2026
9c52eeb
Merge remote-tracking branch 'origin/development' into chore/INFRA-42…
MP2EZ Aug 24, 2026
2fc22d5
fix: DEBUG-527 correct stale docstring left by the opacity removal
MP2EZ Aug 24, 2026
f9989fb
Merge pull request #432 from MP2EZ/chore/INFRA-420-guidance-gentle-ti…
MP2EZ Aug 24, 2026
d6ac6e7
Merge remote-tracking branch 'origin/development' into fix/DEBUG-527-…
MP2EZ Aug 24, 2026
e43223c
Merge pull request #433 from MP2EZ/fix/DEBUG-527-completed-daily-prac…
MP2EZ Aug 24, 2026
7402d8e
chore: MAINT-528 the daily practice card hugs, the space goes terminal
MP2EZ Aug 24, 2026
4b2119d
fix: DEBUG-534 privacy policy named an analytics-deletion control tha…
MP2EZ Aug 24, 2026
344ebe1
Merge pull request #434 from MP2EZ/fix/DEBUG-534-privacy-policy-names…
MP2EZ Aug 24, 2026
0c9e599
Merge remote-tracking branch 'origin/development' into chore/MAINT-52…
MP2EZ Aug 24, 2026
d14d617
Merge pull request #436 from MP2EZ/chore/MAINT-528-home-daily-practic…
MP2EZ Aug 24, 2026
5dee295
fix: DEBUG-548 announce the Home card description to VoiceOver
MP2EZ Aug 26, 2026
67c36c2
chore: INFRA-535 vendor frozen PHIFilter baseline + differential harn…
MP2EZ Aug 26, 2026
2b9be59
chore: INFRA-523 correct the falsified free-text zero-false-negative …
MP2EZ Aug 26, 2026
f97dd18
Merge pull request #437 from MP2EZ/fix/DEBUG-548-home-card-descriptio…
MP2EZ Aug 26, 2026
812bb57
fix: DEBUG-515 stop cross-test real-timer leakage flaking assessmentS…
MP2EZ Aug 26, 2026
103797d
chore: INFRA-535 scan property keys, values and arrays (C2)
MP2EZ Aug 26, 2026
d32f1c6
chore: INFRA-535 assert every tracker's real payload transmits (PR2)
MP2EZ Aug 26, 2026
a0ed690
Merge remote-tracking branch 'origin/development' into chore/INFRA-53…
MP2EZ Aug 26, 2026
a2595ba
Merge pull request #438 from MP2EZ/chore/INFRA-535-phifilter-scan-tig…
MP2EZ Aug 26, 2026
46b2255
chore: INFRA-523 land the six verified misses; first mixed-corpus fig…
MP2EZ Aug 26, 2026
ce3828d
Merge remote-tracking branch 'origin/development' into chore/INFRA-52…
MP2EZ Aug 26, 2026
19f3941
chore: INFRA-523 correct two stale premises in the INFRA-512 packet
MP2EZ Aug 26, 2026
68c1089
Merge pull request #439 from MP2EZ/chore/INFRA-523-crisis-corpus-guar…
MP2EZ Aug 26, 2026
47b5956
Merge remote-tracking branch 'origin/development' into fix/DEBUG-515-…
MP2EZ Aug 26, 2026
4957227
Merge pull request #440 from MP2EZ/fix/DEBUG-515-assessmentstore-auto…
MP2EZ Aug 26, 2026
446ee6d
fix: DEBUG-539 destroy the analytics identity on account erasure
MP2EZ Aug 26, 2026
0c5be84
Merge pull request #441 from MP2EZ/fix/DEBUG-539-analytics-identity-r…
MP2EZ Aug 26, 2026
2c90a3c
fix: DEBUG-545 make the account-deletion attestation durable
MP2EZ Aug 26, 2026
e07a504
fix: DEBUG-547 move both Home rows out of the crisis FAB's contested …
MP2EZ Aug 26, 2026
a9daa11
fix: DEBUG-553 correct phiDetection's docblocks to describe the armed…
MP2EZ Aug 27, 2026
39f523d
Merge pull request #444 from MP2EZ/fix/DEBUG-553-phidetection-docbloc…
MP2EZ Aug 27, 2026
8b22049
Merge remote-tracking branch 'origin/development' into fix/DEBUG-545-…
MP2EZ Aug 27, 2026
8af5928
Merge pull request #442 from MP2EZ/fix/DEBUG-545-attestation-durability
MP2EZ Aug 27, 2026
8033946
Merge remote-tracking branch 'origin/development' into fix/DEBUG-547-…
MP2EZ Aug 27, 2026
7a51b3b
Merge pull request #443 from MP2EZ/fix/DEBUG-547-crisis-fab-occludes-…
MP2EZ Aug 28, 2026
c98af81
chore: INFRA-554 measure crisis-text recall against a blind adversari…
MP2EZ Aug 28, 2026
9eafc03
fix: DEBUG-557 pin the consent-grant navigator remount (AC-1)
MP2EZ Aug 30, 2026
614a035
Merge pull request #445 from MP2EZ/fix/DEBUG-557-consent-grant-naviga…
MP2EZ Aug 30, 2026
ea082e8
chore: INFRA-558 record how the PHIFilter whitelist is amended, and e…
MP2EZ Aug 30, 2026
9e685ce
Merge pull request #446 from MP2EZ/chore/INFRA-558-phifilter-baseline…
MP2EZ Aug 30, 2026
19a81b5
fix: DEBUG-549 delete the redundant autosave subscription
MP2EZ Aug 30, 2026
e77aac2
Merge remote-tracking branch 'origin/development' into chore/INFRA-55…
MP2EZ Aug 30, 2026
c3a7616
Merge pull request #447 from MP2EZ/chore/INFRA-554-adversarial-crisis…
MP2EZ Aug 30, 2026
1b6290f
fix: DEBUG-550 refuse to score a malformed answer set, and stop stran…
MP2EZ Aug 30, 2026
1ab5179
fix: DEBUG-560 crisis contact lines are one text flow, not a fixed 80…
MP2EZ Aug 30, 2026
94e46ee
chore: INFRA-542 wire app_opened / app_backgrounded (slice 1)
MP2EZ Aug 30, 2026
3392371
chore: INFRA-542 wire src/core/analytics into CI by pattern
MP2EZ Aug 30, 2026
e371dfe
Merge pull request #448 from MP2EZ/chore/INFRA-542-app-lifecycle-events
MP2EZ Aug 30, 2026
8a80607
chore: INFRA-552 derive SAFE_EVENT_TYPES from AnalyticsEvents (AC5)
MP2EZ Aug 30, 2026
274effa
Merge remote-tracking branch 'origin/development' into fix/DEBUG-560-…
MP2EZ Aug 30, 2026
673bf36
chore: INFRA-552 prune the 12 orphan analytics constants
MP2EZ Aug 30, 2026
c5c3328
Merge pull request #449 from MP2EZ/chore/INFRA-552-analytics-catalog-…
MP2EZ Aug 30, 2026
9048f1a
Merge remote-tracking branch 'origin/development' into fix/DEBUG-560-…
MP2EZ Aug 30, 2026
f222ebb
fix: DEBUG-533 rule the Sentry feedback widget a zero-988 window, har…
MP2EZ Aug 30, 2026
47da035
Merge pull request #450 from MP2EZ/fix/DEBUG-560-crisis-contact-label…
MP2EZ Aug 30, 2026
136214e
feat: FEAT-567 pin the Epictetus digitization and repair four mis-att…
MP2EZ Aug 30, 2026
bcf9bd6
Merge remote-tracking branch 'origin/development' into feat/FEAT-567-…
MP2EZ Aug 30, 2026
09162b5
chore: correct the stale practice_haptics ship-dark note in featureFl…
MP2EZ Aug 30, 2026
d9048f2
Merge pull request #451 from MP2EZ/feat/FEAT-567-classical-library-pr…
MP2EZ Aug 30, 2026
fb4a107
fix: DEBUG-524 pin voice-journal record-tap process liveness
MP2EZ Aug 30, 2026
1553e1d
chore: MAINT-566 rewrite the evening VirtuousResponse placeholder
MP2EZ Aug 30, 2026
8f75ed4
fix: DEBUG-533 AC 1 — record the on-device measurement behind the ruling
MP2EZ Aug 31, 2026
7121e7a
Merge remote-tracking branch 'origin/development' into fix/DEBUG-533-…
MP2EZ Aug 31, 2026
6dda85b
Merge pull request #452 from MP2EZ/fix/DEBUG-533-bug-report-shake-988…
MP2EZ Aug 31, 2026
ea4a0b5
Merge remote-tracking branch 'origin/development' into fix/DEBUG-524-…
MP2EZ Aug 31, 2026
2c7cde4
Merge pull request #453 from MP2EZ/fix/DEBUG-524-journal-record-audio…
MP2EZ Aug 31, 2026
76521a9
fix: DEBUG-573 fail the install when a patch does not apply
MP2EZ Aug 31, 2026
c83d907
chore: DEBUG-573 allowlist GHSA-vcc3 — the fix exists but breaks the …
MP2EZ Sep 1, 2026
1d9f289
chore: INFRA-532 give WeeklyReflectionComposer real gate coverage
MP2EZ Sep 1, 2026
0f6f723
Merge pull request #454 from MP2EZ/fix/DEBUG-573-patch-audio-teardown…
MP2EZ Sep 1, 2026
57c247f
fix: DEBUG-575 move root-slot focus trap off the overlay onto the nav…
MP2EZ Sep 1, 2026
bd227bd
fix: DEBUG-575 finding 2 — release the root slot on entry to a crisis…
MP2EZ Sep 1, 2026
0c2d927
chore: INFRA-532 move the focus-trap pin into the CI-run safety suite
MP2EZ Sep 1, 2026
b2435d8
Merge remote-tracking branch 'origin/development' into chore/INFRA-53…
MP2EZ Sep 1, 2026
23be61e
Merge pull request #455 from MP2EZ/chore/INFRA-532-weekly-reflection-…
MP2EZ Sep 1, 2026
b7b0bf3
Merge remote-tracking branch 'origin/development' into chore/MAINT-56…
MP2EZ Sep 3, 2026
ef8a017
chore: INFRA-576 fix three un-allowlisted CVEs blocking every PR
MP2EZ Sep 3, 2026
9b4f3eb
chore: INFRA-576 correct two stale npm-audit comments in ci.yml
MP2EZ Sep 3, 2026
70b1d54
Merge pull request #459 from MP2EZ/chore/INFRA-576-npm-audit-gate-red…
MP2EZ Sep 3, 2026
922c8d4
chore: INFRA-571 add a call-site rule for third-party full-screen pre…
MP2EZ Sep 4, 2026
20c6066
Merge pull request #460 from MP2EZ/chore/INFRA-571-occlusion-guard-ca…
MP2EZ Sep 4, 2026
a7fedd7
chore: INFRA-568 rotate session_id instead of claiming a rotation it …
MP2EZ Sep 4, 2026
bc21b8b
Merge pull request #461 from MP2EZ/chore/INFRA-568-session-id-rotation
MP2EZ Sep 4, 2026
ac19089
fix: DEBUG-562 derive the tab bar height from the bottom safe-area inset
MP2EZ Sep 4, 2026
7217396
Merge pull request #462 from MP2EZ/fix/DEBUG-562-tab-bar-safe-area-inset
MP2EZ Sep 4, 2026
142b839
fix: DEBUG-559 stop the consent grant remounting the crisis subtree
MP2EZ Sep 5, 2026
35f8acf
test: DEBUG-559 prove the pre-consent client is silent against the re…
MP2EZ Sep 5, 2026
69afabb
fix: DEBUG-536 restore six feature-usage trackers INFRA-552 pruned
MP2EZ Sep 5, 2026
d927293
fix: DEBUG-536 wire all six restored trackers to real call sites
MP2EZ Sep 5, 2026
119a798
fix: DEBUG-536 teach the practice-screen mocks about markStarted
MP2EZ Sep 5, 2026
aa7aa50
Merge pull request #463 from MP2EZ/fix/DEBUG-536-wire-feature-usage-a…
MP2EZ Sep 5, 2026
feb83d5
feat: FEAT-569 close the radical-acceptance doctrinal traps and encod…
MP2EZ Sep 5, 2026
a06671a
Merge pull request #464 from MP2EZ/feat/FEAT-569-radical-acceptance-d…
MP2EZ Sep 5, 2026
c831f76
Merge remote-tracking branch 'origin/development' into fix/DEBUG-559-…
MP2EZ Sep 5, 2026
e7ef59e
test: DEBUG-559 re-fixture DEBUG-536's consent-gate suite onto the store
MP2EZ Sep 5, 2026
5328b36
Merge remote-tracking branch 'origin/development' into chore/MAINT-56…
MP2EZ Sep 5, 2026
6c39923
Merge pull request #465 from MP2EZ/fix/DEBUG-559-posthogprovider-stab…
MP2EZ Sep 5, 2026
a928093
Merge remote-tracking branch 'origin/development' into chore/MAINT-56…
MP2EZ Sep 5, 2026
14d24f7
Merge pull request #458 from MP2EZ/chore/MAINT-566-virtuous-response-…
MP2EZ Sep 5, 2026
b25edbd
chore: MAINT-564 daily loop presentation — virtue chip grid and heade…
MP2EZ Sep 5, 2026
8d08f7f
Merge pull request #466 from MP2EZ/chore/MAINT-564-daily-loop-present…
MP2EZ Sep 5, 2026
fe36bfc
Merge remote-tracking branch 'origin/development' into fix/DEBUG-549-…
MP2EZ Sep 5, 2026
20a1597
Merge pull request #467 from MP2EZ/fix/DEBUG-549-autosave-subscriptio…
MP2EZ Sep 5, 2026
95ab571
Merge remote-tracking branch 'origin/development' into fix/DEBUG-550-…
MP2EZ Sep 5, 2026
19b1743
Merge pull request #468 from MP2EZ/fix/DEBUG-550-completeassessment-s…
MP2EZ Sep 5, 2026
5f99c0f
fix: DEBUG-582 make seneca-letters-13 verbatim Gummere and pin the di…
MP2EZ Sep 7, 2026
f1e5a7c
Merge pull request #469 from MP2EZ/fix/DEBUG-582-seneca-letters-13-gu…
MP2EZ Sep 7, 2026
5e57820
feat: FEAT-580 give Letters 107.11 its affective complement and fix t…
MP2EZ Sep 7, 2026
a94f7fb
feat: FEAT-570 refuse and release the root overlay slot on screen-own…
MP2EZ Sep 7, 2026
1cceb81
Merge pull request #470 from MP2EZ/feat/FEAT-580-seneca-107-affective…
MP2EZ Sep 7, 2026
e71646c
feat: FEAT-570 replace Sentry's feedback widget with an in-hierarchy …
MP2EZ Sep 7, 2026
7bba8f4
docs: FEAT-565 record the declined haptics ruling on the Aware Presen…
MP2EZ Sep 7, 2026
644335e
Merge remote-tracking branch 'origin/development' into feat/FEAT-570-…
MP2EZ Sep 7, 2026
033656f
Merge pull request #471 from MP2EZ/feat/FEAT-570-slot-refuses-screen-…
MP2EZ Sep 7, 2026
e69c709
Merge remote-tracking branch 'origin/development' into feat/FEAT-570-…
MP2EZ Sep 7, 2026
03fb178
Merge remote-tracking branch 'origin/development' into feat/FEAT-565-…
MP2EZ Sep 7, 2026
3c15e69
Merge pull request #472 from MP2EZ/feat/FEAT-565-haptic-cues-daily-lo…
MP2EZ Sep 7, 2026
f1bae7a
Merge remote-tracking branch 'origin/development' into feat/FEAT-570-…
MP2EZ Sep 7, 2026
192711b
chore: INFRA-373 frame-probe spike — does useFrameCallback tick on Re…
MP2EZ Sep 7, 2026
5f6b34b
fix: FEAT-570 declare the certifying viewport on both bug-report flows
MP2EZ Sep 7, 2026
45875ac
chore: INFRA-373 clock the probe window off accumulated delta, not ti…
MP2EZ Sep 7, 2026
e6cfb75
Merge pull request #473 from MP2EZ/feat/FEAT-570-first-party-bug-repo…
MP2EZ Sep 7, 2026
919d6a0
chore: INFRA-373 extract the pure frame accumulator, and guard the probe
MP2EZ Sep 7, 2026
f819093
fix: DEBUG-586 import the crisis band instead of re-deriving it
MP2EZ Sep 8, 2026
120e29e
chore: INFRA-373 HUD scoping pin, perf-device flow, and device-run pl…
MP2EZ Sep 8, 2026
5b6de04
chore: INFRA-373 mark crisis-988-dial unrunnable pending DEBUG-589
MP2EZ Sep 8, 2026
4956174
fix: DEBUG-589 record the device gate as unavailable and pin the Maes…
MP2EZ Sep 8, 2026
7e0ecba
chore: INFRA-373 drop the crisis-988-dial annotation, DEBUG-589 super…
MP2EZ Sep 8, 2026
95fe6e8
fix: DEBUG-589 repair the third gate-run sandbox for the new pre-flights
MP2EZ Sep 8, 2026
6d48dc7
Merge pull request #474 from MP2EZ/fix/DEBUG-589-maestro-ios-driver-b…
MP2EZ Sep 8, 2026
096a534
Merge remote-tracking branch 'origin/development' into chore/INFRA-37…
MP2EZ Sep 8, 2026
d56bd39
Merge remote-tracking branch 'origin/development' into fix/DEBUG-586-…
MP2EZ Sep 8, 2026
eb6c895
chore: INFRA-373 record the probe as a hand-read instrument, with its…
MP2EZ Sep 8, 2026
ad4d1fe
Merge pull request #475 from MP2EZ/fix/DEBUG-586-crisis-geometry-impo…
MP2EZ Sep 8, 2026
e65c43a
chore: INFRA-373 record both control runs — Slice D complete
MP2EZ Sep 8, 2026
8ba75b2
Merge remote-tracking branch 'origin/development' into chore/INFRA-37…
MP2EZ Sep 8, 2026
bde965f
fix: DEBUG-585 name the Loeb edition Gummere translated, not the Peng…
MP2EZ Sep 8, 2026
3f8ceeb
fix: DEBUG-577 measure the share-sheet occlusion, record the purchase…
MP2EZ Sep 8, 2026
705282c
chore: INFRA-373 warn rather than exit when no Apple team id resolves
MP2EZ Sep 8, 2026
9571a59
Merge remote-tracking branch 'origin/development' into fix/DEBUG-577-…
MP2EZ Sep 8, 2026
c95b981
Merge pull request #476 from MP2EZ/chore/INFRA-373-breathing-frame-probe
MP2EZ Sep 8, 2026
39e9a4c
Merge remote-tracking branch 'origin/development' into fix/DEBUG-585-…
MP2EZ Sep 8, 2026
288963f
Merge pull request #477 from MP2EZ/fix/DEBUG-585-work-field-gummere-l…
MP2EZ Sep 8, 2026
34412b7
Merge remote-tracking branch 'origin/development' into fix/DEBUG-577-…
MP2EZ Sep 8, 2026
e8fa31b
Merge remote-tracking branch 'origin/development' into fix/DEBUG-577-…
MP2EZ Sep 8, 2026
c048b4c
Merge pull request #478 from MP2EZ/fix/DEBUG-577-measure-inferred-pre…
MP2EZ Sep 8, 2026
f7d5f0b
chore(release): v1.3.0 version bump
MP2EZ Sep 9, 2026
c059419
chore: bump js-yaml overrides past GHSA-2883-xcg3-v3hh
MP2EZ Sep 9, 2026
f9df187
Merge pull request #479 from MP2EZ/chore/release-v1.3.0-bump
MP2EZ Sep 9, 2026
44bc486
chore: back-merge main into development to clear the release conflict
MP2EZ Sep 9, 2026
763ec8c
Merge pull request #481 from MP2EZ/chore/backmerge-main-into-dev
MP2EZ Sep 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 63 additions & 11 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,48 @@ jobs:
# dragging a flaky suite in here would intermittently block every PR in the repo.
run: cd app && npm run test:practices -- --ci --testTimeout=20000

- name: Navigation layout tests
# DEBUG-562. Co-located under src/core/navigation/, which no existing pattern
# reaches: `test:unit` is --testPathPattern=unit and `test:integration` is
# =integration, and neither matches this directory. Two suites ran on NOBODY'S
# pull request until this step existed — including the one that pins the tab
# bar's top edge clear of the crisis FAB's touch band, which is the mechanical
# form of DEBUG-562's AC2 ruling and the only thing that catches drift on
# EITHER side of that collision.
#
# Wired by PATTERN, never by renaming files toward one — scripts/
# ci-uncovered-tests.json records coverage-by-filename as the defect it exists
# to remove. Scoped to the directory rather than the file for the same reason.
#
# `CleanTabNavigator.accessibility.test.tsx` in the same directory is already
# reached by the Accessibility job (its name carries `accessibility`); running
# it twice is cheap and beats keying this step on a filename.
run: cd app && npm run test:navigation -- --ci --testTimeout=20000

- name: Analytics boundary tests
# INFRA-542. Co-located under src/core/analytics/, which no existing pattern
# reaches: the two files here carrying `privacy` in their NAME are gated by
# test:privacy, and the rest of the directory by nothing — coverage by
# filename, the defect scripts/ci-uncovered-tests.json exists to remove.
#
# This directory is the app's ONLY third-party egress path. Its failure mode
# is silent in both directions: trackEvent early-returns without a client, and
# PHIFilter drops a violating payload with a log rather than a throw. A pin
# here that runs on nobody's PR is worth approximately nothing.
#
# Wired by PATTERN, never by renaming files toward one (DEBUG-468 precedent).
run: cd app && npm run test:analytics -- --ci --testTimeout=20000

- name: Classical library tests
# FEAT-567. passagesContent.test.ts holds the passage SCHEMA checks —
# author/work enum membership, principle match, duplicate ids, required
# fields — and matched no CI pattern, so a malformed passage could land
# unnoticed. The provenance suite that checks TRANSLATORS already runs
# (it lives under app/__tests__/unit/); this is the other half.
#
# Wired by PATTERN, never by renaming files toward one (DEBUG-468 precedent).
run: cd app && npm run test:library -- --ci --testTimeout=20000

- name: Upload coverage
if: always()
uses: actions/upload-artifact@v6
Expand All @@ -362,9 +404,11 @@ jobs:
retention-days: 14

# Security + compliance — encryption, HIPAA-adjacent checks, dependency
# audit. npm audit threshold is `high` (not `moderate`) until the
# 5-month-old lockfile is refreshed — see audit-roadmap.md Phase 0/3 for
# the planned dependency refresh.
# audit. npm audit threshold is `moderate`, tightened from `high` by
# MAINT-182 once the explicit allowlist landed (this header claimed `high`
# until INFRA-576; .audit-ci.json has said `"moderate": true` since
# MAINT-182). The 5-month-old lockfile refresh is still outstanding — see
# audit-roadmap.md Phase 0/3.
security:
name: Security + compliance
runs-on: ubuntu-latest
Expand Down Expand Up @@ -467,6 +511,15 @@ jobs:
# JS view hierarchy, so while one is open the root crisis button is not
# on screen at all — a zero-988-affordance render state.
#
# INFRA-571 added rule 4, which is a different SHAPE: a CALL SITE in
# app/src handing presentation to a third-party component that never
# appears in our tree (Sentry's feedback widget, expo-sharing's share
# sheet, the StoreKit purchase sheet). The <Modal> lives in node_modules,
# so rules 1-3 cannot see it, and INFRA-531's crisis-constant-import rule
# matches nothing because nothing on those paths imports from
# features/crisis/. Its allowlist is keyed <file>::<name> and fails on a
# stale entry the same way rule 2 does.
#
# This exists because a Protected Paths row could not catch it. The four
# sites DEBUG-406 audited live in src/core/components/ and
# src/features/insights/, neither of which is on that list and neither of
Expand Down Expand Up @@ -520,14 +573,13 @@ jobs:
- name: npm audit
# MAINT-182: switched from raw `npm audit --audit-level=high` to
# `audit-ci` with an explicit allowlist at app/.audit-ci.json.
# Three transitive CVEs in @expo/config-plugins@56.0.8 are
# allowlisted (GHSA-ph9p-34f9-6g65 tmp path traversal,
# GHSA-6vfc-qv3f-vr6c markdown-it ReDoS, GHSA-w5hq-g745-h8pq
# uuid bounds check) — all build-time only, no patched stable
# version available. Threshold is `moderate` (tightened from the
# prior `high`) since the allowlist gives precise control.
# Drop the GHSAs from .audit-ci.json when @expo/config-plugins
# >=56.0.9 ships as stable.
# Threshold is `moderate` (tightened from the prior `high`) since
# the allowlist gives precise control. Every allowlisted GHSA
# carries its own review note and drop-condition in that file's
# `$comment` — read there, not here; this list rotted twice.
# INFRA-576 retired GHSA-ph9p-34f9-6g65 (tmp), which this comment
# had attributed to @expo/config-plugins: the tree's only tmp
# arrives via patch-package and is already patched.
#
# Historical context (kept for archaeology): the W3 paydown's
# `npm audit fix` cleared 11 high+critical vulns (xmldom,
Expand Down
15 changes: 9 additions & 6 deletions .github/workflows/main-branch-health.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,15 @@ name: Main Branch Health
# exactly this gate, and this probe covers exactly it.
#
# WHAT THIS PROBE DOES NOT COVER — say it here so no future reader assumes
# coverage that is not present. `main`'s .github/workflows/ is separately stale
# (retired workflows still active there, an older NODE_VERSION, and a
# job-list that differs from development's). A pull_request into `main` runs
# MAIN's ci.yml, not this repo's current one, so a green probe does NOT by
# itself prove a hotfix PR will pass. Those gaps are tracked as INFRA-458 and
# INFRA-459.
# coverage that is not present. A pull_request into `main` runs MAIN's ci.yml,
# not this repo's current one, so a green probe does NOT by itself prove a
# hotfix PR will pass. `main` carries whatever workflows the last release
# shipped, so any workflow change merged to `development` since then is absent
# there. That drift is the normal state between releases, not an incident, and
# it RE-OPENS after every release — so read
# `git show origin/main:.github/workflows/ci.yml` rather than this repo's copy
# before reasoning about what gates a hotfix. INFRA-458 closed the 2026-07-13
# instance, in which `main` lacked the safety-privacy job outright for six weeks.
#
# THIS PROBE STILL CANNOT OBSERVE ITS OWN SILENCE, but something else now does:
# INFRA-460 added a liveness cross-check as a step in ci.yml's `ci-pass` job,
Expand Down
34 changes: 27 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,10 @@ jobs:
build-and-submit:
name: EAS build + auto-submit to TestFlight
runs-on: ubuntu-latest
timeout-minutes: 15
# Waits for the build (see the --no-wait note below), so this must cover
# EAS queue + build + submit. Observed build alone is ~7 min; queue is the
# variable. 15 min was the old budget for a fire-and-forget exit.
timeout-minutes: 60

steps:
- uses: actions/checkout@v5
Expand Down Expand Up @@ -114,10 +117,17 @@ jobs:
# accepts only --auto-submit / --auto-submit-with-profile, and the
# invented --submit-profile failed every real release from INFRA-146
# until DEBUG-336 (dry runs skip this step, so it went unnoticed).
# --no-wait lets this workflow exit quickly while EAS does
# the 20-30 min build + submit asynchronously. Failures surface in
# the EAS dashboard, in App Store Connect, and (for EAS-side errors)
# in this job's logs.
# This step deliberately does NOT pass --no-wait. It used to, and that
# made a red build report green: `eas build --no-wait` exits 0 the moment
# EAS *accepts* the job, so the workflow's conclusion described the
# scheduling, not the build. v1.2.0 errored in `Install dependencies` on
# an expired GITHUB_TOKEN while this job reported success, and nothing on
# GitHub ever went red. Waiting costs wall-clock and buys a real verdict.
#
# What waiting still does NOT cover: Apple's own processing of the
# uploaded binary. That is asynchronous and reported only by email / App
# Store Connect — a successful upload is not an accepted build. ITMS-90683
# rejected v1.2.0 minutes after a fully green submit. See the final step.
# Skipped on a workflow_dispatch with dry_run=true (validation only).
- name: Build + auto-submit to TestFlight
if: ${{ !inputs.dry_run }}
Expand All @@ -127,5 +137,15 @@ jobs:
--platform ios \
--profile production \
--auto-submit \
--non-interactive \
--no-wait
--non-interactive

# A green job above means the binary built and uploaded. It does NOT mean
# the build is in TestFlight — Apple can still reject it during
# processing, and only tells you by email.
- name: Report what green does and does not mean
if: ${{ !inputs.dry_run && success() }}
run: |
echo "Build succeeded and the binary was uploaded to App Store Connect."
echo "This is NOT yet a TestFlight build: Apple processing can still reject it"
echo "(e.g. ITMS-90683), and reports only by email / App Store Connect."
echo "Verify: https://appstoreconnect.apple.com/apps/6777579207/testflight/ios"
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ Honest examination for learning and growth (not self-judgment):
## ✨ **Core Features**

### **Philosophical Accuracy**
- **Classical Sources**: All content grounded in Marcus Aurelius (*Meditations*), Epictetus (*Enchiridion*, *Discourses*), Seneca (*Letters from a Stoic*, *On Anger*)
- **Classical Sources**: All content grounded in Marcus Aurelius (*Meditations*), Epictetus (*Enchiridion*), Seneca (*Moral Letters to Lucilius*, *On Anger*)
- **Educational Approach**: Learn authentic Stoic Mindfulness V2 framework, not pop-Stoicism
- **Virtue Ethics**: Track growth in Wisdom, Justice, Courage, Temperance
- **Balanced Practice**: Self-compassion integrated to prevent harsh "stoicism" (emotional suppression)
Expand Down Expand Up @@ -410,7 +410,7 @@ While Being is primarily an educational tool for Stoic Mindfulness philosophy an
**Classical Stoic Texts** — public-domain translations, the only renderings shipped in the app:
- Marcus Aurelius - *Meditations*, trans. George Long (1862; text as digitized in Project Gutenberg ebook #15877, *Thoughts of Marcus Aurelius Antoninus*)
- Epictetus - *Enchiridion*, trans. Elizabeth Carter (1758)
- Seneca - *Letters from a Stoic* (*Epistulae Morales*), trans. Richard Mott Gummere (Loeb Classical Library, 1917–1925); *Of Anger*, *Of Peace of Mind* and the other dialogues, trans. Aubrey Stewart (*Minor Dialogues*, 1889); *On Benefits*, trans. Aubrey Stewart (1887)
- Seneca - *Moral Letters to Lucilius* (*Ad Lucilium Epistulae Morales*), trans. Richard Mott Gummere (Loeb Classical Library, 1917–1925; public domain by pre-1929 US publication; text as digitized on Wikisource from Internet Archive scans `adluciliumepistu01seneuoft` and `adluciliumepistu03seneuoft`); *Of Anger*, *Of Peace of Mind* and the other dialogues, trans. Aubrey Stewart (*Minor Dialogues*, 1889); *On Benefits*, trans. Aubrey Stewart (1887)

Gregory Hays (2002), Robin Hard (2011/2014) and Nicholas White (1983) are excellent modern translations and worth reading, but they are **in copyright** and no rendering from them appears anywhere in this app. That is enforced mechanically by `app/src/features/learn/__tests__/moduleClassicalQuotes.test.ts` and its sibling guards.

Expand Down
Loading
Loading