Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1121 commits
Select commit Hold shift + click to select a range
2325ced
fix(profile)(#264): auto-merge monotonicity violations in flush-sched…
vrogojin May 25, 2026
8baf002
test(profile)(#264): update existing tests for auto-merge + tolerant …
vrogojin May 25, 2026
b540e62
test(profile)(#264): new unit tests for auto-merge primitives + flag …
vrogojin May 25, 2026
c47720b
fix(profile)(#264): steelman remediation — amplification, paging, obs…
vrogojin May 25, 2026
9e4eadf
fix(profile)(#264): steelman remediation round 2 — union revert + sym…
vrogojin May 25, 2026
5c22df8
fix(profile)(#264): steelman remediation round 3 — non-tautological t…
vrogojin May 25, 2026
38fb411
docs(profile)(#264): steelman R4 — accessor + receive-only docs, tigh…
vrogojin May 25, 2026
7a026ce
fix(profile)(#264): steelman R5 — defensive accessor try/catch + doc …
vrogojin May 25, 2026
c634853
test(profile)(#264): R6 — tighten defensive-throw test to non-tautolo…
vrogojin May 25, 2026
958ec95
feat(profile)(#266): HTTP-only IPFS mode for wallet/CLI clients
vrogojin May 25, 2026
8e997ca
fix(profile)(#266): memory-only blockstore + HTTP fallback to operato…
vrogojin May 25, 2026
9687d72
fix(profile)(#266): keep FsBlockstore in lightweight mode (user-appro…
vrogojin May 25, 2026
fdb6ec2
Merge pull request #267 from unicity-sphere/feat/http-only-ipfs-issue…
vrogojin May 25, 2026
9bab39d
fix(profile)(#268): detach consolidation from inline flush path
vrogojin May 25, 2026
3f916b7
fix(profile)(#268): allow archived + tombstoned tokens in monotonicit…
vrogojin May 25, 2026
8f45727
Merge pull request #270 from unicity-sphere/fix/issue-268-c2-isolation
vrogojin May 25, 2026
2461ea0
fix(payments)(#269): classify VerificationError(Recipient address mis…
vrogojin May 25, 2026
6102d59
Merge pull request #271 from unicity-sphere/fix/issue-269-permanent-m…
vrogojin May 26, 2026
435169d
Merge pull request #265 from unicity-sphere/feat/auto-merge-monotonic…
vrogojin May 26, 2026
e124990
fix(profile,transport)(#272): decouple per-flush HEAD-verify from at-…
vrogojin May 26, 2026
3c61d07
Merge pull request #273 from unicity-sphere/fix/issue-272-flush-verif…
vrogojin May 26, 2026
1f0c450
feat(sphere-sdk)(#274): toggleable verbose debug logging with timesta…
vrogojin May 26, 2026
93ce815
Merge pull request #276 from unicity-sphere/feat/issue-274-debug-logging
vrogojin May 26, 2026
bb9dedf
perf(transport,payments)(#275): persist Nostr event dedup + hoist V6/…
vrogojin May 26, 2026
5fa50cc
perf(transport,tests)(#275): mux dedup persistence + cover steelman t…
vrogojin May 26, 2026
fd68bfc
docs(transport)(#275): clarify Mux clearProcessedEvents is currently …
vrogojin May 26, 2026
87ee912
Merge pull request #277 from unicity-sphere/fix/issue-275-dedup-persi…
vrogojin May 26, 2026
e79bf26
fix(profile)(#278): bound repeated helia.blockstore.get with LRU + in…
vrogojin May 26, 2026
02773b5
fix(profile)(#278): harden shim — reject default toString() + skip lr…
vrogojin May 26, 2026
4caa9b6
Merge pull request #279 from unicity-sphere/fix/issue-278-orbitdb-fd-…
vrogojin May 26, 2026
bf398a4
fix(profile,recovery)(#280): SENT-record CBOR fallback + aggregator-s…
vrogojin May 26, 2026
c24bcfe
fix(profile)(#280): steelman — at-cap dedup early-return + delimiter
vrogojin May 26, 2026
b6bc5b2
Merge pull request #281 from unicity-sphere/fix/issue-280-sent-cbor-a…
vrogojin May 26, 2026
bf386a1
fix(payments,recovery)(#282): deterministic asset order + invoice rou…
vrogojin May 26, 2026
cca4530
Merge pull request #283 from unicity-sphere/fix/issue-282-d-residuals
vrogojin May 26, 2026
c4292c6
fix(profile,groupchat)(#285): migrate oversized OpLog writes to CID-r…
vrogojin May 26, 2026
98586af
Merge pull request #287 from unicity-sphere/fix/issue-285-profile-cid…
vrogojin May 26, 2026
cd9748c
fix(core)(#285): preserve CidRefStore across nametag-driven re-init
vrogojin May 26, 2026
523edc8
Merge pull request #288 from unicity-sphere/fix/issue-285-profile-cid…
vrogojin May 26, 2026
20da4f3
feat(profile)(#286): bidirectional legacy↔Profile token storage migra…
vrogojin May 26, 2026
6307312
fix(profile)(#286): steelman pass — collision guard, marker versionin…
vrogojin May 26, 2026
8307711
Merge pull request #289 from unicity-sphere/feat/issue-286-legacy-pro…
vrogojin May 26, 2026
ef5cce2
feat(profile)(#292): Sphere-bound factories that keep privateKey insi…
vrogojin May 27, 2026
934751b
fix(profile)(#292): steelman pass — discriminator robustness + getIde…
vrogojin May 27, 2026
c005c39
docs(profile)(#292): link to #293 SphereCryptographer migration follo…
vrogojin May 27, 2026
fdd8db6
Merge pull request #294 from unicity-sphere/feat/issue-292-profile-fr…
vrogojin May 27, 2026
b91db32
fix(uxf)(#295): embed InclusionProof.SmtPath as opaque STS-canonical …
vrogojin May 27, 2026
ba23f66
test(uxf)(#295): add real-token captured fixture + end-to-end deconst…
vrogojin May 27, 2026
50db1fd
Merge pull request #296 from unicity-sphere/fix/issue-295-uxf-smt-pat…
vrogojin May 27, 2026
0fd7168
fix(profile): connect storage before tokenStorage.initialize in Spher…
vrogojin May 27, 2026
292069e
fix(profile,sphere): steelman pass — pointer-layer retry + connect ha…
vrogojin May 27, 2026
94e6593
Merge pull request #300 from unicity-sphere/fix/profile-factory-conne…
vrogojin May 27, 2026
b7ec712
fix(profile): tolerate corrupt-block bundle refresh during lifecycle …
vrogojin May 27, 2026
0322f86
fix(profile): steelman pass — emit storage:error on bundle-index refr…
vrogojin May 27, 2026
7611b1c
fix(sphere): subscribe to provider events BEFORE token-storage initia…
vrogojin May 27, 2026
ccdc1dc
test(sphere): pin subscribe-before-init ordering invariant (steelman …
vrogojin May 27, 2026
77bbbdc
Merge pull request #301 from unicity-sphere/fix/profile-init-tolerate…
vrogojin May 27, 2026
4b34773
fix(profile): Phase 3 walkback skips EXISTS-BUT-UNFETCHABLE versions …
vrogojin May 27, 2026
f3b1d46
fix(profile): address adversarial review NEEDS-FIX #1-#4 for PR #302
vrogojin May 27, 2026
5f6fab5
Merge pull request #302 from unicity-sphere/fix/profile-pointer-toler…
vrogojin May 27, 2026
579a8fc
fix(profile): unbound migration flush + parallelize CAR block pinning
vrogojin May 27, 2026
a825267
fix(profile): steelman pass — unhandled rejections + test correctness
vrogojin May 27, 2026
0dd20fc
Merge pull request #303 from unicity-sphere/fix/migration-no-deadline…
vrogojin May 27, 2026
b6ec431
fix(profile)(#304): auto-reset corrupted OpLog with permanent Recover…
vrogojin May 27, 2026
8ebba68
Merge pull request #305 from unicity-sphere/fix/profile-oplog-auto-reset
vrogojin May 27, 2026
db315a7
fix(profile,sphere)(#309): identity-key fallback storage + LoadBlockF…
vrogojin May 28, 2026
0dcf2ad
fix(profile,sphere)(#309): address review findings — error preservati…
vrogojin May 28, 2026
c130006
Merge pull request #309 from unicity-sphere/fix/profile-bootloop-cidr…
vrogojin May 28, 2026
fd33a0b
feat(profile)(#311): pin OpLog blocks + request persistent storage + …
vrogojin May 28, 2026
e8839ca
fix(profile)(#311): address review findings — pin putMany + remove de…
vrogojin May 28, 2026
432e2f7
Merge pull request #317 from unicity-sphere/fix/issue-311-helia-block…
vrogojin May 28, 2026
37a0b8c
feat(profile)(#310): user-initiated epoch-reset primitive with perman…
vrogojin May 28, 2026
b737901
fix(profile)(#310): F1 — consult on-chain epoch floor before bump (cr…
vrogojin May 28, 2026
7170da3
fix(profile)(#310): F2 — populate publishedVersion via storage:pointe…
vrogojin May 28, 2026
761d411
fix(profile)(#310): F3 — sentinel KV write for republish retry-resili…
vrogojin May 28, 2026
1ea5826
fix(profile)(#310): satisfy prefer-const lint in armResetEpochPublish…
vrogojin May 28, 2026
6f170fd
Merge pull request #316 from unicity-sphere/feat/issue-310-epoch-reset
vrogojin May 28, 2026
6b51c58
feat(profile)(#313): lazy load from local snapshot blob, background r…
vrogojin May 28, 2026
49229a2
fix(profile)(#313): use canonical isTokenKey for snapshot-loaded toke…
vrogojin May 28, 2026
78aa764
Merge pull request #314 from unicity-sphere/feat/issue-313-lazy-load-…
vrogojin May 28, 2026
7a7a68a
feat(core)(#312): sphere.connectivity surface + offline send-path gating
vrogojin May 28, 2026
7574b68
docs(core)(#312): correct misleading backoff comment in scheduleNext
vrogojin May 28, 2026
5100da0
Merge pull request #315 from unicity-sphere/feat/issue-312-offline-mo…
vrogojin May 28, 2026
0a398b9
fix(profile)(#319): auto-clear BLOCKED on successful pointer poll for…
vrogojin May 28, 2026
719ca61
fix(profile)(#319): address steelman findings — TOCTOU re-read + UI f…
vrogojin May 28, 2026
52ab0c3
Merge pull request #320 from unicity-sphere/fix/blocked-state-auto-re…
vrogojin May 28, 2026
431fc05
feat(infra)(#321): ssl-manager-wrapped local-infra images for relay/f…
vrogojin May 28, 2026
1470be1
fix(infra)(#321): address adversarial-review findings — paths, shutdo…
vrogojin May 28, 2026
cf8a646
Merge pull request #322 from unicity-sphere/feat/issue-321-ssl-wrappe…
vrogojin May 28, 2026
7260026
fix(infra)(#321): aggregator-proxy /health passes through to backend
vrogojin May 28, 2026
0b6b7f4
fix(infra)(#321): drop empty event_kind_allowlist from relay config
vrogojin May 28, 2026
09536dd
feat(infra)(#321): run-faucet.sh supports aggregator/trustbase/nameta…
vrogojin May 28, 2026
a6a48c1
fix(payments)(#312): soften connectivity gate to advisory
vrogojin May 28, 2026
7a12ac8
Merge pull request #327 from unicity-sphere/fix/connectivity-gate-adv…
vrogojin May 28, 2026
fbdb24a
fix(profile)(#330): install IDBBlockstore for browser Helia
vrogojin May 28, 2026
0efecf0
fix(profile)(#330): inline durability gate on pointer publish
vrogojin May 28, 2026
04eaf32
fix(profile)(#330): read-only token-storage fallback + preserve legac…
vrogojin May 28, 2026
fcb84af
fix(profile)(#330): address code-review findings (3 blockers + 5 bugs)
vrogojin May 28, 2026
eea87ca
Merge pull request #331 from unicity-sphere/fix/issue-330-browser-dur…
vrogojin May 28, 2026
6c4cb93
fix(profile): silence "Already pinned" pin-shim noise (#330 follow-up)
vrogojin May 29, 2026
c1f2ac0
Merge pull request #332 from unicity-sphere/fix/pin-shim-already-pinn…
vrogojin May 29, 2026
7421386
fix(groupchat)(page-freeze): degrade CID_REF_UNREADABLE + bound per-m…
vrogojin May 29, 2026
ca74b42
fix(profile/soak): silence pre-#247 raw-bytes CBOR false-alarms + tol…
vrogojin May 29, 2026
0920b4e
fix(soak): tolerate testnet replication lag at §C.4 (poll-and-retry i…
vrogojin May 29, 2026
ebe107b
chore(soak): per-section timing in banner() (issue: page-freeze 2026-…
vrogojin May 29, 2026
3af2139
fix(profile)(page-freeze): inspectSnapshotEpoch memo + AbortControlle…
vrogojin May 29, 2026
f1e8e40
fix(groupchat): mapWithConcurrency stops dispatching new work on fn t…
vrogojin May 29, 2026
664a36f
Merge pull request #334 from unicity-sphere/fix/issue-page-freeze-202…
vrogojin May 29, 2026
b35fec0
fix(profile/snapshot)(issue-335): SingleBlobSyncWriter for tombstones…
vrogojin May 29, 2026
c0ae084
fix(profile/snapshot)(issue-335): normalize legacy-form per-address k…
vrogojin May 29, 2026
1ec1982
fix(connectivity): aggregator pinger false-negative when round=0
vrogojin May 29, 2026
27bb56f
Merge pull request #340 from unicity-sphere/fix/issue-335-snapshot-to…
vrogojin May 29, 2026
b6b8d7a
Merge pull request #342 from unicity-sphere/fix/connectivity-aggregat…
vrogojin May 29, 2026
f9005c4
chore(release): bump to 0.8.0 + move Unreleased content under [0.8.0]…
vrogojin May 29, 2026
f0b6042
Merge branch 'main' into integration/all-fixes
vrogojin May 29, 2026
af41bea
Merge pull request #345 from unicity-sphere/integration/all-fixes
vrogojin May 29, 2026
4a76216
fix(ci): skip helia-blockstore-shim-fd on Node 20 (Promise.withResolv…
vrogojin May 30, 2026
b1e6472
Merge pull request #359 from unicity-sphere/fix/ci-node20-helia-promi…
vrogojin May 30, 2026
0349e37
fix(profile/storage)(audit-333-c1): fail closed on encrypt() before s…
vrogojin May 30, 2026
76b67d2
Merge pull request #346 from unicity-sphere/fix/issue-333-c1-plaintex…
vrogojin May 30, 2026
4101ba4
fix(profile/migration)(audit-333-c2): force durable flush before cleanup
vrogojin May 30, 2026
c4f99ae
Merge pull request #347 from unicity-sphere/fix/issue-333-c2-migratio…
vrogojin May 30, 2026
4842869
fix(profile/flush-scheduler)(audit-333-c3): probe before destructive …
vrogojin May 30, 2026
720224c
Merge pull request #361 from unicity-sphere/fix/issue-333-c3-orbitdb-…
vrogojin May 30, 2026
dfa9884
fix(payments/transfer)(audit-333-h1): same-process source lock for co…
vrogojin May 30, 2026
8ab8bbd
Merge pull request #349 from unicity-sphere/fix/issue-333-h1-conserva…
vrogojin May 30, 2026
f927a45
fix(uxf)(audit-333-h2): bind manifest tokenId key to referenced root'…
vrogojin May 30, 2026
bfa154e
Merge pull request #351 from unicity-sphere/fix/issue-333-h2-uxf-mani…
vrogojin May 30, 2026
768963e
fix(uxf)(audit-333-h3): surface mergePkg per-token skips; add strict …
vrogojin May 30, 2026
56134c3
Merge pull request #352 from unicity-sphere/fix/issue-333-h3-mergepkg…
vrogojin May 30, 2026
410f62d
fix(payments/transfer)(audit-333-h4): re-derive requestId binding gat…
vrogojin May 30, 2026
f435780
Merge pull request #353 from unicity-sphere/fix/issue-333-h4-disposit…
vrogojin May 30, 2026
620a5ec
fix(payments/transfer)(audit-333-h5): unlock source tokens on failed-…
vrogojin May 30, 2026
4f15156
Merge pull request #354 from unicity-sphere/fix/issue-333-h5-failed-p…
vrogojin May 30, 2026
654edea
fix(profile)(audit-333-h7): add recompute-content verifier hook to Ma…
vrogojin May 30, 2026
35d6010
Merge pull request #355 from unicity-sphere/fix/issue-333-h7-manifest…
vrogojin May 30, 2026
97f6c95
fix(uxf,payments): bundleCid determinism — lock envelope timestamp ac…
vrogojin May 30, 2026
f725fc5
Merge pull request #362 from unicity-sphere/fix/bundle-cid-determinism
vrogojin May 30, 2026
7508d1c
test(payments/transfer)(audit-333-v6-recover-gap): close the V6-RECOV…
vrogojin May 30, 2026
d417a66
Merge pull request #358 from unicity-sphere/fix/issue-333-v6-recover-…
vrogojin May 30, 2026
c5962f0
chore(perf)(issue-363): opt-in perf-counters instrumentation on hot p…
vrogojin May 30, 2026
486795c
chore(perf)(issue-363): extend perf-counters to aggregator + recovery…
vrogojin May 30, 2026
e6fac98
test(harness)(issue-364-item6): strip multi-line perf-counter blocks …
vrogojin May 30, 2026
9588198
perf(profile)(issue-364-item2): suppress applySnapshot during sphere …
vrogojin May 30, 2026
725f01b
chore(perf)(issue-364-item3): add attribution counters for snapshot d…
vrogojin May 31, 2026
0da844c
merge(issue-364): Item #2 — suppress applySnapshot during clear
vrogojin May 31, 2026
a6e1807
merge(issue-364): Item #3 — attribution counters
vrogojin May 31, 2026
19f952e
merge(issue-364): Item #6 — test harness perf-counter contamination
vrogojin May 31, 2026
d2324d0
perf(profile)(issue-367): per-bundle provenance gate for Rule-4 skip
vrogojin May 31, 2026
616c74d
perf(profile/pointer)(issue-364-item1): cache recoverLatest head to e…
vrogojin May 30, 2026
2a1968e
perf(profile/pointer)(issue-366): publish-time cache invalidation for…
vrogojin Jun 1, 2026
1ed2da0
perf(profile)(issue-368): process-wide applySnapshot suppression duri…
vrogojin Jun 1, 2026
9b05d86
perf(profile/ipfs-client)(issue-369): retry-with-backoff + lower DEFA…
vrogojin Jun 1, 2026
badc759
merge: PR #373 (issue #367) Rule-4 per-bundle provenance gate
vrogojin Jun 1, 2026
2695317
merge: PR #374 (issue #366) recoverLatest cache with publish-time inv…
vrogojin Jun 1, 2026
118e1e6
merge: PR #376 (issue #369) pin retry-with-backoff + lower DEFAULT_PI…
vrogojin Jun 1, 2026
8e4113c
perf(profile/ipfs)(issue-370): single-shot CAR /dag/import + /dag/exp…
vrogojin May 31, 2026
7d7be89
test(profile/ipfs)(issue-370): export _setGatewayCapabilityForTest fo…
vrogojin May 31, 2026
fbbef6e
perf(payments)(issue-378): persist V6-RECOVER permanent verdict; shor…
vrogojin Jun 1, 2026
a19feee
merge: PR #379 (issue #378) V6-RECOVER permanent verdict persistence
vrogojin Jun 1, 2026
7e9c090
fix(payments)(#378): correct misleading 'clearing' log in V6-RECOVER …
vrogojin Jun 1, 2026
956b79f
perf: 6-PR perf-stack — CAR batching, Rule-4 provenance, pointer cach…
vrogojin Jun 1, 2026
07b5019
fix(communications)(page-freeze): degrade CID_REF_UNREADABLE — mirror…
vrogojin Jun 1, 2026
5eca35f
perf(profile/ipfs): adaptive cold-cache for sidecar probes — kill 404…
vrogojin Jun 1, 2026
0327e67
merge: PR #383 communications CID_REF_DEGRADE
vrogojin Jun 1, 2026
1499a93
merge: PR #384 sidecar adaptive cold-cache
vrogojin Jun 1, 2026
116b8d9
fix(profile)(security): keep identity / seed material out of OrbitDB
vrogojin Jun 1, 2026
96991eb
fix(profile)(security): lazy-backfill identity keys from fallback int…
vrogojin Jun 1, 2026
a9e6242
fix(payments)(#387): durable V6-RECOVER invalid status; balance exclu…
vrogojin Jun 3, 2026
bc28737
fix(payments)(#389): PR #388 review follow-up — V6-RECOVER ledger dis…
vrogojin Jun 3, 2026
e47da61
test(payments)(#390): manual repro — direct-send predicate-mismatch r…
vrogojin Jun 3, 2026
2f9a690
fix(payments)(#390): V6-RECOVER source-token state = transfer sourceS…
vrogojin Jun 3, 2026
b8b526d
chore(release): 0.0.a1
vrogojin Jun 3, 2026
2dfd7d7
merge: PR #388 V6-RECOVER #387/#389/#390 — durable invalid + root-cau…
vrogojin Jun 4, 2026
6101046
fix(payments)(#391): duplicate-bundle guard checks sourceTokenIds + l…
vrogojin Jun 3, 2026
55c8fe5
test(payments)(#391): soak + e2e for 4-hop round-trip duplicate-bundl…
vrogojin Jun 3, 2026
bc6895e
fix(payments)(#393): disable automated CID-based delivery via kill-sw…
vrogojin Jun 4, 2026
a43e788
test(payments)(#391/#393): handle INLINE_CAR_TOO_LARGE soft-pass in s…
vrogojin Jun 4, 2026
36742e5
test(e2e)(#391): fix amount unit bug + delete obsolete uint64 warnings
vrogojin Jun 4, 2026
246e0d0
merge: PR #392 #391 duplicate-bundle guard + load-tail SENT reconcili…
vrogojin Jun 4, 2026
e5d6938
feat(payments)(#394): re-enable automated CID delivery at the Nostr cap
vrogojin Jun 4, 2026
961da14
test(payments)(#394): add STRICT_CID_DELIVERY mode to round-trip soak
vrogojin Jun 4, 2026
0a20a35
feat(payments)(#394b): raise RELAY_SAFE_CAP_BYTES 96 KiB → 512 KiB
vrogojin Jun 4, 2026
c58f97f
test(transfer)(#394b): raise forced-inline-oversized N from 200 to 80…
vrogojin Jun 4, 2026
5f5901d
docs(#394): payment-round-trip demo playbook
vrogojin Jun 4, 2026
3f3dadf
merge: PR #395 #394 automated CID delivery re-enabled + 512 KiB inlin…
vrogojin Jun 4, 2026
ecb4317
test(accounting)(#397): invoice round-trip soak + full-recovery cap fix
vrogojin Jun 4, 2026
903fc80
fix(accounting)(#397): route invoice delivery through the token pipeline
vrogojin Jun 4, 2026
541b448
feat(accounting)(#401): wire publishUxfBundle into OUTBOX/SENT + reco…
vrogojin Jun 5, 2026
85700b6
Merge pull request #400 from unicity-sphere/fix/issue-397-invoice-via…
vrogojin Jun 5, 2026
d949844
Merge pull request #402 from unicity-sphere/feat/issue-401-invoice-ou…
vrogojin Jun 5, 2026
c19cccd
test(soak): adapt to canonical CLI UX (sphere-cli #32 + #35)
vrogojin Jun 5, 2026
1d2d7e2
Merge pull request #403 from unicity-sphere/fix/soak-scripts-canonica…
vrogojin Jun 5, 2026
8d66c53
feat(accounting): add returnAllInvoicePayments — bulk companion to re…
vrogojin Jun 5, 2026
faf65bf
test(soak)+docs: extend accounting roundtrip with partial-pay + bulk-…
vrogojin Jun 5, 2026
0e3290a
Merge pull request #405 from unicity-sphere/feat/accounting-return-al…
vrogojin Jun 6, 2026
70750bb
Merge pull request #406 from unicity-sphere/feat/soak-accounting-retu…
vrogojin Jun 6, 2026
4b62e9a
fix(accounting)(#404): attribute null-sender back-direction refunds v…
vrogojin Jun 6, 2026
7616c22
Merge pull request #413 from unicity-sphere/fix/issue-404-masked-refu…
vrogojin Jun 6, 2026
5293e9e
chore(soak)+docs: drop #404 workaround now that #413 is merged
vrogojin Jun 6, 2026
3b21b26
Merge pull request #414 from unicity-sphere/chore/post-404-soak-revert
vrogojin Jun 6, 2026
8832a95
fix(sphere)(sphere-cli#42): make Nostr nametag-binding publish fire-a…
vrogojin Jun 7, 2026
1a9d242
test(e2e)(sphere-cli#42): wallet-clear nametag-taken assertion → back…
vrogojin Jun 7, 2026
5ca2822
fix(test)(sphere-cli#42): bump detached-publish flush in wallet-clear…
vrogojin Jun 7, 2026
fc83797
test(e2e)(sphere-cli#42): skip legacy IpfsStorageProvider lifecycle test
vrogojin Jun 7, 2026
5c4221b
fix(sphere)(sphere-cli#42): snapshot address context + destroy-guard …
vrogojin Jun 7, 2026
cc14f3c
Merge pull request #415 from unicity-sphere/fix/issue-42-nametag-publ…
vrogojin Jun 7, 2026
c62757e
fix(profile)(sphere-sdk#419): pin OpLog blocks at depth=0 + emit one-…
vrogojin Jun 7, 2026
34286fa
fix(sphere-sdk)(#423): gate Nostr subscription on handler readiness
vrogojin Jun 8, 2026
7b3c899
fix(sphere-sdk)(#424): make AggregatorPinger flake-resilient
vrogojin Jun 8, 2026
ab7ca47
fix(profile): stabilize pin-count assertion in OrbitDB-write-failure …
vrogojin Jun 8, 2026
38f77a5
fix(payments): stabilize transient-classification assertion in negati…
vrogojin Jun 8, 2026
5561bfb
Merge pull request #430 from unicity-sphere/fix/profile-token-storage…
vrogojin Jun 8, 2026
8c0755b
Merge pull request #431 from unicity-sphere/fix/bundle-acquirer-trans…
vrogojin Jun 8, 2026
59639ca
test(integration): per-test TEST_DIR for nametag-normalization to fix…
vrogojin Jun 8, 2026
fde0f8c
Merge pull request #432 from unicity-sphere/fix/nametag-normalization…
vrogojin Jun 8, 2026
f458869
Merge pull request #385 from unicity-sphere/fix/profile-identity-keys…
vrogojin Jun 8, 2026
1e4edef
Merge pull request #422 from unicity-sphere/fix/issue-419-profile-syn…
vrogojin Jun 8, 2026
bd5bcca
Merge pull request #428 from unicity-sphere/fix/issue-423-gate-subscr…
vrogojin Jun 8, 2026
8c81b17
Merge pull request #429 from unicity-sphere/fix/issue-424-aggregator-…
vrogojin Jun 8, 2026
171a01c
Merge pull request #323 from unicity-sphere/fix/aggregator-proxy-heal…
vrogojin Jun 8, 2026
f67d88f
Merge pull request #324 from unicity-sphere/fix/relay-allowlist-misco…
vrogojin Jun 8, 2026
a2ac81d
fix(core)(#191): promote errMessage helper; replace lossy NametagMint…
vrogojin May 20, 2026
23c20b1
Merge pull request #192 from unicity-sphere/fix/issue-191-error-strin…
vrogojin Jun 8, 2026
736ee6d
test(integration): per-test TEST_DIR for 7 remaining flake-prone test…
vrogojin Jun 8, 2026
302b865
Merge pull request #433 from unicity-sphere/test/per-test-testdir-int…
vrogojin Jun 8, 2026
396a8d7
feat(infra)(#321): proxy serves /.well-known/trust-base.json + faucet…
vrogojin May 28, 2026
3714752
Merge pull request #326 from unicity-sphere/feat/serve-trust-base-fro…
vrogojin Jun 8, 2026
7c2a8e1
fix(profile/pointer)(issue-336): add PID-liveness probe to file lock …
vrogojin May 29, 2026
f6e05b4
Merge pull request #338 from unicity-sphere/fix/issue-336-file-lock-p…
vrogojin Jun 8, 2026
f00ea16
feat(uxf)(sphere-sdk#435): emit child + predecessor refs as Tag 42 CI…
vrogojin Jun 8, 2026
c382eca
fix(uxf)(sphere-sdk#435): review follow-ups before merge
vrogojin Jun 8, 2026
df2db1c
Merge pull request #436 from unicity-sphere/fix/issue-435-tag42-cid-l…
vrogojin Jun 8, 2026
f77e4dd
feat(uxf)(sphere-sdk#437): swap-roundtrip soak + demo playbook
vrogojin Jun 8, 2026
7a54446
fix(uxf)(sphere-sdk#437): adversarial-review follow-ups before merge
vrogojin Jun 8, 2026
50fd512
Merge pull request #439 from unicity-sphere/feat/issue-437-swap-round…
vrogojin Jun 8, 2026
b00a362
fix(transport)(sphere-sdk#442): gate mux relay sub until module handl…
vrogojin Jun 8, 2026
aa6c5d1
fix(swap)(sphere-sdk#445): lazy-load terminal swaps from storage in g…
vrogojin Jun 8, 2026
5fa03ba
fix(uxf)(sphere-sdk#437): section 10 poison-pill scan aborts on clean…
vrogojin Jun 8, 2026
763170d
fix(profile)(sphere-sdk#450): bound pre-shutdown publish-retry spin (…
vrogojin Jun 9, 2026
5c8e5b6
fix(payments)(sphere-sdk#444): split local-commit and remote-publish …
vrogojin Jun 9, 2026
18020a3
docs(uxf)(sphere-sdk#456): document escrow DIRECT address fallback fo…
vrogojin Jun 9, 2026
e8f4c11
docs(uxf)(sphere-sdk#455): investigation of single-coin faucet flakin…
vrogojin Jun 9, 2026
69f1128
test(core)(sphere-sdk#448): assert mux subscription gate stays closed…
vrogojin Jun 9, 2026
9b823d4
fix(profile)(sphere-sdk#454): address HIGH findings + structural-cast…
vrogojin Jun 9, 2026
5130977
fix(transport)(sphere-sdk#464): make MuxAdapter dispatch await async …
vrogojin Jun 9, 2026
03acc02
fix(swap)(sphere-sdk#457): fail fast when counterparty transport pubk…
vrogojin Jun 9, 2026
6c97cd1
fix(swap)(sphere-sdk#447): include terminal swaps in resolveSwapId/ge…
vrogojin Jun 9, 2026
550114c
feat(swap)(sphere-sdk#456): hardcode + export DEFAULT_ESCROW_ADDRESS=…
vrogojin Jun 10, 2026
c9bf5aa
fix(transport)(sphere-sdk#473): defer DM cursor advance until dispatc…
vrogojin Jun 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
99 changes: 99 additions & 0 deletions .github/workflows/external-acks-gate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# External Acks Gate (T.8.D production cutover)
#
# Why this exists (W6 / W2 plan rationale):
# The UXF Inter-Wallet Transfer Protocol v1 widens the `onIntent` callback
# shape across consumers. Three downstream repositories must update their
# integrations BEFORE we cut over production (T.8.D), or live wallets will
# silently drop incoming intents. We cannot land the cutover PR until each
# maintainer has signed off in their own repo.
#
# How acks are recorded:
# Each downstream repo opens a tracking issue with the label
# `uxf-transfer-v1-ack`. The maintainer closes the issue once their repo
# has shipped the widened callback. This workflow asserts all 3 are closed.
#
# Tracking issues (corrected from plan after repo audit at PR-prep time —
# `agentsphere` doesn't yet exist as a real GitHub repo so it's not in the
# active gate; if/when it lands, follow the "Adding a 4th external repo"
# instructions below):
# - unicity-sphere/sphere (label: uxf-transfer-v1-ack) — issue #302
# - unicitynetwork/openclaw-unicity (label: uxf-transfer-v1-ack) — issue #8
#
# Triggering model (label-gated):
# The job runs only when the PR carries the `t8d-cutover` label. This keeps
# the gate scoped to the cutover PR; ordinary PRs are unaffected. We
# re-evaluate on label add/remove and on every push to the PR head, so the
# check stays green/red in lockstep with the upstream issue state.
#
# Required secret:
# EXTERNAL_ACKS_TOKEN — a fine-grained PAT (or GitHub App token) with
# `Issues: Read` scope on the upstream repos listed above. The default
# `GITHUB_TOKEN` is scoped to THIS repo only and cannot read issues in other
# repos; passing it would surface as a 404, not an auth error, which is hard
# to debug. Configure under: Settings → Secrets and variables → Actions.
#
# Adding another external repo:
# 1. Add the new tracking issue (label `uxf-transfer-v1-ack`) in that repo.
# 2. Append `<owner>/<repo>` to the `REPOS` list in the gate step.
# 3. Ensure EXTERNAL_ACKS_TOKEN has `Issues: Read` on the new repo.
# 4. Update the T.8.D PR description to reference the new tracking issue.

name: External Acks Gate

on:
pull_request:
branches: [main]
types: [opened, synchronize, reopened, labeled, unlabeled]

jobs:
external-acks-gate:
name: Verify external maintainer acks (T.8.D)
# Only run on the cutover PR — gated by the `t8d-cutover` label.
if: contains(github.event.pull_request.labels.*.name, 't8d-cutover')
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
steps:
- name: Verify EXTERNAL_ACKS_TOKEN is configured
env:
EXTERNAL_ACKS_TOKEN: ${{ secrets.EXTERNAL_ACKS_TOKEN }}
run: |
if [ -z "${EXTERNAL_ACKS_TOKEN:-}" ]; then
echo "::error::EXTERNAL_ACKS_TOKEN secret is not set."
echo "::error::This gate queries closed issues in the configured external repos."
echo "::error::Configure a fine-grained PAT with 'Issues: Read' on those repos."
echo "::error::Settings → Secrets and variables → Actions → New repository secret"
exit 1
fi

- name: Check external repos have a closed uxf-transfer-v1-ack issue
env:
GH_TOKEN: ${{ secrets.EXTERNAL_ACKS_TOKEN }}
run: |
set -euo pipefail
REPOS=(
"unicity-sphere/sphere"
"unicitynetwork/openclaw-unicity"
)
missing=()
for repo in "${REPOS[@]}"; do
# `gh issue list` honours --label and --state; --json id keeps output stable.
count=$(gh issue list \
--repo "$repo" \
--state closed \
--label uxf-transfer-v1-ack \
--json id \
--jq 'length')
if [ "$count" -lt 1 ]; then
echo "❌ $repo has no closed issue with label uxf-transfer-v1-ack — maintainer ack required before T.8.D merges"
missing+=("$repo")
else
echo "✅ $repo: $count closed uxf-transfer-v1-ack issue(s) found"
fi
done
if [ ${#missing[@]} -gt 0 ]; then
echo "::error::T.8.D cutover blocked — ${#missing[@]} external repo(s) missing acks: ${missing[*]}"
exit 1
fi
echo "All ${#REPOS[@]} external repos have signed off — T.8.D cutover gate passed."
175 changes: 175 additions & 0 deletions .github/workflows/pointer-sdk-canary.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
name: Pointer SDK Canary

# Triggers only when pointer-layer surface changes. The goal of this
# workflow is to catch silent drift in:
# (1) the KAT test vectors (SPEC §14)
# (2) the pinned @unicitylabs/state-transition-sdk version range
# (3) the package-major / pointer-layer-major alignment
#
# It does NOT replace the main `CI` workflow; it runs in parallel on
# pointer-touching PRs and fails closed if any of the invariants drift.
#
# See docs/uxf/PROFILE-AGGREGATOR-POINTER-TEST-SPEC.md §4 (W8 "SDK
# version pinning + CI canary") for the normative requirement.

on:
pull_request:
branches: [main]
paths:
- 'profile/aggregator-pointer/**'
- 'profile/pointer-wiring.ts'
- 'profile/profile-token-storage-provider.ts'
- 'tests/fixtures/pointer-kat-vectors.json'
- 'tests/fixtures/pointer-kat-vectors.sha256'
- 'tests/conformance/pointer/**'
- 'docs/uxf/PROFILE-AGGREGATOR-POINTER-TEST-SPEC.md'
- 'docs/uxf/PROFILE-AGGREGATOR-POINTER-SPEC.md'
- '.github/workflows/pointer-sdk-canary.yml'
workflow_dispatch: {}

permissions:
contents: read

jobs:
canary:
name: pointer-layer canary
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: npm

- name: Install dependencies
run: |
npm install --include=optional --ignore-scripts
npm rebuild

# ---- Invariant 1: KAT vectors checksum has not drifted --------
# The `.sha256` file is the checked-in source of truth. If a dev
# changes the KAT vectors intentionally (e.g. after a SPEC bump),
# they MUST regenerate the checksum and commit both files in the
# same PR. Silent drift is caught here.
- name: Verify KAT vectors checksum
run: |
set -euo pipefail
VECTORS="tests/fixtures/pointer-kat-vectors.json"
CHECKSUM="tests/fixtures/pointer-kat-vectors.sha256"
if [ ! -f "$VECTORS" ]; then
echo "ERROR: $VECTORS not found"
exit 1
fi
if [ ! -f "$CHECKSUM" ]; then
echo "ERROR: $CHECKSUM not found — regenerate via:"
echo " sha256sum $VECTORS | awk '{print \$1}' > $CHECKSUM"
exit 1
fi
EXPECTED=$(awk 'NR==1 {print $1}' "$CHECKSUM")
ACTUAL=$(sha256sum "$VECTORS" | awk '{print $1}')
if [ "$EXPECTED" != "$ACTUAL" ]; then
echo "ERROR: KAT vectors drift detected!"
echo " file: $VECTORS"
echo " expected: $EXPECTED"
echo " actual: $ACTUAL"
echo ""
echo "If this change is intentional (SPEC bump), regenerate:"
echo " sha256sum $VECTORS | awk '{print \$1}' > $CHECKSUM"
echo "and commit both files in the same PR."
exit 1
fi
echo "OK: KAT vectors checksum matches ($EXPECTED)"

# ---- Invariant 2: state-transition-sdk version is strictly pinned
# The pointer layer depends on AggregatorClient / RootTrustBase /
# InclusionProof types from @unicitylabs/state-transition-sdk.
# A floating range (^, ~, *) would allow silent ABI shifts under
# us. Enforce an exact pin (no range operator).
- name: Verify state-transition-sdk version is pinned exactly
run: |
set -euo pipefail
RAW=$(node -p "require('./package.json').dependencies['@unicitylabs/state-transition-sdk'] || ''")
echo "state-transition-sdk pin: '$RAW'"
if [ -z "$RAW" ]; then
echo "ERROR: @unicitylabs/state-transition-sdk missing from dependencies"
exit 1
fi
case "$RAW" in
^*|~*|*x*|*\**|\>*|\<*)
echo "ERROR: @unicitylabs/state-transition-sdk version '$RAW' is a range."
echo "Pointer layer requires an exact pin (e.g. '1.6.1-rc.f37cb85')."
exit 1
;;
esac
echo "OK: state-transition-sdk is exact-pinned"

# ---- Invariant 3: package-major ↔ pointer-layer-major alignment
# The pointer layer's HKDF info string embeds "v1" and the SPEC
# contract promises backwards-compat within a single major.
# If `package.json` version major bumps (0.x → 1.x etc.) without
# a corresponding pointer-layer-major bump (HKDF info rename +
# SPEC version), downstream wallets will silently re-derive
# different keys. Guard against that.
- name: Verify package-major aligns with pointer-layer-major
run: |
set -euo pipefail
PKG_VERSION=$(node -p "require('./package.json').version")
PKG_MAJOR=$(echo "$PKG_VERSION" | cut -d. -f1)
echo "package.json version: $PKG_VERSION (major=$PKG_MAJOR)"

# Expected pointer-layer major encoded in HKDF info constant.
# Parse profile/aggregator-pointer/constants.ts for the
# PROFILE_POINTER_HKDF_INFO literal and extract the trailing
# vN segment.
INFO_LINE=$(grep -E "PROFILE_POINTER_HKDF_INFO\s*=\s*utf8ToBytes\(" profile/aggregator-pointer/constants.ts | head -n1)
if [ -z "$INFO_LINE" ]; then
echo "ERROR: could not locate PROFILE_POINTER_HKDF_INFO in constants.ts"
exit 1
fi
POINTER_MAJOR=$(echo "$INFO_LINE" | sed -n 's/.*-v\([0-9][0-9]*\).*/\1/p')
if [ -z "$POINTER_MAJOR" ]; then
echo "ERROR: could not parse pointer-layer major from HKDF info"
echo " line: $INFO_LINE"
exit 1
fi
echo "pointer-layer major (from HKDF info): v$POINTER_MAJOR"

# Alignment rule (v1 phase): while package.json is on 0.x,
# the pointer layer is v1. When package.json bumps to 1.x,
# pointer-layer v1 must still be the live protocol until a
# SPEC v4.x bump ships v2. This guard fires if someone
# publishes a package with major >= 2 while the HKDF info
# still says v1 — a strong signal of silent skew.
if [ "$PKG_MAJOR" -ge 2 ] && [ "$POINTER_MAJOR" = "1" ]; then
echo "ERROR: package major=$PKG_MAJOR but pointer-layer is still v1."
echo "Either bump pointer-layer to v2 (rename HKDF info + SPEC §14) or"
echo "downgrade package major."
exit 1
fi
echo "OK: package-major=$PKG_MAJOR aligns with pointer-layer-v$POINTER_MAJOR"

# ---- Invariant 4: TEST-SPEC §4 coverage matrix audit ----------
# Fails CI if any H/W finding lacks PRIMARY or SECONDARY coverage.
# The parser + assertions live in the test file; this step is a
# thin shim that invokes them.
- name: Coverage matrix audit
run: npx vitest run tests/conformance/pointer/

# ---- Invariant 5: typecheck + lint of the pointer layer -------
- name: Typecheck
run: npm run typecheck

# Scope: only lint the conformance audit files — the pointer
# layer itself is linted by the main `CI` workflow. Keeping
# this scope tight avoids double-reporting pre-existing
# warnings in pointer-layer source.
- name: Lint coverage-audit scaffold
run: npx eslint tests/conformance/pointer/

# ---- Invariant 6: pointer-layer unit tests still pass ---------
- name: Run pointer-layer unit tests
run: npx vitest run tests/unit/profile/pointer/
Loading
Loading