mirror of
https://github.com/PR0M3TH3AN/SeedPass.git
synced 2026-10-27 07:52:03 +00:00
Add a prioritized NEXT section, so the open items are findable
Everything recorded over this session accumulated inside a nested sub-list under "Independent security review", which is no longer where most of it belongs — the agent not running on Windows is a platform gap, not a review finding. Eleven open items now have a scannable entry point at the top of the TypeScript section, ordered by what a TypeScript-only product cannot ship with, with the detail left where it already lives. The ordering reflects the change in what this repository is: Python is now the oracle the port is validated against rather than the product, so Python-side items are marked as keeping the oracle working rather than improving what ships. Two of them may resolve by deletion rather than by fixing. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01Vtx94nXDmNgXEeThUZP4QN
This commit is contained in:
1 parent
75300b0c7a
commit
1337e2d3ee
1 file changed
+61
@@ -125,6 +125,67 @@ Branch state as of 2026-08-17: core + CLI + interactive TUI are feature-complete
|
||||
for daily use and cross-verified against Python on every change. What follows is
|
||||
everything still open, in the order it should be tackled.
|
||||
|
||||
### NEXT — open items as of 2026-08-20
|
||||
|
||||
TypeScript is the implementation going forward; Python is now the reference
|
||||
oracle the port is validated against, not the product. That reframes some of
|
||||
what follows, and each item says which side it is on. Detail for every entry
|
||||
is further down this file.
|
||||
|
||||
**P0 — a TypeScript-only product cannot ship with these open**
|
||||
|
||||
1. **The session agent does not run on Windows.** `listen EACCES`: Node needs
|
||||
a named pipe there, not a filesystem path. No `seedpass agent` means no
|
||||
held seeds, no tokens, no high-risk sessions and no sink delivery. NOT a
|
||||
path substitution — the agent's access control IS the socket's 0600 mode,
|
||||
so this is a security design decision about what replaces it. Four test
|
||||
files are excluded on Windows meanwhile.
|
||||
2. **Are vault files protected from other users on Windows?** Ten `0600`
|
||||
assertions across both languages are now skipped there, including the
|
||||
vault index and the semantic index, which hold secrets. Windows has no
|
||||
POSIX mode bits; these files inherit directory ACLs instead. Either verify
|
||||
the inherited ACL is user-scoped and assert THAT, or set one explicitly.
|
||||
|
||||
**P1 — security decisions, each needing a call rather than a fix**
|
||||
|
||||
3. **An unencrypted portable backup is unauthenticated**, and import accepts
|
||||
it silently. Its checksum and fingerprint both live in the same
|
||||
attacker-supplied file. Python behaves identically, so this is a shared
|
||||
design property — whatever is decided has to land on both sides.
|
||||
4. **The API's settable config keys are a superset of Python's.** Deliberate
|
||||
(TypeScript can set the password-policy keys Python's API cannot), but it
|
||||
IS a divergence: a client setting a policy key succeeds here and gets 400
|
||||
there. Widen Python or document the surfaces as non-identical.
|
||||
|
||||
**P2 — correctness and coverage**
|
||||
|
||||
5. **`src/nostr/client.py` needs migrating to nostr-sdk 0.44+.** Pinned at
|
||||
`<0.44` because 0.44 removed `NostrSigner.keys` and changed `Client`'s
|
||||
constructor. Oracle-side: it has to keep working for parity testing.
|
||||
6. **`textual` is an undeclared dependency**, so the entire TUI test surface
|
||||
skips on Linux and macOS and has been passing by not running. Decide
|
||||
whether the TUI is supported or optional — and note that if Python is
|
||||
retiring, this may resolve by deletion rather than by fixing.
|
||||
7. **`manager.py` sits 0.74 points above its coverage floor**, and its
|
||||
uncovered half is interactive prompt handling. Raising it honestly means
|
||||
extracting logic out of the `input()` loops.
|
||||
8. **A nested export path answers 500 instead of a refusal.** `atomicWrite`
|
||||
does not create parent directories; the path is caller-supplied, so this
|
||||
should be a 400 naming the missing directory.
|
||||
9. **The JavaScript SBOM needs a pnpm-native generator.** The old step used
|
||||
the npm tool against a pnpm workspace and never produced anything.
|
||||
|
||||
**P3 — now cheap, given today's results**
|
||||
|
||||
10. **Promote the reproducible-build check from experiment to required.** All
|
||||
three platforms produced a byte-identical bundle
|
||||
(`4915bb47…`), so the invariant holds. Remove
|
||||
`continue-on-error` from the `reproducible` job in ts-platform.yml.
|
||||
11. **Slim ts-parity.yml.** Its `parity` job now duplicates ts-platform's
|
||||
Ubuntu work (typecheck, tests, build, smoke, pack). Left alone
|
||||
deliberately so a new workflow and a restructure did not land together;
|
||||
safe to do now that ts-platform is green on all three.
|
||||
|
||||
### Blockers before real secrets
|
||||
|
||||
- [~] **Independent security review — restated, since there is no third party.**
|
||||
|
||||
Reference in new issue
Block a user