6.2 KiB
6.2 KiB
Tasks — enterprise-server-keys
1. Scaffold
- 1.1 Create
packages/security/server-keys/{src/{bin,commands/{keys,files,license},prompt,otel},tests/{integration,setup}}/tree - 1.2
package.jsonv0.1.0,type: module,sideEffects: false, 18binentries, full subpathexportsmap- Deps:
@suaveplan/error@suaveplan/types@suaveplan/crypto@suaveplan/crypto-keys@suaveplan/crypto-hash@suaveplan/crypto-utils@suaveplan/crypto-vault@suaveplan/license@suaveplan/storage@suaveplan/storage-file@suaveplan/packer@suaveplan/bitpacker@suaveplan/logger(allworkspace:^),@opentelemetry/api(catalog:observability),zod(catalog:forms),tslib(catalog:build),@inquirer/prompts(catalog),commander(catalog) - DevDeps:
@suaveplan/testing@vitest/coverage-istanbulvitestfast-check(catalog:testing),@types/nodetypescript(catalog:),vitevite-plugin-dts(catalog:build)
- Deps:
- 1.3
tsconfig.json+tsconfig.lib.jsonextending../../../tsconfig.base.json - 1.4
vite.config.ts(dts, ES, externals for@suaveplan/*+tslib+zod+@opentelemetry/api+commander+@inquirer/*) - 1.5
vitest.config.ts(pool: forks,provider: istanbul, thresholds 100/100/100/100,setupFiles: ['./tests/setup/polyfills.ts'],testTimeout: 30000for the integration tests) - 1.6
tests/setup/polyfills.ts(crypto polyfill for node) - 1.7 Confirm
@inquirer/prompts+commanderexist in rootpackage.jsoncatalogs; add to a newclicatalog block if not
2. Foundation modules
- 2.1
src/error-codes.ts+.md+ test — 10SERVER_KEYS_*codes +ServerKeysError - 2.2
src/otel/instruments.ts+.md+ test — counterserver_keys.command_total{command,outcome}, histogramserver_keys.command_duration_ms{command} - 2.3
src/run-function.ts+.md+ test — top-level.action(...)wrapper that catches/exits, increments OTel, AbortSignal-aware - 2.4
src/prompt/prompt.ts+.md+ test —promptForPassword,promptForNewPasswordwith injectableinputStreamfor tests
3. Command modules (the library surface the bins call into)
- 3.1
src/commands/keys/keys.ts+.md+.test.ts— port upstreamcommands/keys/keys.ts(628 LOC). Re-point@suaveplan/keyscalls to@suaveplan/crypto+@suaveplan/crypto-keys. Functions:createRootKeysCommand,createServerKeysCommand,rollServerKeysCommand,createRootKeysChainCommand,createServerKeysChainCommand,rollServerKeysChainCommand,verifyKeyChainCommand,viewKeysCommand,viewVaultCommand,viewPublicKeyFileCommand,viewChainPublicCommand - 3.2
src/commands/files/files.ts+.md+.test.ts—prepareFileCommand,validateFileCommand,getFileStatsCommand,validatePacketCommand - 3.3
src/commands/files/serve-file.ts+.md+.test.ts—serveFileCommand - 3.4
src/commands/license/license.ts+.md+.test.ts—licenseCommandwithgenerate/validate/parse/revokesub-commands wrapping@suaveplan/licenseLicenseManager
4. Bin entry points (one .ts per bin; thin wrappers calling commands)
- 4.1
src/bin/index.ts—suaveplandispatcher with all 17 sub-commands lazy-imported - 4.2
src/bin/create-root-keys.ts,create-root-keys-chain.ts,create-server-keys.ts,create-server-keys-chain.ts,roll-server-keys.ts,roll-server-keys-chain.ts,verify-key-chain.ts - 4.3
src/bin/view-keys.ts,view-vault.ts,view-public-key-file.ts,view-chain-public.ts - 4.4
src/bin/prepare-file.ts,serve-file.ts,validate-file.ts,get-file-stats.ts,validate-packet.ts - 4.5
src/bin/license.ts - 4.6
src/bin/index.test.ts— asserts every bin parses--help
5. Tests
- 5.1 Co-located
*.test.tscovers every scenario in the spec delta - 5.2
src/server-keys.spec-conformance.test.ts— pins (a) everySERVER_KEYS_*code thrown, (b) Zod boundary wired, (c) OTel instruments fire, (d)expectTypeOfon every exported function signature - 5.3
tests/integration/prepare-serve-roundtrip.test.ts— real temp dir, realstorage-file, real packer, real crypto — full prepare → serve byte-identical reconstruction - 5.4
tests/integration/end-to-end-chain.test.ts— realcreate-root→create-server→roll-server→verify-chainhappy path + tamper-detection - 5.5
tests/integration/license-bin.test.ts— realgenerate→validate→revokeagainst a real server vault - 5.6
tests/property.test.ts— fast-check chain round-trip + packet manifest round-trip - 5.7
tests/dep-graph.test.ts— subpath exports, sibling.md, noexport *, dep allowlist - 5.8 Every
it(...)has{ timeout: 5000 }(or 30000 for integration tests) - 5.9 All tests import runner from
@suaveplan/testing/runner
6. Documentation
- 6.1 Sibling
.mdfor every implementation.ts(≥200 words, basic + advanced examples, full API reference) - 6.2
README.md— package description, install, all 18 bins listed under## Commands, programmatic-API quick-start, Modules section linking every.md
7. Gates (run in order; stop on first red)
- 7.1
bunx turbo lint typecheck test --filter=@suaveplan/server-keys— green - 7.2
bunx turbo test:coverage --filter=@suaveplan/server-keys— 100/100/100/100 - 7.3
bun scripts/openspec-conformance.ts @suaveplan/server-keys— exit 0 - 7.4
bunx turbo build --filter=@suaveplan/server-keys— green - 7.5 Banned-pattern scan (0 hits):
grep -rn "@deprecated\|TODO\|FIXME\|ts-ignore\|ts-expect-error\|\.skip\|\.only\|\bany\b\|console\.log\|biome-ignore" packages/security/server-keys/src/ --include="*.ts"(false-positiveanyin JSDoc prose is OK) - 7.6 No
export *in feature barrels (grep gate) - 7.7 No direct
vitest/bun:testimports (grep gate)
8. Archive
- 8.1 Fold
specs/server-keys/spec.md→openspec/specs/server-keys/spec.md - 8.2 Move
openspec/changes/enterprise-server-keys/→openspec/archive/2026-05-17-enterprise-server-keys/ - 8.3 Refresh MANIFEST (
bun scripts/folder-reorg/generate-manifest.ts) - 8.4 Update root
STATUS.md—@suaveplan/server-keys–→✅