Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
806 commits
Select commit Hold shift + click to select a range
ee906cf
test(project): exercise migrate-on-load owner
seonghobae Sep 18, 2026
e610db4
fix(project): route load through migration service
seonghobae Sep 18, 2026
28daa66
style(project): format migrate-on-load service
seonghobae Sep 18, 2026
9a4554e
test(project): track migrate-on-load route
seonghobae Sep 18, 2026
bd318f9
test(project): preserve migration data permissions
seonghobae Sep 18, 2026
e79aa8a
docs(project): trace migrate-on-load publication
seonghobae Sep 18, 2026
4008dab
test(project): require native persistence CI coverage
seonghobae Sep 18, 2026
cc80424
ci(project): track persistence application owners
seonghobae Sep 18, 2026
e0566c3
ci(project): add macOS persistence evidence lane
seonghobae Sep 18, 2026
ddfad47
docs(project): trace native persistence CI gate
seonghobae Sep 18, 2026
1726e9b
test(project): bind native CI traceability refresh
seonghobae Sep 18, 2026
488b89d
ci(project): refresh Windows lane on traceability changes
seonghobae Sep 18, 2026
ad9087a
ci(project): refresh macOS lane on traceability changes
seonghobae Sep 18, 2026
60e0623
docs(project): bind exact-head native CI evidence
seonghobae Sep 18, 2026
488b2de
test(project): require Windows workflow successor identity
seonghobae Sep 18, 2026
c6045d8
ci(project): register Windows persistence successor
seonghobae Sep 18, 2026
61f7d56
ci(project): retire stale Windows workflow identity
seonghobae Sep 18, 2026
05ed6c1
docs(project): record Windows native workflow successor
seonghobae Sep 18, 2026
62ac8f8
test(project): flush staged source with Windows write authority
seonghobae Sep 18, 2026
fddd996
docs(project): trace Windows durability fixture RED and repair
seonghobae Sep 18, 2026
927c4aa
test(project): require content-bound published recovery
seonghobae Sep 18, 2026
4452580
fix(project): bind recovery journal to migration receipt
seonghobae Sep 18, 2026
bc892e3
test(project): exercise versioned recovery journal
seonghobae Sep 18, 2026
aedf857
docs(project): trace receipt-bound crash recovery
seonghobae Sep 18, 2026
b1edaf3
test(project): mirror native published recovery layout
seonghobae Sep 18, 2026
d8edb4a
test(project): adapt rollback fixture to journal v2
seonghobae Sep 18, 2026
0f8f335
docs(project): trace recovery-journal hosted repair
seonghobae Sep 18, 2026
5c1a26e
refactor(project): remove obsolete v1 serializer ownership
seonghobae Sep 18, 2026
6156d35
fix(project): keep legacy v1 parser warning-clean
seonghobae Sep 18, 2026
7f55bfc
docs(project): trace compatibility warning root fix
seonghobae Sep 18, 2026
69d54d4
test(persistence): compile native owner once
seonghobae Sep 18, 2026
582ec08
ci(persistence): track single-compile case inputs
seonghobae Sep 18, 2026
92136ba
test(persistence): repair shared harness import
seonghobae Sep 18, 2026
2b0d5d9
test(persistence): exercise production source publisher
seonghobae Sep 18, 2026
1622a3a
docs(persistence): trace single-compile native harness
seonghobae Sep 18, 2026
1ec378f
test(persistence): scope unix-only imports
seonghobae Sep 18, 2026
966cb6e
test(persistence): scope unix permission owner
seonghobae Sep 18, 2026
522ef90
test(persistence): scope macOS-only alias case
seonghobae Sep 18, 2026
b947e55
fix(persistence): scope platform and test-only readers
seonghobae Sep 18, 2026
c38b7e6
docs(persistence): trace final warning owners
seonghobae Sep 18, 2026
29e52d8
test(persistence): require native warning gate
seonghobae Sep 18, 2026
a2d8c74
fix(persistence): add core warning gate feature
seonghobae Sep 18, 2026
e0ead7d
fix(persistence): deny core warnings in native gate
seonghobae Sep 18, 2026
61aca5c
fix(persistence): wire native warning gate feature
seonghobae Sep 18, 2026
a3861a0
fix(persistence): deny warnings in native harness
seonghobae Sep 18, 2026
9b2b854
test(persistence): scope warning gate to owner harness
seonghobae Sep 18, 2026
14e54bc
test(persistence): track warning gate owner root
seonghobae Sep 18, 2026
2f1d4c7
ci(persistence): enforce owned warnings on Windows
seonghobae Sep 18, 2026
bb832ae
ci(persistence): enforce owned warnings on macOS
seonghobae Sep 18, 2026
15d0305
docs(persistence): trace compile-time warning gate
seonghobae Sep 18, 2026
269db5b
fix(persistence): restore source readmission exports
seonghobae Sep 19, 2026
5de22a6
docs(persistence): trace warning-gate export regression
seonghobae Sep 19, 2026
eebe2ee
test(project): require durable Windows replacement rollback
seonghobae Sep 19, 2026
5455fc8
fix(project): flush Windows replacement metadata before success
seonghobae Sep 19, 2026
336836a
test(project): assert Windows rollback artifacts are retired
seonghobae Sep 19, 2026
40847ed
docs(project): trace Windows replacement durability boundary
seonghobae Sep 19, 2026
b4214ad
fix(project): preserve raced target during Windows rollback
seonghobae Sep 19, 2026
a00654a
docs(project): trace raced-target rollback authority
seonghobae Sep 19, 2026
4b617a5
test(project): reject recovery journal parent traversal
seonghobae Sep 19, 2026
49bc47c
test(project): activate hostile recovery-name regression
seonghobae Sep 19, 2026
e364474
fix(project): confine recovery journal names to one component
seonghobae Sep 19, 2026
2f8454c
docs(project): trace recovery journal path boundary
seonghobae Sep 19, 2026
898b3c2
docs(project): anchor journal confinement to CWE-22
seonghobae Sep 19, 2026
4cda80b
test(project): expose successful-cleanup boundary for race regression
seonghobae Sep 19, 2026
d3daecf
test(project): RED preserve raced displaced path on successful cleanup
seonghobae Sep 19, 2026
83a40b2
fix(project): bind successful cleanup to durable journal identities
seonghobae Sep 19, 2026
1d53792
test(project): cover target swap before successful cleanup
seonghobae Sep 19, 2026
48fbd91
docs(traceability): record successful-cleanup authority repair
seonghobae Sep 19, 2026
18b381b
test(project): prove private modes under permissive umask
seonghobae Sep 19, 2026
cac722e
fix(project): keep Unix persistence artifacts owner-private
seonghobae Sep 19, 2026
3cde95f
docs(project): trace private persistence artifacts
seonghobae Sep 19, 2026
23fdaec
test(project): preserve deliberate Unix sharing mode
seonghobae Sep 19, 2026
85c0879
test(project): reject stale hard-link stage after sync failure
seonghobae Sep 19, 2026
c0ec7d2
fix(project): retire first-save hard-link alias before durability check
seonghobae Sep 19, 2026
06ff23a
test(project): prove first-save alias cleanup ordering
seonghobae Sep 19, 2026
bbb11de
test(project): reject linked project-root ancestors
seonghobae Sep 19, 2026
f9e9fe0
fix(project): bind existing roots to safe ancestor chain
seonghobae Sep 19, 2026
0a4d7bf
docs(project): record root-chain authority boundary
seonghobae Sep 19, 2026
bdd3cee
test(project): preserve real project-root authority
seonghobae Sep 19, 2026
9e998d8
test(project): reject parent-swap false success
seonghobae Sep 19, 2026
88c68a3
test(project): register parent-swap authority regression
seonghobae Sep 19, 2026
ac5e5c5
test(project): keep parent-swap regression warning-clean on Windows
seonghobae Sep 19, 2026
f99eee8
fix(project): bind first-save publication to staged identity
seonghobae Sep 19, 2026
8a7d3e9
fix(project): keep persistence engine path stable under integration i…
seonghobae Sep 19, 2026
66515cd
test(project): drive recovery cases through public owner state machine
seonghobae Sep 19, 2026
c6aa06b
test(project): build hostile journal fixtures through durable public …
seonghobae Sep 19, 2026
951ef26
test(project): exercise rollback identity through recovery entrypoint
seonghobae Sep 19, 2026
c8eaa89
test(project): preserve foreign stage on first-save parent swap
seonghobae Sep 19, 2026
7e87a41
fix(project): keep first-save test seams out of production
seonghobae Sep 19, 2026
e3b5040
test(project): prove private journal through production replacement
seonghobae Sep 19, 2026
c16f69a
ci(project): track persistence engine owner on macOS
seonghobae Sep 19, 2026
1bd9637
ci(project): track persistence engine owner on Windows
seonghobae Sep 19, 2026
cbb62d3
test(project): gate native CI on persistence engine changes
seonghobae Sep 19, 2026
e112ba4
fix(project): isolate superseded first-save writer to tests
seonghobae Sep 19, 2026
42d4664
fix(project): use one first-save publication seam
seonghobae Sep 19, 2026
51310c8
ci(project): deny owned Tauri warnings in persistence gate
seonghobae Sep 19, 2026
2b2326c
fix(project): restore complete Tauri entrypoint
seonghobae Sep 19, 2026
90aa59b
ci(project): test exact persistence source head
seonghobae Sep 19, 2026
fab6d10
test(project): preserve ambiguous rollback evidence
seonghobae Sep 19, 2026
33aa68d
fix(project): fail closed on ambiguous rollback recovery
seonghobae Sep 19, 2026
c573b2b
revert: keep proven rollback cleanup semantics
seonghobae Sep 19, 2026
bd88318
revert: avoid unsupported rollback guard
seonghobae Sep 19, 2026
8ba3d99
test(project): add out-of-process first-save interruption
seonghobae Sep 19, 2026
ca7e682
test(project): include process-kill recovery case
seonghobae Sep 19, 2026
834e561
test(project): reject linked roots during provisioning
seonghobae Sep 19, 2026
6e235a4
ci(project): cover project-root authority regression
seonghobae Sep 19, 2026
93da927
ci(project): cover project-root authority regression on Windows
seonghobae Sep 19, 2026
f566951
fix(project): provision roots without following links
seonghobae Sep 19, 2026
066a274
fix(project): bind new roots to safe provisioning
seonghobae Sep 19, 2026
79eee50
test(project): cover ordinary safe root provisioning
seonghobae Sep 19, 2026
7949820
docs(project): trace project-root provisioning authority
seonghobae Sep 19, 2026
e1f06cd
docs(project): add provisioning Security Notes
seonghobae Sep 19, 2026
f8ba050
test(project): consolidate root authority into warning-gated harness
seonghobae Sep 19, 2026
f45df9e
test(project): reproduce linked cache temp scores authority
seonghobae Sep 19, 2026
acd29ba
fix(project): bind cache temp scores to owned directory authority
seonghobae Sep 19, 2026
4b17802
fix(project): apply owned authority to cache temp scores
seonghobae Sep 19, 2026
c6d8c5e
fix(project): restore queued progress contract
seonghobae Sep 19, 2026
d913537
docs(project): extend workspace authority traceability
seonghobae Sep 19, 2026
fcfb00a
test(project): require private app-owned directory modes
seonghobae Sep 19, 2026
73b2fbb
fix(project): create Unix app-owned directories privately
seonghobae Sep 19, 2026
5691785
docs(project): trace private app-owned directory creation
seonghobae Sep 19, 2026
9639876
test(audio): require private local source staging
seonghobae Sep 19, 2026
35548ea
test(audio): bind materializer to private stage owner
seonghobae Sep 19, 2026
d2ede94
fix(audio): create local source stages owner-private
seonghobae Sep 19, 2026
a984dd5
fix(audio): use private source staging boundary
seonghobae Sep 19, 2026
cf73bb2
docs(audio): trace private local source staging
seonghobae Sep 19, 2026
d75c3c8
fix(audio): keep private stage helper warning-clean
seonghobae Sep 19, 2026
33e2aea
test(project): require durable mutation before renderer update
seonghobae Sep 19, 2026
05f003b
feat(project): add workspace persistence mode
seonghobae Sep 19, 2026
10e06a0
feat(project): persist accepted mutations to workspace snapshot
seonghobae Sep 19, 2026
8a0ede2
fix(project): acknowledge mutations only after durable snapshot
seonghobae Sep 19, 2026
2c083b2
test(project): bind RED to workspace save contract
seonghobae Sep 19, 2026
6d4682f
test(project): prove workspace persistence bridge selector
seonghobae Sep 19, 2026
633b506
test(project): lock native workspace snapshot wiring
seonghobae Sep 19, 2026
ced1992
docs(project): trace durable mutation acknowledgement
seonghobae Sep 19, 2026
5110271
test(project): retain accepted state on workspace save failure
seonghobae Sep 19, 2026
b9cc1b3
docs(project): tighten workspace mutation evidence
seonghobae Sep 19, 2026
af39993
test(project): require mutation-boundary workflow coverage
seonghobae Sep 19, 2026
b6bdf5f
fix(project): trigger macOS persistence on mutation boundary
seonghobae Sep 19, 2026
b8b2abc
fix(project): trigger Windows persistence on mutation boundary
seonghobae Sep 19, 2026
49a7b16
test(project): reject overlapping stale renderer mutations
seonghobae Sep 19, 2026
70aa692
fix(project): serialize chord edits across durable mutation acceptance
seonghobae Sep 19, 2026
dfbdcec
test(project): track chord mutation serialization in persistence lanes
seonghobae Sep 19, 2026
f738edc
ci(project): track SectionRoadmap persistence contract on macOS
seonghobae Sep 19, 2026
948a037
ci(project): track SectionRoadmap persistence contract on Windows
seonghobae Sep 19, 2026
9523128
docs(project): trace chord mutation serialization boundary
seonghobae Sep 19, 2026
5f213eb
test(project): reject overlapping workspace snapshot
seonghobae Sep 20, 2026
b9ff142
fix(project): reject overlapping workspace snapshots
seonghobae Sep 20, 2026
389004f
test(project): cover workspace mutation admission edges
seonghobae Sep 20, 2026
e235f8c
docs(project): trace workspace mutation admission
seonghobae Sep 20, 2026
c9d85a1
ci(project): track workspace mutation admission on macOS
seonghobae Sep 20, 2026
a600e21
ci(project): track workspace mutation admission on Windows
seonghobae Sep 20, 2026
9bc6b6e
test(project): require mutation admission evidence paths
seonghobae Sep 20, 2026
33f62fa
test(project): reproduce cross-process write overlap
seonghobae Sep 20, 2026
d7ff75d
test(project): wire native cross-process admission regression
seonghobae Sep 20, 2026
b9381c4
fix(project): admit one native project writer at a time
seonghobae Sep 20, 2026
5c5c022
test(project): reap writer on overlap assertion failure
seonghobae Sep 20, 2026
c8ff209
docs(project): trace native overlapping-writer admission
seonghobae Sep 20, 2026
27ed4b3
fix(project): preserve staging rejection contract under admission
seonghobae Sep 20, 2026
cfcaf8a
test(project): require native workspace revision CAS
seonghobae Sep 20, 2026
bcdd59c
fix(project): bind workspace saves to durable content revision
seonghobae Sep 20, 2026
bd1e858
fix(project): carry durable workspace revision receipts
seonghobae Sep 20, 2026
d025976
test(project): verify workspace revision receipt forwarding
seonghobae Sep 20, 2026
c17230a
fix(project): enforce expected revision at workspace save boundary
seonghobae Sep 20, 2026
bfe49f5
docs(project): trace workspace revision CAS contract
seonghobae Sep 20, 2026
b0962e3
test(project): keep single-flight fixtures on revision receipt contract
seonghobae Sep 20, 2026
3518976
test(project): move revision CAS into native warning-gated harness
seonghobae Sep 20, 2026
6a27c5b
test(project): register workspace revision case in native harness
seonghobae Sep 20, 2026
baee091
test(project): retire duplicate revision integration crate
seonghobae Sep 20, 2026
6de45fe
docs(project): record revision CAS warning-gate RCA
seonghobae Sep 20, 2026
1109799
test(project): require safe restart revision binding
seonghobae Sep 20, 2026
965d8cb
fix(project): bind restart revision by exact workspace content
seonghobae Sep 20, 2026
295ab97
test(project): require restart workspace revision bind before reopen
seonghobae Sep 20, 2026
c82c560
fix(project): bind reopened workspace revision before renderer accept…
seonghobae Sep 20, 2026
10a5076
ci(project): track reopen bridge contract on macOS owner lane
seonghobae Sep 20, 2026
95726d5
ci(project): track reopen bridge contract on Windows owner lane
seonghobae Sep 20, 2026
186e218
test(ci): require reopen bridge in persistence owner triggers
seonghobae Sep 20, 2026
7458298
docs(project): trace restart revision binding and hosted RED
seonghobae Sep 20, 2026
456400b
test(project): keep reopen binding inside content admission
seonghobae Sep 20, 2026
c2a3d46
fix(project): keep reopen binding behind workspace content bounds
seonghobae Sep 20, 2026
a6d3990
docs(project): bound restart revision binding to admitted content
seonghobae Sep 20, 2026
afd03ea
test(project): preserve active revision across failed reopen
seonghobae Sep 20, 2026
b0beeb2
fix(project): retain active revision after failed reopen
seonghobae Sep 20, 2026
8250dcf
docs(project): trace failed reopen revision preservation
seonghobae Sep 20, 2026
b19f590
test(project): cover buyer-visible revision conflicts
seonghobae Sep 20, 2026
cbf21d6
fix(project): keep accepted rehearsal visible on revision conflict
seonghobae Sep 20, 2026
76bfba5
test(project): keep revision conflict visible across rehearsal views
seonghobae Sep 20, 2026
44b0dd7
fix(project): surface revision conflicts across rehearsal views
seonghobae Sep 20, 2026
fdbbe93
docs(project): trace revision conflict interaction
seonghobae Sep 20, 2026
76938f3
test(project): cover reopened score publication identity
seonghobae Sep 20, 2026
8412c96
test(project): use admitted source identity fixture
seonghobae Sep 20, 2026
0b43dad
fix(project): preserve score identity after reopen
seonghobae Sep 20, 2026
3e30aaf
ci(project): track score identity regression on macOS
seonghobae Sep 20, 2026
670a577
ci(project): track score identity regression on Windows
seonghobae Sep 20, 2026
e323263
test(project): require score identity trigger coverage
seonghobae Sep 20, 2026
5c9f30c
docs(project): trace reopened score publication identity
seonghobae Sep 20, 2026
1cbdc42
ci(project): track score identity traceability on macOS
seonghobae Sep 20, 2026
4e579a0
ci(project): track score identity traceability on Windows
seonghobae Sep 20, 2026
aee578a
test(project): require score identity traceability coverage
seonghobae Sep 20, 2026
3484d51
test(project): define score attachment recovery reconciliation
seonghobae Sep 20, 2026
67febe0
fix(project): classify score attachment recovery candidates
seonghobae Sep 20, 2026
95aee6d
fix(project): export score recovery reconciliation contract
seonghobae Sep 20, 2026
85d7440
docs(project): trace score recovery reconciliation boundary
seonghobae Sep 20, 2026
51901c8
ci(project): track score recovery reconciliation inputs on macOS
seonghobae Sep 20, 2026
b8f3a37
ci(project): track score recovery reconciliation inputs on Windows
seonghobae Sep 20, 2026
1114d2e
test(ci): own score recovery reconciliation inputs
seonghobae Sep 20, 2026
e8f8da6
fix(test): inspect reconciliation errors without Deref
seonghobae Sep 20, 2026
75e5efe
fix(project): keep reconciliation error regression compilable
seonghobae Sep 20, 2026
5f74aeb
docs(project): record score recovery test-harness RCA
seonghobae Sep 20, 2026
25a3e6c
test(project): require explicit score recovery disposition
seonghobae Sep 20, 2026
93a2e9c
fix(project): authorize only explicit score recovery cleanup
seonghobae Sep 20, 2026
9147521
fix(project): export score recovery disposition authority
seonghobae Sep 20, 2026
59f4c15
refactor(project): simplify recovery invariant checks
seonghobae Sep 20, 2026
0392192
docs(project): trace explicit score recovery disposition
seonghobae Sep 20, 2026
6611511
test(ci): require core Project Persistence contracts
seonghobae Sep 20, 2026
7ef92d8
fix(ci): execute core Project Persistence contracts on macOS
seonghobae Sep 20, 2026
24bc235
fix(ci): execute core Project Persistence contracts on Windows
seonghobae Sep 20, 2026
c4efdda
docs(project): trace core recovery test ownership
seonghobae Sep 20, 2026
217642d
fix(test): compare shared SHA-256 digest after successful read
seonghobae Sep 20, 2026
b818b02
test(ci): track Project Persistence content identity kernel
seonghobae Sep 20, 2026
313c324
fix(ci): track Project Persistence content identity kernel on macOS
seonghobae Sep 20, 2026
b55373a
fix(ci): track Project Persistence content identity kernel on Windows
seonghobae Sep 20, 2026
4f79c0a
docs(project): trace core SHA test RCA
seonghobae Sep 20, 2026
28a287a
fix(ci): scope core owner tests to Project Persistence contracts
seonghobae Sep 20, 2026
ac9defa
fix(ci): isolate macOS Project Persistence core evidence
seonghobae Sep 20, 2026
d72c253
fix(ci): isolate Windows Project Persistence core evidence
seonghobae Sep 20, 2026
b8cbc3e
docs(project): trace owner-lane isolation RCA
seonghobae Sep 20, 2026
b0c7235
fix(ci): quote filtered Project Persistence test commands
seonghobae Sep 20, 2026
f25b37d
fix(ci): quote filtered Project Persistence test commands on Windows
seonghobae Sep 20, 2026
4ebb60f
test(ci): prove Project Persistence owner-target completeness
seonghobae Sep 20, 2026
757881a
fix(ci): trigger macOS owner lane for migration contracts
seonghobae Sep 20, 2026
4984b5d
fix(ci): trigger Windows owner lane for migration contracts
seonghobae Sep 20, 2026
e1ff85e
test(project): require truthful score recovery presentation metadata
seonghobae Sep 20, 2026
1846904
fix(project): make score recovery presentation truthful
seonghobae Sep 20, 2026
6a77bec
fix(project): export recovered score metadata contract
seonghobae Sep 20, 2026
95ea6f7
docs(project): trace truthful score recovery presentation
seonghobae Sep 20, 2026
f22b3d2
test(project): reject stale score recovery decisions
seonghobae Sep 20, 2026
cf89afc
fix(project): revalidate score recovery intent before mutation
seonghobae Sep 20, 2026
707431a
fix(project): export recovery decision revalidation
seonghobae Sep 20, 2026
5873c02
docs(project): trace stale recovery decision boundary
seonghobae Sep 20, 2026
3aaf84d
test(project): bind score recovery intent to project identity
seonghobae Sep 20, 2026
f0fc96b
fix(project): scope score recovery intent to project aggregate
seonghobae Sep 20, 2026
85c48a0
fix(project): expose only project-scoped recovery authority
seonghobae Sep 20, 2026
d87e6fe
test(ci): require project-scoped recovery owner input
seonghobae Sep 20, 2026
f63668f
ci(project): track project-scoped score recovery source on macOS
seonghobae Sep 20, 2026
dfc8bc8
ci(project): track project-scoped score recovery source on Windows
seonghobae Sep 20, 2026
c0b0b28
docs(project): trace project-scoped score recovery authority
seonghobae Sep 20, 2026
b909ac8
test(ci): track project-scoped recovery traceability
seonghobae Sep 20, 2026
a307498
ci(project): track recovery project-scope trace on macOS
seonghobae Sep 20, 2026
17ee600
ci(project): track recovery project-scope trace on Windows
seonghobae Sep 20, 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
125 changes: 125 additions & 0 deletions .github/workflows/project-persistence-macos.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
name: project-persistence-macos

