Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
1a26565
fix(sdk): reach the escrow the contract serves, through the generated…
justin13888 Sep 2, 2026
1dff9d6
feat(core): own still decode and derivatives in capsule-core::media
justin13888 Sep 2, 2026
c67292a
feat(core): wire the LQIP producer and thumbnails into signed import
justin13888 Sep 2, 2026
49d2084
fix(sdk): classify escrow failures by what they are, and assert the r…
justin13888 Sep 2, 2026
247a4f0
feat(ffi): export LQIP placeholder decode to the browser and native apps
justin13888 Sep 2, 2026
1dacc07
docs: record what the media pipeline ships and what it still owes
justin13888 Sep 2, 2026
16fb5f5
feat(sdk): retry a 401 once on the typed REST path (S-D17)
justin13888 Sep 2, 2026
72e5921
fix(core): widen the downscale's integer arithmetic past 32-bit overflow
justin13888 Sep 2, 2026
9143e74
feat(sdk): a client for the album-upgrade proposal
justin13888 Sep 2, 2026
17f17f6
docs(sdk): the crate docs and the two slice rows say what the tree holds
justin13888 Sep 2, 2026
fe1e3c9
fix(core): encode the thumbnail tier as JXL; harden the still pipeline
justin13888 Sep 2, 2026
4918c7c
docs: record the JXL thumbnail tier and why WebP is not available
justin13888 Sep 2, 2026
4f8b8bd
docs(core): describe the rustdoc link asymmetry without guessing its …
justin13888 Sep 2, 2026
7c71817
fix(sdk): stop minting a catalog code, and pin the auth/transport split
justin13888 Sep 2, 2026
732967f
Merge branch 'chore/freeze-capsule-core-api-399' into fix/sdk-escrow-…
justin13888 Sep 2, 2026
15572e3
fix(core)!: encrypt derivative bytes before they cross the network
justin13888 Sep 2, 2026
0e481d6
refactor(core): group prepare_still's file inputs into StillSource
justin13888 Sep 2, 2026
de756e9
fix(core): keep an encoder refusal from costing the original, and wid…
justin13888 Sep 2, 2026
61ce9f6
docs(core): keep derivative_format's doc links resolvable without the…
justin13888 Sep 2, 2026
5400011
docs(wasm): stop decodeLqip's public doc linking a private constant
justin13888 Sep 2, 2026
ebad42c
fix(core): gate the guarded re-export on native, its only caller's fe…
justin13888 Sep 2, 2026
fc7a6d1
fix(core): restore lifecycle::upload's test module declaration
justin13888 Sep 2, 2026
5a48685
fix(core): refuse a reused derivative nonce prefix, and stop two panics
justin13888 Sep 2, 2026
42d21ee
docs(core): say which failures are Sign and which are Encode
justin13888 Sep 2, 2026
a31fb4f
Merge branch 'fix/protocol-headers-every-route-404' into test/e2e-cas…
justin13888 Sep 5, 2026
61f54bc
Merge branch 'fix/sdk-escrow-route-and-401-retry-408' into test/e2e-c…
justin13888 Sep 5, 2026
0cb2ae1
Merge branch 'fix/protocol-headers-every-route-404' into test/e2e-cas…
justin13888 Sep 5, 2026
6b91fbc
Merge branch 'feat/media-rawshift-still-decode-410' into test/e2e-cas…
justin13888 Sep 5, 2026
f3d0bad
test(e2e): add the capsule-e2e crate with cases 1, 7, 8, 9 and 12
justin13888 Sep 5, 2026
f3781c9
test(e2e): land cases 2, 3, 6 and 13
justin13888 Sep 6, 2026
1417667
ci: run the rust gate when capsule-e2e changes
justin13888 Sep 6, 2026
1043e5c
docs(slices): record the landed E2E cases and what still blocks them
justin13888 Sep 6, 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
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ jobs:
- 'capsule-wire/**'
- 'capsule-i18n/**'
- 'capsule-cli/**'
- 'capsule-e2e/**'
- 'capsule-core/**'
- 'capsule-sdk/**'
- 'xtask/**'
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@

- The public server surface is Kynos REST/OpenAPI only. Do not reintroduce Salvo, GraphQL, or gRPC. The served document is **OpenAPI 3.2**: enabling Kynos's `openapi32` feature does not by itself produce one — `capsule-server` pins it with `openapi_as(SpecVersion::V3_2)`. Never emit or commit a 3.1 or 3.0 contract.
- Generate clients with Spargen from the checked-in Kynos OpenAPI contract. Do not use Progenitor. Everything that parses or serializes is generated — every body, every typed parameter, and the byte-serving endpoints. Only *orchestration over* generated calls is hand-written, and the resumable upload state machine (`S-D1`) is the whole of it; do not hand-write a second parser.
- Rawshift is the intended owner of media decoding, metadata extraction, and derivative generation, consumed through `capsule-core::media` once Rawshift stabilizes. Neither exists today: Rawshift is a pinned submodule and not a workspace dependency, and `capsule-core::media` has no body to write until it is one — so nothing in Capsule decodes media right now. Capsule imports **Chromahash 0.7.1** directly, never through Rawshift, and LQIP encode/decode lives in its own `capsule-core::lqip` module (slice `S-B14`) so one implementation serves the import pipeline, the FFI, and `capsule-wasm`. **ThumbHash is retired**: neither the `thumbhash` crate nor the npm `thumbhash` package may be reintroduced. Contract: [Thumbnails — LQIP](capsule-docs/src/content/docs/design/thumbnails.md#lqip).
- Rawshift owns media decoding, metadata extraction, and derivative generation, consumed through `capsule-core::media`, which now exists and is wired: `rawshift-image` **0.1.1 from crates.io** — a registry dependency, never the pinned submodule — behind the `media` feature that `native` implies, covering still detection, decode, EXIF orientation, metadata normalisation and the JXL thumbnail tier, with every enabled codec pure Rust (no C links, so the mobile cross-builds stay clean), and absent from the `wasm32-unknown-unknown` sealing build. Every format with no codec in the build is a typed `media::MediaError::UnsupportedFormat` or a recorded per-format deferral, never a silent gap: HEIC/AVIF/RAW/WebP decode, lossy-JXL and AVIF encode, the preview tier, and all video derivatives stay deferred behind the system library, assembler, or (for WebP) the upstream aarch64 fix each needs. Capsule imports **Chromahash 0.7.1** directly, never through Rawshift, and LQIP encode/decode lives in its own `capsule-core::lqip` module (slice `S-B14`) so one implementation serves the import pipeline, the FFI, and `capsule-wasm`. **ThumbHash is retired**: neither the `thumbhash` crate nor the npm `thumbhash` package may be reintroduced. Contract: [Thumbnails — LQIP](capsule-docs/src/content/docs/design/thumbnails.md#lqip).
- Blob storage and resumable encrypted upload remain Capsule-owned behind narrow, arbitrary-backend ports. Do not add `object_store` or generic CAS/transfer crates without revisiting the security contract.
- Keep authentication state and upload-session state as separate Capsule ports with PostgreSQL, `redis-rs`, and in-memory adapters. Do not introduce a generic TTL/CAS abstraction.
- `legacy-review/` is non-buildable reference material. Restore code only after defining its contract and automated tests against the decisions above.
Loading
Loading