feat!: neutral built-in templates; private templates per tenant #27
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/t_f3a1cca2-audit"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The public repository and image now carry only neutral example templates; branded and personal templates move to a private repository and are served per tenant.
What changes
letter: a business letter with a window-envelope address block;documentation: title page, contents, numbered sections, code blocks, callouts and tables;invoice: a data template with line items, tax grouped by rate, and totals in exact decimal arithmetic. Each line is rounded to cents before summing, so the printed rows always add up.TYPST_MCP_PRIVATE_TEMPLATE_DIR, which only the tenants inTYPST_MCP_PRIVATE_TEMPLATE_TENANTScan use.availablelist, over both REST and MCP.private, never the name./api/v1/templates/{name}) instead of the raw path, so a private template's name never reaches the logs. Paths no route matches log as<unmatched>.BREAKING
hanso,ksc,lennoandfreudenbergare no longer built in. Earlier history and the tags up to v0.2.1 are left unchanged.Verification
cargo fmt --check,cargo clippy -D warningsandcargo test --all-features --lockedall pass: 211 unit tests plus the http, mcp, sandbox and templates suites. Fonts are verified (68 files).letter, rendered through a real MCP client on the production renderer, is byte-identical to the local render.Deployment of the private template mount is tracked separately: credentials and rollout are handled on the operations card.
🤖 Generated with Claude Code
https://claude.ai/code/session_014Tow3aw74AFPQwy1Smuqdo
The access log recorded the raw request path, so a request for /api/v1/templates/<name> wrote a private template's name into the log, for its own tenant as well as anyone probing. It now records the matched route pattern (`/api/v1/templates/{name}`), and `<unmatched>` for a path no route claims; a unit test captures the log and fails if a template name reaches it. The private-template test now also covers render overrides naming a private template, anonymous schema and render (401), the rendered document (the owner's key reads it; another tenant's key and no key do not) and signed links (the owner can mint one; another tenant cannot). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014Tow3aw74AFPQwy1Smuqdo