on:
pull_request:
branches:
- develop
- main
paths:
- "apps/desktop/core/Cargo.toml"
- "apps/desktop/core/src/root.rs"
- "apps/desktop/core/src/lib.rs"
- "apps/desktop/core/src/crate_root.rs"
- "apps/desktop/core/src/content_sha256.rs"
- "apps/desktop/core/src/project_format.rs"
- "apps/desktop/core/src/project_scoped_score_recovery.rs"
- "apps/desktop/core/src/score_attachment_recovery.rs"
- "apps/desktop/core/tests/content_sha256_shared_kernel.rs"
- "apps/desktop/core/tests/project_persistence*.rs"
- "apps/desktop/core/tests/project_format*.rs"
- "apps/desktop/core/tests/project_migration*.rs"
- "apps/desktop/core/testdata/project-*.json"
- "apps/desktop/src/App.tsx"
- "apps/desktop/src/App.project-save-source-authority.test.tsx"
- "apps/desktop/src/App.score-project-identity.test.tsx"
- "apps/desktop/src/features/workspace/SectionRoadmap.tsx"
- "apps/desktop/src/lib/analysis.ts"
- "apps/desktop/src/lib/analysis.workspace-single-flight.test.ts"
- "apps/desktop/src/lib/projectDocumentBridge.test.ts"
- "apps/desktop/src/lib/projectDocumentSaveAuthority.test.ts"
- "apps/desktop/src-tauri/Cargo.toml"
- "apps/desktop/src-tauri/Cargo.lock"
- "apps/desktop/src-tauri/src/main.rs"
- "apps/desktop/src-tauri/src/project_load.rs"
- "apps/desktop/src-tauri/src/project_persistence.rs"
- "apps/desktop/src-tauri/src/project_persistence_engine.rs"
- "apps/desktop/src-tauri/src/project_root.rs"
- "apps/desktop/src-tauri/tests/project_persistence*.rs"
- "apps/desktop/src-tauri/tests/project_persistence*.case"
- "apps/desktop/src-tauri/tests/project_root_existing_authority.rs"
- "docs/traceability/project-persistence-native-ci.md"
- "docs/traceability/project-persistence-score-publication-identity.md"
- "docs/traceability/project-persistence-score-recovery-project-scope.md"
- "docs/traceability/project-persistence-score-recovery-reconciliation.md"
- "docs/traceability/project-persistence-shared-song-contract.md"
- "docs/traceability/project-persistence-workspace-mutation-admission.md"
- ".github/workflows/project-persistence-macos.yml"
- "services/analysis-engine/tests/test_project_persistence_workflow_policy.py"
push:
branches:
- develop
- main
paths:
- "apps/desktop/core/Cargo.toml"
- "apps/desktop/core/src/root.rs"
- "apps/desktop/core/src/lib.rs"
- "apps/desktop/core/src/crate_root.rs"
- "apps/desktop/core/src/content_sha256.rs"
- "apps/desktop/core/src/project_format.rs"
- "apps/desktop/core/src/project_scoped_score_recovery.rs"
- "apps/desktop/core/src/score_attachment_recovery.rs"
- "apps/desktop/core/tests/content_sha256_shared_kernel.rs"
- "apps/desktop/core/tests/project_persistence*.rs"
- "apps/desktop/core/tests/project_format*.rs"
- "apps/desktop/core/tests/project_migration*.rs"
- "apps/desktop/core/testdata/project-*.json"
- "apps/desktop/src/App.tsx"
- "apps/desktop/src/App.project-save-source-authority.test.tsx"
- "apps/desktop/src/App.score-project-identity.test.tsx"
- "apps/desktop/src/features/workspace/SectionRoadmap.tsx"
- "apps/desktop/src/lib/analysis.ts"
- "apps/desktop/src/lib/analysis.workspace-single-flight.test.ts"
- "apps/desktop/src/lib/projectDocumentBridge.test.ts"
- "apps/desktop/src/lib/projectDocumentSaveAuthority.test.ts"
- "apps/desktop/src-tauri/Cargo.toml"
- "apps/desktop/src-tauri/Cargo.lock"
- "apps/desktop/src-tauri/src/main.rs"
- "apps/desktop/src-tauri/src/project_load.rs"
- "apps/desktop/src-tauri/src/project_persistence.rs"
- "apps/desktop/src-tauri/src/project_persistence_engine.rs"
- "apps/desktop/src-tauri/src/project_root.rs"
- "apps/desktop/src-tauri/tests/project_persistence*.rs"
- "apps/desktop/src-tauri/tests/project_persistence*.case"
- "apps/desktop/src-tauri/tests/project_root_existing_authority.rs"
- "docs/traceability/project-persistence-native-ci.md"
- "docs/traceability/project-persistence-score-publication-identity.md"
- "docs/traceability/project-persistence-score-recovery-project-scope.md"
- "docs/traceability/project-persistence-score-recovery-reconciliation.md"
- "docs/traceability/project-persistence-shared-song-contract.md"
- "docs/traceability/project-persistence-workspace-mutation-admission.md"
- ".github/workflows/project-persistence-macos.yml"
- "services/analysis-engine/tests/test_project_persistence_workflow_policy.py"

