bullet: integrated work for human review #30

Merged
EduarD3V merged 24 commits from bullet-develop into main 2026-10-14 18:20:01 +02:00
Owner

Rolling PR. All bullet work lands on bullet-develop via per-issue PRs (auto-merged after review + gates). Merge this single PR into main when satisfied.

Automated by bullet: implemented → reviewed (independent model) → gates green → auto-merged into bullet-develop. Trunk is human territory; this PR is the one button the human presses.

**Rolling PR.** All bullet work lands on `bullet-develop` via per-issue PRs (auto-merged after review + gates). Merge this single PR into `main` when satisfied. Automated by bullet: implemented → reviewed (independent model) → gates green → auto-merged into bullet-develop. Trunk is human territory; this PR is the one button the human presses.
Fills in the half of the slice the design study promises but did not yet have:
vitest coverage over the input jail, the keystore, the three tools and the
audit trail, plus an end-to-end check that signs through a real MCP client and
lets `openssl cms -verify` accept the result.

- test/: input (path escape, size cap, exactly-one-source), config, certstore
  (wrong PIN, missing configuration, id separator) and tools (sign → verify,
  tampering, unsupported formats, audit). PKCS#12 containers are generated with
  openssl at test time, so no key material is committed.
- scripts/e2e.mjs: spawns the built server over the official SDK client, signs,
  verifies with openssl, rejects a tampered document, checks the error surface
  and that no response carries key material.
- verify takes `artifact_b64`/`path` (it was `file_b64`, which the design doc
  did not match), and the chain is built against AUTOFIRME_MCP_TRUSTED_ROOTS
  when the operator sets it — agent-supplied anchors would make the chain check
  report whatever the caller wanted.
- build: drop the duplicate shebang (esbuild keeps the source's) and stop
  tracking dist/, which is build output.
Refs #28
Conflict: #29's new files were added under web/src/lib/ while #26 flattened
web/ to the repo root. Pure path-location conflict, no content conflicts —
took the issue branch content at src/lib/... for all six new files and the
six rename-mapped edits (develop side had not touched them since the base).

Gates: .bullet/bullet.yaml gates list is empty (#26 dropped the decompiled
gates); git diff --check clean, pnpm test 115/115, pnpm build ok,
svelte-check 0 errors.
EduarD3V force-pushed bullet-develop from 34341882a4 to a5c609a265 2026-10-14 18:08:07 +02:00 Compare
Brings the shadcn-svelte redesign (2/3 drop zone + 1/3 sticky actions panel,
primitives, dark mode via CSS vars) onto the restructured root layout.

Conflicts resolved:
- issue #26 moved web/ to the repo root, so the branch's new ui/ primitives and
  components.json/utils.ts landed at src/lib/components/ui/ and src/lib/utils.ts:
  kept at the new paths, untouched content.
- CertPicker.svelte: took the shadcn field markup, kept #29's `chain`/`vault`
  props (the branch still called the chain `certs`).
- BatchQueue.svelte: took the shadcn imports and badge/tooltip template, kept
  #29's `onsigned` hook and the `DocumentStatus` import.
- App.svelte: kept the redesigned shell, header, sign grid and verify panel, and
  restored #29's wiring the auto-merge dropped (`vault`, `keepSignatures`,
  `onsigned`, saveError notice, DownloadsDialog) plus #5's `chain` prop.
- primitives.test.ts: passes the merged CertPicker its `chain`/`vault` props.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
EduarD3V/AutoFirme!30
No description provided.