permissions:
contents: read

env:
GIT_CONFIG_COUNT: "1"
GIT_CONFIG_KEY_0: init.defaultBranch
GIT_CONFIG_VALUE_0: develop

jobs:
macos-recovery-cleanup:
name: test / project-persistence / macos
runs-on: macos-15
permissions:
contents: read
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- name: Install Rust 1.97.1
run: rustup toolchain install 1.97.1 --profile minimal
- name: Run Project Persistence recovery module tests
run: 'cargo +1.97.1 test --manifest-path apps/desktop/core/Cargo.toml --features persistence_warning_gate --lib score_attachment_recovery::tests::'
- name: Run Project Persistence content-identity module tests
run: 'cargo +1.97.1 test --manifest-path apps/desktop/core/Cargo.toml --features persistence_warning_gate --lib content_sha256::tests::'
- name: Run Project Persistence core integration contracts
run: 'cargo +1.97.1 test --manifest-path apps/desktop/core/Cargo.toml --features persistence_warning_gate --test content_sha256_shared_kernel --test project_format_resource_admission_handoff --test project_format_v2_fixture --test project_format_v2_playback_preference --test project_format_v3_renderer_source_authority --test project_format_v3_source_reference --test project_migration_receipt_input_binding --test project_persistence_contract --test project_persistence_score_recovery'
- name: Prepare compile-only frontendDist fixture
run: |
mkdir -p apps/desktop/dist
printf '%s' '<!doctype html><title>BandScope test fixture</title>' > apps/desktop/dist/index.html
- name: Run macOS recovery-cleanup regression
run: cargo +1.97.1 test --manifest-path apps/desktop/src-tauri/Cargo.toml --no-default-features --features persistence_warning_gate --tests
126 changes: 126 additions & 0 deletions .github/workflows/project-persistence-windows-native.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
name: project-persistence-windows-native

on:
pull_request:
branches:
- develop
- main
paths:
- "apps/desktop/core/Cargo.toml"
- "apps/desktop/core/src/root.rs"
- "apps/desktop/core/src/lib.rs"
- "apps/desktop/core/src/crate_root.rs"
- "apps/desktop/core/src/content_sha256.rs"
- "apps/desktop/core/src/project_format.rs"
- "apps/desktop/core/src/project_scoped_score_recovery.rs"
- "apps/desktop/core/src/score_attachment_recovery.rs"
- "apps/desktop/core/tests/content_sha256_shared_kernel.rs"
- "apps/desktop/core/tests/project_persistence*.rs"
- "apps/desktop/core/tests/project_format*.rs"
- "apps/desktop/core/tests/project_migration*.rs"
- "apps/desktop/core/testdata/project-*.json"
- "apps/desktop/src/App.tsx"
- "apps/desktop/src/App.project-save-source-authority.test.tsx"
- "apps/desktop/src/App.score-project-identity.test.tsx"
- "apps/desktop/src/features/workspace/SectionRoadmap.tsx"
- "apps/desktop/src/lib/analysis.ts"
- "apps/desktop/src/lib/analysis.workspace-single-flight.test.ts"
- "apps/desktop/src/lib/projectDocumentBridge.test.ts"
- "apps/desktop/src/lib/projectDocumentSaveAuthority.test.ts"
- "apps/desktop/src-tauri/Cargo.toml"
- "apps/desktop/src-tauri/Cargo.lock"
- "apps/desktop/src-tauri/src/main.rs"
- "apps/desktop/src-tauri/src/project_load.rs"
- "apps/desktop/src-tauri/src/project_persistence.rs"
- "apps/desktop/src-tauri/src/project_persistence_engine.rs"
- "apps/desktop/src-tauri/src/project_root.rs"
- "apps/desktop/src-tauri/tests/project_persistence*.rs"
- "apps/desktop/src-tauri/tests/project_persistence*.case"
- "apps/desktop/src-tauri/tests/project_root_existing_authority.rs"
- "docs/traceability/project-persistence-native-ci.md"
- "docs/traceability/project-persistence-score-publication-identity.md"
- "docs/traceability/project-persistence-score-recovery-project-scope.md"
- "docs/traceability/project-persistence-score-recovery-reconciliation.md"
- "docs/traceability/project-persistence-shared-song-contract.md"
- "docs/traceability/project-persistence-workspace-mutation-admission.md"
- ".github/workflows/project-persistence-windows-native.yml"
- "services/analysis-engine/tests/test_project_persistence_workflow_policy.py"
push:
branches:
- develop
- main
paths:
- "apps/desktop/core/Cargo.toml"
- "apps/desktop/core/src/root.rs"
- "apps/desktop/core/src/lib.rs"
- "apps/desktop/core/src/crate_root.rs"
- "apps/desktop/core/src/content_sha256.rs"
- "apps/desktop/core/src/project_format.rs"
- "apps/desktop/core/src/project_scoped_score_recovery.rs"
- "apps/desktop/core/src/score_attachment_recovery.rs"
- "apps/desktop/core/tests/content_sha256_shared_kernel.rs"
- "apps/desktop/core/tests/project_persistence*.rs"
- "apps/desktop/core/tests/project_format*.rs"
- "apps/desktop/core/tests/project_migration*.rs"
- "apps/desktop/core/testdata/project-*.json"
- "apps/desktop/src/App.tsx"
- "apps/desktop/src/App.project-save-source-authority.test.tsx"
- "apps/desktop/src/App.score-project-identity.test.tsx"
- "apps/desktop/src/features/workspace/SectionRoadmap.tsx"
- "apps/desktop/src/lib/analysis.ts"
- "apps/desktop/src/lib/analysis.workspace-single-flight.test.ts"
- "apps/desktop/src/lib/projectDocumentBridge.test.ts"
- "apps/desktop/src/lib/projectDocumentSaveAuthority.test.ts"
- "apps/desktop/src-tauri/Cargo.toml"
- "apps/desktop/src-tauri/Cargo.lock"
- "apps/desktop/src-tauri/src/main.rs"
- "apps/desktop/src-tauri/src/project_load.rs"
- "apps/desktop/src-tauri/src/project_persistence.rs"
- "apps/desktop/src-tauri/src/project_persistence_engine.rs"
- "apps/desktop/src-tauri/src/project_root.rs"
- "apps/desktop/src-tauri/tests/project_persistence*.rs"
- "apps/desktop/src-tauri/tests/project_persistence*.case"
- "apps/desktop/src-tauri/tests/project_root_existing_authority.rs"
- "docs/traceability/project-persistence-native-ci.md"
- "docs/traceability/project-persistence-score-publication-identity.md"
- "docs/traceability/project-persistence-score-recovery-project-scope.md"
- "docs/traceability/project-persistence-score-recovery-reconciliation.md"
- "docs/traceability/project-persistence-shared-song-contract.md"
- "docs/traceability/project-persistence-workspace-mutation-admission.md"
- ".github/workflows/project-persistence-windows-native.yml"
- "services/analysis-engine/tests/test_project_persistence_workflow_policy.py"

permissions:
contents: read

env:
GIT_CONFIG_COUNT: "1"
GIT_CONFIG_KEY_0: init.defaultBranch
GIT_CONFIG_VALUE_0: develop

jobs:
windows-recovery-cleanup:
name: test / project-persistence / windows
runs-on: windows-2025
permissions:
contents: read
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- name: Install Rust 1.97.1
run: rustup toolchain install 1.97.1 --profile minimal
- name: Run Project Persistence recovery module tests
run: 'cargo +1.97.1 test --manifest-path apps/desktop/core/Cargo.toml --features persistence_warning_gate --lib score_attachment_recovery::tests::'
- name: Run Project Persistence content-identity module tests
run: 'cargo +1.97.1 test --manifest-path apps/desktop/core/Cargo.toml --features persistence_warning_gate --lib content_sha256::tests::'
- name: Run Project Persistence core integration contracts
run: 'cargo +1.97.1 test --manifest-path apps/desktop/core/Cargo.toml --features persistence_warning_gate --test content_sha256_shared_kernel --test project_format_resource_admission_handoff --test project_format_v2_fixture --test project_format_v2_playback_preference --test project_format_v3_renderer_source_authority --test project_format_v3_source_reference --test project_migration_receipt_input_binding --test project_persistence_contract --test project_persistence_score_recovery'
- name: Prepare compile-only frontendDist fixture
shell: pwsh
run: |
New-Item -ItemType Directory -Force apps/desktop/dist | Out-Null
Set-Content -Path apps/desktop/dist/index.html -Value '<!doctype html><title>BandScope test fixture</title>' -NoNewline
- name: Run Windows recovery-cleanup regression
run: cargo +1.97.1 test --manifest-path apps/desktop/src-tauri/Cargo.toml --no-default-features --features persistence_warning_gate --tests
5 changes: 3 additions & 2 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# ARCHITECTURE.md

Last updated: 2026-03-11
Last updated: 2026-09-06

## Brand source

Expand Down Expand Up @@ -111,8 +111,9 @@ Last updated: 2026-03-11
- Shared contracts live in `packages/shared-types` so the UI can evolve without importing Python internals.
- Shared contracts should ultimately model section, role, cue, confidence, and export artifacts explicitly enough that desktop UI and analysis outputs do not invent their own parallel schemas.
- The current shared-types baseline includes a rehearsal-domain fixture that exercises section, role, cue, confidence, provenance, and export-summary fields in the desktop shell before the full analysis pipeline lands.
- Current Project Persistence writes a strict `projectFormatVersion: 3` envelope around the validated rehearsal song, closed Active Player preference, and optional path-free app-owned audio `sourceReference`; legacy raw-song, v1, and v2 inputs remain readable through ordered migration. Resource Admission materializes the admitted local source as the fixed app-owned `source.<extension>` artifact, verifies publication byte identity, and retains a path-free native identity. Project Persistence injects that identity into Save and re-admits the exact size and SHA-256 on restart; production analysis revalidates the retained identity and decodes a verified private byte snapshot. Source/derived/decision/handoff expansion, autosave/recovery UX, and fresh Active Player audible authority remain follow-up work under #962/#961 rather than parallel stores.
- Local analysis orchestration uses typed Tauri IPC commands and a Python subprocess over stdin/stdout rather than a loopback HTTP listener.
- Local audio intake bootstraps a project by validating a user-selected file in Rust, creating app-owned temp/cache/project roots, and referencing the original source file rather than copying it in this phase.
- Local audio intake validates an OS-selected source in Rust, enforces the canonical resource policy, publishes a no-clobber app-owned `source.<extension>` copy under the minted project aggregate, verifies the published bytes, and exposes only bounded bootstrap/path-free identity evidence to downstream Project Persistence and analysis consumers.
- Those bootstrap roots should resolve from app-owned Tauri data/cache paths instead of the shared system temp namespace.
- Product and UX decisions should prefer rehearsal-first simplicity while still maintaining high analytical accuracy.
- Security decisions should prefer allowlisted narrow capabilities over generic convenience APIs.
Expand Down
Loading
Loading