Files
LocalAI/scripts/addons/suites.json
T
mudler-agentandEttore Di Giacinto 7904b3d0ab feat(addons): declare typed host capabilities (#13034)
* feat(addons): model execution status observations

Keep observation lifetimes explicit before runtime integration. The pure
reducer rejects retries and stale replies using exact binding identity.

Cover all eleven trace families, the complete transition matrix and
bounded histories with safety and liveness checks.

Assisted-by: nib:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(addons): visualize execution status traces

Generate a self-contained viewer from the real reducer and shared traces.
Check independent expectations, coverage and bounded invariants before
exporting data. Detect stale artifacts and nondeterministic generation
without maintaining a second reducer in JavaScript.

Assisted-by: nib:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(addons): honor the viewer artifact root

Keep default viewer output under SDD_LOCAL_ROOT when configured.\nLet go generate use the same default without forcing a source artifact.\nRetain the portable fallback and explicit output and check semantics.

Assisted-by: nib:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(addons): add typed extension contracts

Validate optional home commands, execution bindings and requested host
operations without changing manifest versions or granting authority.
Decode bounded execution status payloads conservatively and document
strict staging compatibility for older hosts.

Assisted-by: nib:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(addons): reject noncanonical extension keys

Reject case aliases before typed decoding can override canonical fields
or bypass presence checks. Keep locale maps outside exact-key checks.

Add regression coverage for status, declaration objects, and nested
entries. All status errors return unknown readiness and isolation.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(addons): reject root enums for status tools

Status tools must accept the empty object. The supported schema enums
contain only strings, so a root enum excludes every object.

Reject root enums only for execution status bindings. Cover incompatible
root constraints and optional properties without changing shared validation.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(addons): project typed home commands

Resolve declared home destinations and display metadata in the installed
Apps view. Pin packaged command icons to immutable asset URLs.

Cover strict declaration transport, immutable receipts, exact health echo,
and process restart. Keep legacy packages and disabled installed intent.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(addons): preserve typed lifecycle declarations

Copy execution and host-operation declarations from installed receipts.
The existing capability completeness test exposes the missing fields.

Exercise real staged Manager upgrades, activation rollback and recovery.
Check installed Apps metadata through pinned mTLS frontends for each actor.
Verify mutation isolation and name receipt replay coverage accurately.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(addons): stabilize fixture archive digests

Map iteration changes tar entry order between identical publishes.
Sort fixture filenames so unchanged packages retain their digest.

Check repeated publish bytes, digests and lexical archive entry order
with and without a manifest transform. Register the regression case.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(addons): resolve explicit host policy grants

Load strict administrator policy files once before application startup.
Honor explicit empty overrides without reading ignored policy files.
Copy programmatic and manager grants to isolate startup authority.

Keep the legacy CLI fallback until the official deployment policy ships.
The generic resolver already defaults to empty grants.

Verify config, CLI, hostops and execution-status checks with GOMAXPROCS=2,
-p=2 and -ldflags="-s -w" to fit the available build disk.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(addons): select explicit deployment grants

Move official host grants out of the generic executable into reviewed
host deployment policy. Stock Docker explicitly selects the shipped file;
unconfigured binaries and nil or empty programmatic grants grant nothing.

Document the standalone upgrade break and deliberate operator selection.
Do not infer consent from installed addons or merge explicit overrides.
Guard policy packaging and generic configuration boundaries with tests.

Verify executionstatus, viewer -check, config, CLI, packaging and root
architecture tests with auth, GOMAXPROCS=2 and bounded build parallelism.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(addons): gate activation on required host ops

Refuse unmet required requests before package publication or runtime
withdrawal. Keep installed intent unavailable when startup grants change.
Optional requests permit degraded operation and never create authority.

Carry bounded admin diagnostics through Apps and the owner carrier.
Keep startup policy immutable and broker authorization authoritative.

Verify executionstatus, viewer -check, lifecycle, packages, updates,
hostops, Apps and gateway offline with auth and bounded parallelism.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* test(addons): guard host operation registry parity

Compare startup admission names against real builtin registrations so
registry drift cannot silently change request satisfaction.

Cover dynamic progress and stop operations and connector inbound.
Reject missing, extra, duplicate and case-changed names with negative
controls. Record both regression cases in the suite inventory.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(addons): fence status observation effects

Keep observation ownership in admitted runtime operations. Deny all
correlated callbacks before dispatch, including inbound-class callbacks.
Reject status outputs before callers can open or adopt artifact handles.

Retain bounded denial correlations until the runtime endpoint closes so
late callbacks cannot recover ordinary authority. Preserve independent
ordinary operations and document the dedicated read API for T9.

Verify the status model, viewer, and race-enabled gateway, hostops and
runtime suites with the pinned offline environment.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(addons): drain callbacks before retirement

Server.Close does not wait for active callback requests. Clearing retired
observation correlations first can restore inbound authority.

Stop endpoint admission before closing connections. Drain admitted requests
before releasing correlations, and refuse dispatch after Stop. Keep locks
out of handlers and cleanup waits so cancellation cannot deadlock teardown.

Cover pending inbound callbacks, decoded authorization paused across Stop,
and handlers that ignore cancellation. Preserve ordinary authorized work
on other endpoints. Document delayed reclamation under the existing bound.

Verify the status model and viewer, then race-test gateway, hostops,
runtime, the model and root architecture checks with auth enabled.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(addons): bind owner status to exact clients

Add authenticated, versioned status reads over the owner carrier.
Revalidate actor permissions and provider selection before dispatch and
before returning an observation. Keep status separate from authority.

Admit the captured client against its immutable identity under the
withdrawal lock. Never dispatch an old binding through a replacement.
Generate runtime operation IDs on the owner and retain the T8 effect fence.

Cover forged identities, strict DTOs, stale replies, restart ordering,
wire discriminators, and unchanged model exclusion of uiOnly tools.
Document the T10 callback and request-shell integration requirements.

Verify the model and viewer, then race-test gateway, runtime, tools,
and the model with auth enabled.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* test(addons): compose owner status with runtime

Exercise installed addon processes through the authenticated mTLS carrier.
Keep runtime clients real while channel barriers control lookup ordering.

Reject captured clients after same-generation replacement before dispatch.
Reject completed status reads when replacement precedes owner consumption.
Prove fresh bindings succeed and record named tools and host operation IDs.

Verify the model and viewer, then race-test gateway, runtime, tools,
the model, and the protocol fixture package with auth enabled.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(studio): scope execution status observations

Run the execution status reducer within one explicit request lifetime.
Coalesce consumers without retries and withdraw stale or canceled reads.

Keep owner admission and production lifecycle integration separate for
review before wiring the shell into requests and turns.

Assisted-by: OpenAI:ChatGPT
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(studio): isolate consumer cancellation

Consumer cancellation during validation must not withdraw a valid
observation from other consumers. Return unknown locally before shared
invalidation, while preserving parent closure and freshness failures.

Cover cancellation and deterministic deadline expiry with one-read
reducer traces and live-consumer checks.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(addons): track selection mutation epochs

Detect selection ABA at config and owner mutation boundaries. Clone
provider pins for Studio readers and share synchronized selection state
across config value copies.

Track lifecycle publication, candidate rollback and recovery transitions.
Keep reads and unchanged publications stable. These lifetime epochs do
not replace current-incarnation checks or grant execution authority.

Verify race tests for config and the add-on Manager, plus application
compilation with auth tags. Request binding remains separate work.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(addons): expose owner binding transport

Add a host-only binding API with an optional owner resolver. Forward
conversation claims over authenticated mTLS with strict versioned DTOs.
Compare full bindings during validation and deny missing resolvers.

Keep ordinary tool execution unchanged through an optional backend.
Test trusted resolver fixtures, stale bindings, denial and compatibility.
Application authority and store revisions remain a separate milestone.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(studio): fence selection snapshots with epochs

Read actor-scoped records and opaque mutation tokens under store locks.
Invalidate tokens after successful eligibility changes, including ABA.
Keep reads, rejected writes and turn history from invalidating tokens.
Clone mutable records so callers cannot bypass mutation tracking.

Support authoritative revisions only for memory-only JSON stores.
File stores lack exclusive ownership; GORM lacks persisted revisions.
Fail closed for both rather than trust frontend-local state.
Ordinary chats remain unchanged; application integration stays separate.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(studio): enforce persistent JSON ownership

Acquire lifetime sidecar locks before loading or repairing JSON data.
Enable selection revisions only under cooperating exclusive ownership.

Close drains operations before releasing ownership and rejects later use.
Clean up unpublished stores when application initialization fails.
Retain published locks through Shutdown because HTTP users may remain live.

Document coordinated upgrades and the advisory local-filesystem boundary.
Keep GORM revisions unsupported pending a separate approved design.

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Assisted-by: Codex:gpt-5

* test(application): isolate warning log capture

Run warning assertions in isolated test subprocesses. The suite leaves
background log producers running, which race with global logger changes.

Keep the parent logger unchanged and check child exits and completion
markers. Preserve pin persistence and ownership warning assertions.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(studio): resolve local owner execution bindings

Resolve execution providers from owner-held chat and agent snapshots.
Fence bindings with selection epochs, mutation tokens and live runtime
identity. Recompute every component during status authorization.

Keep named-user and SQL observations unavailable until authoritative
access and shared selection revisions can detect ABA changes.

Drain restart test producers before releasing JSON store ownership.
Register six product resolver cases in the gateway suite inventory.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(studio): bound product scopes to chat turns

Keep request-local product state alive through tool calls, checkpoints
and persistence. Give chat priming its own scope instead of seeding the
next turn with a closed observation.

Exercise one reducer read per scope across prompt and tool consumers.
Check closure of pending reads on normal completion and interruption.
Provider wiring and safety projection remain separate work.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(studio): consume typed execution providers

Replace the Sandbox-specific status heuristic with owner-bound typed reads.
Share one reducer observation across turn consumers and close it at the
outer scope boundary. Keep priming and standalone requests independent.

Sandbox exposes a separate callback-free typed read while preserving its
private Settings payload. Unknown backends never imply isolation.
Provider isolation does not prove host network-policy enforcement.

Local-owner JSON bindings are supported. Named-user and SQL bindings
remain explicitly unavailable and fail closed.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* test(application): isolate auth startup lifetime

Shutdown does not join every background producer. Auth startup tests
can therefore delete their temporary directory while a writer remains.

Run each case in a bounded child process. The parent waits for child
exit before deleting the fixture, preserving every startup assertion.
Production shutdown and JSON ownership retention remain unchanged.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(ui): resolve installed Home app commands

Project Home navigation from installed addon declarations, not product IDs.
Reserve native and skill names and suppress every colliding addon alias.

Re-read the authenticated registry before navigation and reject stale
actors, generations, immutable entries and destinations. Keep mounted
consumers polling through disabled and failed states. Abort pending reads
on actor changes and ignore replies from obsolete request epochs.

Studio declares its own alias. Preserve legacy redirects and pin migration.
Add unit coverage, localized Home copy and command lifecycle documentation.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(ui): accept resolved Home command metadata

Apps resolves inherited titles beyond the explicit manifest label cap.
Bound resolved labels to 147 Unicode characters, including secondary pages.
Keep the backend's 60-character limit for explicit manifest labels.

Match packaged icon paths to the contract's ASCII alphabet and image types.
Accept dotted names while rejecting traversal, encodings and foreign assets.

Verify 68 focused cases, 657 total cases, lint, i18n checks and the UI build.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(ui): bind safety notices to actual providers

Warn for addon host execution and unknown isolation without changing tool
permissions or built-in host consent. Reset dismissal when the admitted
binding, observation, actor or chat context changes.

Expose presentation-only status identity from the admitted request.
Keep configured network policy visible when enforcement is unverified.
Render bounded provider explanations as escaped React text.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(ui): isolate command status across sessions

Invalidate command observations when actors or authentication sessions
change, before effects can expose a previous actor’s reply.

Keep actual host execution warnings generic instead of recommending
Sandbox installation or repair. Cover both regressions with source-hook
lifecycle tests and provider notice assertions.

Assisted-by: Codex:gpt-5 [functions]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(addons): declare audited host requests

Declare actual official hostclient operations without inferring requests
from deployment grants. Keep optional settings and egress checks separate
from required workspace and job operations.

Verify all twelve manifests through strict package fixtures and assert
that requests never self-grant. Guard generic provider and Home dispatch
without banning historical routes, native Studio, or deployment policy.

Document the audited operations and unresolved named-user and SQL gaps.
Refresh Sandbox catalog metadata for its existing typed status tool.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* test(addons): wire exact extension inventories and real provider selection

Run contract, official packaging and root architecture gates through actual report inventories. Exercise two installed execution providers through the real owner resolver and distinguish callback pass-through coverage. Share strict report validation with focused-scope handling and missing/skipped artifact self-tests; document direct evidence and remaining harness limits.

Assisted-by: Codex:gpt-5

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(ui): expire registry reads on auth refresh

Bind registry authority to the actual authentication session epoch.
Same-user refresh now rejects old polls and pending Home navigation
before effect cleanup, even when permissions and metadata stay unchanged.

Exercise both races through the production registry provider harness.
Verify 59 focused tests, 669 total tests, lint, i18n, and the UI build.

Assisted-by: Codex:gpt-5 [functions]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(studio): resolve current execution selection

Use existing principal-scoped chat and agent reads for advisory status.
Revalidate current named credentials instead of requiring historical SQL
revisions. Local-owner mode also works with the existing GORM store.

Remove resolver nonces and historical revision prerequisites. Keep exact
runtime binding and existing status admission hooks. Document current-read
consistency without promising revoke-and-restore detection.

Verify the SQLite regression fails before the fix. Two separate full race
runs pass: application 262 specs (3 skips), auth 257, gateway 115, tools 91.
Cover named chat, API key and session credentials and current-state denial.

Assisted-by: Codex:gpt-5 [functions]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* refactor(addons): drop selection revision tracking

Use current selection comparisons for advisory status instead of mutation
history. Keep actor, credential and conversation identity explicit in the
model. Hash current inputs at the gateway without exposing raw store data.

Remove unused epochs, revision interfaces and JSON ownership lifetimes.
Preserve current authorization, runtime identity, mutexes and atomic writes.
Document current-read semantics without historical ABA guarantees.

Verify all affected packages with the race detector and auth tag. Check
the trace viewer, prerequisite self-tests and 18 chat-command unit tests.

Assisted-by: Codex:gpt-5 [functions]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(ui): scope Apps reads and provider status

Bind Apps replies and registry ingestion to their originating auth session.
Reject late replies before effect cleanup on refresh or account switch.

Use selected-provider command DTOs in the composer instead of private
Sandbox discovery. Keep unknown isolation unknown and remove specific
add-on installation recommendations from the affected native surfaces.

Test production Apps, registry, switches and composer paths with controlled
cleanup and two arbitrary providers. Update the matching feature docs.

Assisted-by: Codex:gpt-5 [functions]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(ui): guard composer and session publication

Remove the deleted Sandbox variable from the full composer render.
Report unknown command isolation explicitly in the about card.

Bind Apps records and admin action results to their originating actor
and actual authentication epoch before cleanup can run. Reject stale
request admission and verification without changing server authorization.

Add full-component render and pending session-transition regressions.
Enable no-undef for the production composer in normal UI lint.

Assisted-by: Codex:gpt-5 [functions]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(ui): expire cancelled upgrade reconciliation

Bind cancellation reconciliation to the initiating session authority.
Discard status replies after expiry without publishing old outcomes.
Match the exact operation identity before clearing a held action.

Cover pending cancellation reads, expiry before reads, and preservation
of a newer attempt with the same action key.

Assisted-by: Codex:gpt-5 [functions]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(ui): bind background upgrades to auth lifetime

Keep background upgrade authority in AuthProvider, independent of views.
Expire pending observations before auth consumers render or logout waits.
Preserve same-session navigation and exact-operation cleanup.

Cover cancellation, completion, and verification after the origin unmounts
with actual provider transitions and the real upgrade store.
Thread captured authority through Activity retries and document expiry.

Assisted-by: Codex:gpt-5 [functions]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* refactor(addons): remove implicit sidebar pins

Start every account without implicit Studio or Talk pins. Preserve saved
user selections and durable explicit pins across reopen and frontends.

Remove startup seeding, seed metadata APIs, and first-install exceptions.
Apply equal retention to all absent IDs without dropping database tables.
Keep store initialization, cached errors, and the leader sweep unchanged.

Verify genuine RED regressions before removal. Race checks pass for all
42 pin specs, 10 focused application specs, and 10 pin endpoint specs.
Update pin documentation; renamed specs have no exact inventory entries.

Assisted-by: Codex:gpt-5 [functions]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(addons): declare typed model destinations

Let installed addons own model launch destinations without teaching core
about addon identities or private routes. Keep native chat and completion
outside the declaration vocabulary.

Validate strict keys, unique capabilities, declared pages and SDK route
bounds. Carry cloned typed metadata through Apps using the shared
contract type, and add owning Studio, Talk, Face and Voice declarations.

Verify strict contract RED before implementation, then 1276 passing
specs across contract, Apps, packages, runtime, protocol, config and manager.
Verify 178 packaging and architecture specs and exact carrier inventories.
Frontend dispatch and route cleanup remain a separate milestone.

Assisted-by: Codex:gpt-5 [functions]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* refactor(ui): resolve declared model launch actions

Resolve installed model actions through the shared addon registry. Keep
native chat and completion launches, and never promote absent providers.

Refresh actor-filtered Apps before navigation and reject stale authority,
provider metadata, generation, immutable entry and destination claims.
Use named menu choices for collisions without loading addon modules.

Remove unreleased addon-specific redirects and migrate browser fixtures
to canonical declared pages. Preserve native chat handoff and addon-local
navigation adapters. Update user documentation and historical plans.

Verify three production UI consumers fail against their previous code,
then pass all 13 mocked-HTTP browser regressions. Verify 696 host unit
cases, full quiet lint, targeted no-undef, locales, inline styles and build.
Full backend/browser integration remains outside these mocked-HTTP checks.

Assisted-by: Codex:gpt-5 [functions]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(addons): validate Ginkgo hooks before focus

Ginkgo emits null container hierarchies for suite hooks. Require hooks\nto pass before applying focus only to It cases. Normalize null\nhierarchies without weakening exact required-case comparisons.\n\nRun reporter regressions in prerequisites. Register the declared uiOnly\ntool case and remove an update fixture case excluded by the existing\nmanager focus. Both inventories match the complete CI case output.\n\nVerify 12 reporter regressions, 39 prerequisite cases, three existing\nreports, and fresh runtime, tools and focused update manager suites.

Assisted-by: Codex:gpt-5 [functions]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(addons): restore Go CI contract checks

Align route fixtures with explicit pins and declared network controls.
Keep network enforcement unknown instead of inferring it from isolation.

Propagate viewer output errors and select output paths with CLI arguments.
Check test writes and use Ginkgo assertions without copying atomic state.
Register the three migrated binding cases in the exact suite inventory.

Document two narrow security false positives for administrator file access
and symbolic credentials in reducer traces. Focused race tests pass.
The available golangci-lint reports zero issues in affected packages.

Assisted-by: OpenAI ChatGPT [functions]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(ui): align browser coverage with addon contracts

The generic provider refactor removes implicit install advice and private
Sandbox discovery. Update browser fixtures to use the installed command
metadata and typed execution observations without restoring those paths.
Keep command warnings, consent, disabled switches and privacy assertions.

Home now holds a live command consumer. Exercise polling shutdown on a
route without that consumer, after its lazy transition finishes. Preserve
the bounded cadence, error backoff and disable-stop assertions.

Restore the remembered-voices link through the addon's compatibility
router. Cover native migrations and NotFound for removed generator aliases.

Validation: 293 affected browser cases and three native service cases pass.
The gallery command passes all 74 inventoried cases. Full UI units, quiet
lint, locale parity, production build and diff checks pass.

Assisted-by: OpenAI ChatGPT [functions]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix(addons): bind status to owner provider policy

Resolve typed status with the same current owner pins as execution.
Fail closed on owner policy outages and fingerprint authoritative pins.

Exercise CAS updates, conflicts, stale bindings, and policy outages.
Retain host settings when the named-account fixture replaces its gateway.
Refresh exact gateway and Apps inventories from passing reports.

Validation: the new regression fails before the fix. All 16 focused
binding and policy cases pass. Gateway passes 361 exact cases and Apps
passes 265 exact cases across their configured package reports.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* refactor(addons): share qualified tool identities

Use one formatter and contract-component parser for add-on identities.
Keep callable names bounded to 64 characters while recognizing long
unavailable stand-ins without granting dispatch authority.

Validate selected execution names and their provider ID at the owner
binding boundary. The real adapter already emits canonical identities.
Update exact importer and case inventories from passing reports.

Migrate the binding backend test to Ginkgo and check shutdown errors
reported by lint in the affected packages.

Validation: behavioral RED proves malformed stand-in acceptance and
plain selected-name acceptance. Affected full race suites pass: tools
94 and Studio 638, with zero skips. Application passes 275 of 278;
three existing PostgreSQL cases skip without their configured URL. All 12 owner-binding cases
pass and match the exact inventory. Scoped golangci-lint reports no issues.

Assisted-by: Codex:gpt-5 golangci-lint
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* refactor(addons): share execution declarations

Share pure declaration predicates across manifest validation, gateway
observations, and owner bindings. Keep authorization and exact-runtime
admission checks local. Reuse the strict manifest schema validator so
raw status definitions fail closed without changing manifest acceptance.

Share the workspace-operation prefix scan without changing grant sources.
Add declaration parity and workspace-prefix tables and update exact
inventories from passing reports.

Validation: two new gateway cases fail before the fix; all 14 pass after.
Race tests pass: contract 245, gateway 136, tools 94, and focused
application binding/workspace cases 22. Scoped golangci-lint: 0 issues.

Assisted-by: Codex:gpt-5 golangci-lint
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* test(addons): retain document skill cases

Match the contract inventory to the passing report after rebasing.\nKeep the new document-provider case and updated reserved-name cases.

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

Assisted-by: OpenAI:gpt-6.1-sol

* test(addons): follow owner-managed upgrades

Accepted upgrades belong to the owner and cannot be cancelled by UI.
Exercise observer expiry during reads, completion and verification.
Supply the real upgrade store to source-executed auth harnesses so
logout reaches its synchronous authority invalidation.

Match whole-package inventories to fresh Manager and gateway reports.

Assisted-by: Codex:gpt-5
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
2026-11-02 23:50:40 +00:00

6329 lines
421 KiB
JSON

{
"prerequisites": {
"kind": "shell",
"commands": [
[
"sh",
"scripts/addons/prerequisites_test.sh"
]
],
"cases": [
"missing-go",
"old-go",
"future-go",
"old-node",
"wrong-node",
"wrong-protoc",
"absent-generated",
"empty-name",
"future-suite",
"empty-selection",
"failed-child",
"failed-case-named",
"failed-tail-kept",
"zero-tests",
"skipped-tests",
"exact-tag-pin",
"wrong-tag-sum",
"ginkgo-empty",
"ginkgo-skipped",
"ginkgo-missing",
"ginkgo-failed-spec-named",
"ginkgo-failure-message",
"browser-setup-failure",
"configured-browser-missing",
"configured-browser-setup",
"contracts-empty",
"contracts-skipped",
"gateway-missing-report",
"gateway-skipped-report",
"ui-report-failed",
"ui-report-skipped",
"ui-report-flaky",
"ui-report-empty",
"ui-report-missing",
"leak-ignores-command-line",
"leak-finds-working-directory",
"ginkgo-inventory-missing",
"ginkgo-artifact-missing",
"ginkgo-reporter-regressions"
],
"readiness": {
"ginkgo": {
"command": [
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"<temporary SQLite probe>",
"-ginkgo.json-report=<unique report>"
],
"cases": [
"sqlite transaction"
]
},
"commands": [
[
"sh",
"scripts/addons/prepare.sh",
"--check"
],
[
"tests/e2e-ui/ui-test-server",
"--mock-backend=<absolute mock-backend>",
"--port=<isolated port>"
],
[
"core/http/react-ui/node_modules/.bin/playwright",
"--version"
],
[
"node",
"--input-type=module",
"-e",
"<browser readiness probe>",
"<healthy server URL>"
]
],
"cases": [
"toolchain",
"server health",
"browser"
]
}
},
"contracts": {
"kind": "ginkgo",
"commands": [
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./pkg/addons/contract",
"-ginkgo.json-report=../../../.cache/addons/logs/contracts.json"
],
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./pkg/addons/packaging",
"-ginkgo.json-report=../../../.cache/addons/logs/contracts-packaging.json"
],
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
".",
"-ginkgo.json-report=.cache/addons/logs/contracts-architecture.json"
]
],
"cases": [
"uses canonical version one wire fixtures",
"rejects incomplete expired or forged authority shapes",
"rejects unknown and oversized wire payloads",
"validates finite defaults overrides and cross field bounds",
"validates preview receipt states and output descriptions",
"validates every enum pair and normalizes nonavailable isolation",
"missing isolation",
"missing readiness",
"bad readiness",
"bad isolation",
"duplicate",
"unknown field",
"outputs",
"trailing",
"null",
"null explanation",
"empty explanation",
"oversized explanation",
"markup",
"control",
"direction",
"oversized payload",
"bridges validation into the existing pure model boundary",
"is valid when the add-on says it acts",
"is refused when the add-on does not say it acts",
"leaves the other kinds alone",
"accepts a pull kind with a declared page",
"accepts drafts and a preview interval within the bounds",
"lets an add-on declare nothing but the connector",
"no kind",
"a bad kind id",
"a repeated kind",
"markup in the title",
"an unknown delivery",
"a page the UI does not declare",
"a preview interval too short",
"a preview interval too long",
"a plain name",
"a path keeps its last element",
"a Windows path",
"control characters and quotes",
"dots only",
"empty",
"a hidden name loses its leading dot",
"a long name keeps its extension",
"accepts a read tool that names no resource",
"still accepts a read tool that requires its resource",
"refuses a read tool that offers the resource without requiring it",
"refuses a write or schema tool without a resource",
"still accepts a write or schema tool that requires its resource",
"keeps a create tool free of the resource argument",
"accepts an action tool that names no resource, and refuses one that offers it without requiring it",
"keeps the argument names of identity and approval out of an action tool",
"is a valid scope for an action request",
"is refused for any other request, and an action request refuses any other scope",
"has a long timeout of its own that is not part of the limits an add-on receives",
"round-trip",
"unknown field",
"duplicate key",
"trailing",
"not an object",
"empty",
"refuses an oversized body",
"finetune.get",
"quantize.start",
"finetune.a.b",
"empty",
"no dot",
"leading dot",
"uppercase",
"trailing space",
"slash",
"trailing newline",
"hyphen",
"empty verb",
"too long",
"has the same IDs as the registry of the React UI",
"parses skillDefinitions from the manifest",
"accepts the add-on id and names that start with it",
"refuses a bad name, naming it",
"refuses a name declared twice",
"refuses more than 16 skills",
"refuses a plain name that does not start with the add-on id",
"accepts a skill that replaces a replaceable built-in skill by its name",
"refuses shadows that does not repeat the name, or names a skill that may not be replaced",
"keeps the replaceable skills and tools apart, so one pin map holds both",
"cuts a long name on a character boundary",
"Explanation markup",
"Readiness override",
"uppercase enums",
"Explanation control",
"Explanation oversized",
"benign explanation alias",
"isolation override",
"Alias empty",
"Label null",
"ID override",
"Page variant",
"Icon variant",
"provider Tools",
"provider StatusTool",
"provider mixed duplicate",
"operation Required",
"operation Optional",
"operation mixed duplicate",
"provider entry variant",
"provider entry mixed duplicate",
"operations entry variant",
"operations entry mixed duplicate",
"commands entry variant",
"commands entry mixed duplicate",
"preserves arbitrary valid locale keys at the localized map boundary",
"accepts known controls and refuses an unknown or repeated one",
"reads ui.controls from a manifest and refuses an unknown field in it",
"draws the network policy only for an add-on granted egress that runs bash",
"serves a second add-on with the same controls, by its grant and not by its name",
"draws the tool providers for an add-on that replaces any built-in tool",
"accepts a read tool without a resource",
"refuses one that works on a resource or is not a read: the page has no resource to name",
"is resourceless like any read without a resource",
"refuses an add-on that needs a newer SDK than the host provides, and says so",
"accepts a range that contains the host SDK",
"accepts a range that spans the host SDK",
"refuses an add-on built for SDK 1 only on a version 2 host",
"keeps the generic message for a range that is malformed",
"accepts independent service tool page and chat capabilities",
"requires the existence tool of an addon whose resources are created or deleted",
"rejects invalid namespace IDs and executable paths",
"rejects add-on IDs that the host serves as a route segment",
"rejects invalid versions ranges and capabilities",
"rejects unknown duplicate trailing and oversized manifest JSON",
"rejects incompatible host API protocol SDK data and platform fixtures",
"validates UI only when declared and rejects inconsistent contributions",
"accepts the apps surface fields and keeps headless manifests valid",
"rejects unknown and reserved launch modes",
"rejects remote data absolute and traversing icon paths",
"requires the main page to be one of the declared pages",
"bounds localized titles and descriptions and rejects markup",
"reserves the segments of the navigation routes",
"bash is replaceable",
"web_search and web_fetch are replaceable",
"a file tool is not",
"an unknown name is not",
"a page-only tool cannot shadow",
"two tools cannot shadow one name",
"a shadow of bash must be an action tool",
"a shadow of web_fetch must be a read tool",
"a shadow of bash must declare command",
"a shadow keeps the type of a required property",
"a shadow requires no property the built-in does not",
"a shadow names no resource",
"extra optional properties are allowed",
"lists only the shadows that pass the check",
"keeps the file tools off the replaceable list",
"preserves all three declarations through manifest and capability echo",
"keeps old manifests free of extension keys",
"bounds commands and operation requests at their declared limits",
"accepts localized string labels, packaged icons and explicit non-navigation pages",
"root enum excludes objects",
"root required property excludes empty objects",
"root type excludes objects",
"optional constrained properties accept empty objects",
"keywords for other types do not constrain objects",
"non bash execution tool",
"empty optional alias",
"null optional alias",
"empty optional page",
"null optional label",
"empty optional icon",
"unknown command key",
"duplicate command key",
"invalid alias",
"missing id",
"duplicate id",
"undeclared page",
"no default destination",
"foreign icon",
"long label",
"bad locale",
"markup label",
"duplicate locale",
"status schema open",
"status wrong kind",
"empty provider",
"unknown execution tool",
"duplicate execution binding",
"same status binding",
"non UI status",
"status required input",
"status resource",
"empty requests",
"duplicate requests",
"wildcard request",
"unknown request key",
"audits actual host calls and strict package contract for face",
"audits actual host calls and strict package contract for fine-tuning",
"audits actual host calls and strict package contract for office",
"audits actual host calls and strict package contract for quantization",
"audits actual host calls and strict package contract for sandbox",
"audits actual host calls and strict package contract for slack",
"audits actual host calls and strict package contract for studio",
"audits actual host calls and strict package contract for tables",
"audits actual host calls and strict package contract for talk",
"audits actual host calls and strict package contract for telegram",
"audits actual host calls and strict package contract for voice",
"audits actual host calls and strict package contract for web",
"lists every release platform with its runner",
"lists every release platform with its runner",
"lists every release platform with its runner",
"lists every release platform with its runner",
"lists every release platform with its runner",
"lists every release platform with its runner",
"lists every release platform with its runner",
"lists every release platform with its runner",
"lists every release platform with its runner",
"lists every release platform with its runner",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"has a catalog template",
"has a catalog template",
"has a catalog template",
"has a catalog template",
"has a catalog template",
"has a catalog template",
"has a catalog template",
"has a catalog template",
"has a catalog template",
"has a catalog template",
"publishes every add-on to the one documented repository, with its id as the tag prefix",
"fails on a publishing event when an add-on has no enabled platform",
"publishes when every add-on has an enabled platform",
"gives an add-on without an enabled platform no legs on an event that publishes nothing",
"fails on a missing or malformed platform file on every event",
"joins every enabled platform leg into one verified index",
"never creates a partial index when an enabled platform has no leg",
"refuses duplicate legs, local-check legs, other versions and extra platforms",
"refuses a merged layout that lost a platform after the merge",
"renders digest-pinned entries with an explicit add-on signer identity",
"renders the development channel as mutable entries: the moving tag, no digest",
"renders the development entries of every enabled platform from the manifest, without a package",
"refuses --from-manifest for a pinned channel or together with a merged layout",
"renders an entry for every first-party add-on from its own template",
"reports the chat tools of the manifest on each entry and not the admin tools",
"caps the tool names at MaxEntryTools and keeps the full count",
"lists the built-in skills an add-on replaces",
"lists the built-in tools an add-on replaces after its tools",
"adds the tool fields to an existing index from the repository manifests, and changes nothing else",
"refuses missing inputs, backend repositories, bad channels and unknown placeholders",
"carries placeholders only: no fabricated URL, registry or namespace",
"reads a YAML list and refuses JSON, unknown fields and a second document",
"has no hard-coded add-on path",
"lists the add-ons in the validate matrix",
"gives promote an add-on matrix",
"gives publish an add-on matrix",
"takes the package legs from the plan",
"loops the plan over the same list",
"has consistent package files for face",
"has consistent package files for fine-tuning",
"has consistent package files for office",
"has consistent package files for quantization",
"has consistent package files for sandbox",
"has consistent package files for slack",
"has consistent package files for studio",
"has consistent package files for tables",
"has consistent package files for talk",
"has consistent package files for telegram",
"has consistent package files for voice",
"has consistent package files for web",
"refuses missing and backend repositories before any request",
"pushes platform digests then the index, and a retry is digest-identical",
"rejects overwriting an immutable version with different content",
"adopts published content only for the same version and commit",
"refuses reserved aliases and mismatched tags as immutable tags",
"publishes nothing from a partial or local-check layout",
"fails closed when no platform is enabled, the file is absent or empty",
"rejects enabled platforms without a native runner or check, duplicates and unknown fields",
"prints the enabled platforms with their native runners",
"ships a checked-in Tables matrix with at least one enabled platform",
"moves development forward and leaves it alone for an older commit",
"accepts a diverged branch head and refuses one commit with two contents",
"treats a force-pushed branch as the new truth for a push to the same ref",
"blocks the alias for anything but a push to the channel's own ref",
"refuses development when its commit is unreachable, even for a push",
"fails on any git error that is not a plain not-ancestor answer",
"tells an unreachable commit from a plain not-ancestor",
"moves latest only to a newer stable version",
"refuses reserved or foreign alias names and unpublished digests, leaving aliases unchanged",
"promotes a branch channel under its hashed name",
"accepts the checked-in workflow",
"rejects pull_request_target",
"rejects secrets in a pull request validation job",
"rejects id-token write outside the publishing job",
"lets only the release-index job write the contents of the repository",
"hands the guest image digest of the sandbox-image job to the package leg",
"rejects a registry login or publish in an untrusted job",
"rejects publish that does not wait for every platform leg",
"rejects publish that can run after a failed leg",
"rejects publish that does not need validate",
"rejects a package leg that does not need validate",
"rejects a validate job that cannot stop the release",
"rejects a package or promote job that runs after a failed validate",
"keeps validate unprivileged on every event",
"rejects promotion that does not wait for signing",
"rejects alias promotion before signing",
"rejects an alias command inside the publishing job",
"rejects a literal latest tag",
"rejects backend registries and backend workflows",
"rejects a signer identity that is a pattern or the backend workflow",
"rejects signing by tag or without referrers and the new bundle format",
"rejects missing serialization per channel",
"rejects publication that is shared between add-ons",
"rejects a workflow that names one add-on by path or skips an add-on in the matrix",
"rejects a plan that does not refuse an add-on without an enabled platform",
"rejects a plan that does not exit 1 for an add-on without an enabled platform on a publishing event",
"rejects a plan that treats any matrix error as no legs",
"rejects a repository rule that derives a repository for each add-on",
"rejects a publish or promote matrix that stops the other add-ons on a failure",
"rejects a publish job that downloads the layouts of other add-ons",
"rejects a promote job that does not check the digest format",
"rejects a plan that does not fail closed on missing configuration",
"rejects a checkout of the pull request head or a persisted token",
"rejects write permission at workflow level and a literal platform matrix",
"rejects a publishing job without an environment or a gate",
"does not trust the backend workflow identity in the documented verification",
"loads exactly the historical grants through the actual host loader",
"explicitly selects the shipped policy in the final Docker runtime stage",
"accepts the add-on namespace and refuses every other go-skynet repository",
"rejects a package without its entrypoint",
"rejects a declared UI whose layer or files are missing",
"rejects a package without a required runtime library",
"rejects a manifest whose platform differs from the image",
"rejects an image config or annotation of another platform",
"rejects a manifest version that differs from the release version",
"rejects another artifact type",
"rejects unexpected layers, roles and layer media types",
"rejects an unexpected file in the executable layer",
"rejects a blob whose bytes differ from its digest",
"rejects a receipt that does not match the image",
"rejects invalid extraction permissions",
"rejects a UI file that is executable or outside the declared directory",
"rejects traversal paths, links and duplicates",
"rejects a UI that bundles its own React runtime",
"rejects an icon that is not an image of its type",
"rejects an invalid platform layout marker or index",
"lays the skills of the add-on in their own layer and verifies them with the install rules",
"refuses to build when the skills folder and the manifest disagree, or a skill breaks a rule",
"builds a deterministic platform layout with executable, ui and manifest layers",
"restores the validated executable mode on extraction",
"refuses a platform that the matrix has not enabled unless it is a local check",
"refuses an invalid version, an existing layout and an empty executable",
"never publishes from a pull request, whatever the ref",
"maps master alone to development and publishes the commit tag",
"never publishes from a branch push, whatever the branch is named",
"keeps reserved names out of the branch namespace",
"separates refs that normalize to the same label",
"bounds empty, Unicode and very long branch names",
"lets a tag push prepare the immutable version and never move latest",
"promotes latest only for a published, stable, non-draft release",
"rejects unknown events and a malformed commit",
"prints the decision as key=value lines",
"keeps official addon identities out of generic CLI and config policy code",
"keeps provider and Home dispatch independent of official addon IDs",
"bounds model actions to one mapping per supported capability",
"declares only owning model actions for existing addon destinations",
"round trips declared model destinations without changing protocol or SDK",
"accepts SDK route segment and combined path boundaries",
"unknown field",
"duplicate field",
"case field",
"case page",
"case path",
"duplicate capability",
"missing page",
"undeclared page",
"unknown capability",
"native chat",
"native completion",
"aggregate LLM",
"any capability",
"noncanonical capability",
"absolute",
"URL",
"traversal",
"dot",
"encoded traversal",
"query",
"hash",
"backslash",
"empty segment",
"trailing slash",
"empty path",
"null path",
"long segment",
"too many segments",
"long combined route",
"rejects noncanonical modelActions entry keys and duplicate keys",
"wrong object",
"additional properties true",
"additional properties absent",
"required",
"enum",
"unknown schema keyword",
"malformed required",
"resource",
"admin",
"status uiOnly",
"status kind",
"action uiOnly",
"action kind",
"shadow",
"accepts empty arguments with optional property constraints",
"refuses protected or reserved plain names, whatever the add-on id",
"keeps embedded names protected or reserved without requiring a slot fallback",
"does not promise a core fallback for document provider names"
],
"report": ".cache/addons/logs/contracts.json",
"reports": [
{
"path": ".cache/addons/logs/contracts.json",
"cases": [
"a plain name",
"a path keeps its last element",
"a Windows path",
"control characters and quotes",
"dots only",
"empty",
"a hidden name loses its leading dot",
"a long name keeps its extension",
"accepts a read tool that names no resource",
"still accepts a read tool that requires its resource",
"refuses a read tool that offers the resource without requiring it",
"refuses a write or schema tool without a resource",
"still accepts a write or schema tool that requires its resource",
"keeps a create tool free of the resource argument",
"accepts an action tool that names no resource, and refuses one that offers it without requiring it",
"keeps the argument names of identity and approval out of an action tool",
"is valid when the add-on says it acts",
"is refused when the add-on does not say it acts",
"leaves the other kinds alone",
"cuts a long name on a character boundary",
"refuses an add-on that needs a newer SDK than the host provides, and says so",
"accepts a range that contains the host SDK",
"accepts a range that spans the host SDK",
"refuses an add-on built for SDK 1 only on a version 2 host",
"keeps the generic message for a range that is malformed",
"accepts independent service tool page and chat capabilities",
"requires the existence tool of an addon whose resources are created or deleted",
"rejects invalid namespace IDs and executable paths",
"rejects add-on IDs that the host serves as a route segment",
"rejects invalid versions ranges and capabilities",
"rejects unknown duplicate trailing and oversized manifest JSON",
"rejects incompatible host API protocol SDK data and platform fixtures",
"validates UI only when declared and rejects inconsistent contributions",
"accepts the apps surface fields and keeps headless manifests valid",
"rejects unknown and reserved launch modes",
"rejects remote data absolute and traversing icon paths",
"requires the main page to be one of the declared pages",
"bounds localized titles and descriptions and rejects markup",
"reserves the segments of the navigation routes",
"bounds model actions to one mapping per supported capability",
"declares only owning model actions for existing addon destinations",
"round trips declared model destinations without changing protocol or SDK",
"accepts SDK route segment and combined path boundaries",
"unknown field",
"duplicate field",
"case field",
"case page",
"case path",
"duplicate capability",
"missing page",
"undeclared page",
"unknown capability",
"native chat",
"native completion",
"aggregate LLM",
"any capability",
"noncanonical capability",
"absolute",
"URL",
"traversal",
"dot",
"encoded traversal",
"query",
"hash",
"backslash",
"empty segment",
"trailing slash",
"empty path",
"null path",
"long segment",
"too many segments",
"long combined route",
"rejects noncanonical modelActions entry keys and duplicate keys",
"validates every enum pair and normalizes nonavailable isolation",
"missing isolation",
"missing readiness",
"bad readiness",
"bad isolation",
"duplicate",
"unknown field",
"outputs",
"trailing",
"null",
"null explanation",
"empty explanation",
"oversized explanation",
"markup",
"control",
"direction",
"oversized payload",
"bridges validation into the existing pure model boundary",
"is a valid scope for an action request",
"is refused for any other request, and an action request refuses any other scope",
"has a long timeout of its own that is not part of the limits an add-on receives",
"bash is replaceable",
"web_search and web_fetch are replaceable",
"a file tool is not",
"an unknown name is not",
"a page-only tool cannot shadow",
"two tools cannot shadow one name",
"a shadow of bash must be an action tool",
"a shadow of web_fetch must be a read tool",
"a shadow of bash must declare command",
"a shadow keeps the type of a required property",
"a shadow requires no property the built-in does not",
"a shadow names no resource",
"extra optional properties are allowed",
"lists only the shadows that pass the check",
"keeps the file tools off the replaceable list",
"accepts known controls and refuses an unknown or repeated one",
"reads ui.controls from a manifest and refuses an unknown field in it",
"draws the network policy only for an add-on granted egress that runs bash",
"serves a second add-on with the same controls, by its grant and not by its name",
"draws the tool providers for an add-on that replaces any built-in tool",
"Explanation markup",
"Readiness override",
"uppercase enums",
"Explanation control",
"Explanation oversized",
"benign explanation alias",
"isolation override",
"Alias empty",
"Label null",
"ID override",
"Page variant",
"Icon variant",
"provider Tools",
"provider StatusTool",
"provider mixed duplicate",
"operation Required",
"operation Optional",
"operation mixed duplicate",
"provider entry variant",
"provider entry mixed duplicate",
"operations entry variant",
"operations entry mixed duplicate",
"commands entry variant",
"commands entry mixed duplicate",
"preserves arbitrary valid locale keys at the localized map boundary",
"parses skillDefinitions from the manifest",
"accepts the add-on id and names that start with it",
"refuses a bad name, naming it",
"refuses a name declared twice",
"refuses more than 16 skills",
"refuses a plain name that does not start with the add-on id",
"refuses protected or reserved plain names, whatever the add-on id",
"accepts a skill that replaces a replaceable built-in skill by its name",
"refuses shadows that does not repeat the name, or names a skill that may not be replaced",
"keeps embedded names protected or reserved without requiring a slot fallback",
"keeps the replaceable skills and tools apart, so one pin map holds both",
"has the same IDs as the registry of the React UI",
"accepts a read tool without a resource",
"refuses one that works on a resource or is not a read: the page has no resource to name",
"is resourceless like any read without a resource",
"uses canonical version one wire fixtures",
"rejects incomplete expired or forged authority shapes",
"rejects unknown and oversized wire payloads",
"validates finite defaults overrides and cross field bounds",
"validates preview receipt states and output descriptions",
"round-trip",
"unknown field",
"duplicate key",
"trailing",
"not an object",
"empty",
"refuses an oversized body",
"finetune.get",
"quantize.start",
"finetune.a.b",
"empty",
"no dot",
"leading dot",
"uppercase",
"trailing space",
"slash",
"trailing newline",
"hyphen",
"empty verb",
"too long",
"does not promise a core fallback for document provider names",
"wrong object",
"additional properties true",
"additional properties absent",
"required",
"enum",
"unknown schema keyword",
"malformed required",
"resource",
"admin",
"status uiOnly",
"status kind",
"action uiOnly",
"action kind",
"shadow",
"accepts empty arguments with optional property constraints",
"preserves all three declarations through manifest and capability echo",
"keeps old manifests free of extension keys",
"bounds commands and operation requests at their declared limits",
"accepts localized string labels, packaged icons and explicit non-navigation pages",
"root enum excludes objects",
"root required property excludes empty objects",
"root type excludes objects",
"optional constrained properties accept empty objects",
"keywords for other types do not constrain objects",
"non bash execution tool",
"empty optional alias",
"null optional alias",
"empty optional page",
"null optional label",
"empty optional icon",
"unknown command key",
"duplicate command key",
"invalid alias",
"missing id",
"duplicate id",
"undeclared page",
"no default destination",
"foreign icon",
"long label",
"bad locale",
"markup label",
"duplicate locale",
"status schema open",
"status wrong kind",
"empty provider",
"unknown execution tool",
"duplicate execution binding",
"same status binding",
"non UI status",
"status required input",
"status resource",
"empty requests",
"duplicate requests",
"wildcard request",
"unknown request key",
"accepts a pull kind with a declared page",
"accepts drafts and a preview interval within the bounds",
"lets an add-on declare nothing but the connector",
"no kind",
"a bad kind id",
"a repeated kind",
"markup in the title",
"an unknown delivery",
"a page the UI does not declare",
"a preview interval too short",
"a preview interval too long"
]
},
{
"path": ".cache/addons/logs/contracts-packaging.json",
"cases": [
"audits actual host calls and strict package contract for face",
"audits actual host calls and strict package contract for fine-tuning",
"audits actual host calls and strict package contract for office",
"audits actual host calls and strict package contract for quantization",
"audits actual host calls and strict package contract for sandbox",
"audits actual host calls and strict package contract for slack",
"audits actual host calls and strict package contract for studio",
"audits actual host calls and strict package contract for tables",
"audits actual host calls and strict package contract for talk",
"audits actual host calls and strict package contract for telegram",
"audits actual host calls and strict package contract for voice",
"audits actual host calls and strict package contract for web",
"lists every release platform with its runner",
"lists every release platform with its runner",
"lists every release platform with its runner",
"lists every release platform with its runner",
"lists every release platform with its runner",
"lists every release platform with its runner",
"lists every release platform with its runner",
"lists every release platform with its runner",
"lists every release platform with its runner",
"lists every release platform with its runner",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"enables a platform exactly when its native check is recorded",
"has a catalog template",
"has a catalog template",
"has a catalog template",
"has a catalog template",
"has a catalog template",
"has a catalog template",
"has a catalog template",
"has a catalog template",
"has a catalog template",
"has a catalog template",
"publishes every add-on to the one documented repository, with its id as the tag prefix",
"fails on a publishing event when an add-on has no enabled platform",
"publishes when every add-on has an enabled platform",
"gives an add-on without an enabled platform no legs on an event that publishes nothing",
"fails on a missing or malformed platform file on every event",
"joins every enabled platform leg into one verified index",
"never creates a partial index when an enabled platform has no leg",
"refuses duplicate legs, local-check legs, other versions and extra platforms",
"refuses a merged layout that lost a platform after the merge",
"renders digest-pinned entries with an explicit add-on signer identity",
"renders the development channel as mutable entries: the moving tag, no digest",
"renders the development entries of every enabled platform from the manifest, without a package",
"refuses --from-manifest for a pinned channel or together with a merged layout",
"renders an entry for every first-party add-on from its own template",
"reports the chat tools of the manifest on each entry and not the admin tools",
"caps the tool names at MaxEntryTools and keeps the full count",
"lists the built-in skills an add-on replaces",
"lists the built-in tools an add-on replaces after its tools",
"adds the tool fields to an existing index from the repository manifests, and changes nothing else",
"refuses missing inputs, backend repositories, bad channels and unknown placeholders",
"carries placeholders only: no fabricated URL, registry or namespace",
"reads a YAML list and refuses JSON, unknown fields and a second document",
"has no hard-coded add-on path",
"lists the add-ons in the validate matrix",
"gives promote an add-on matrix",
"gives publish an add-on matrix",
"takes the package legs from the plan",
"loops the plan over the same list",
"has consistent package files for face",
"has consistent package files for fine-tuning",
"has consistent package files for office",
"has consistent package files for quantization",
"has consistent package files for sandbox",
"has consistent package files for slack",
"has consistent package files for studio",
"has consistent package files for tables",
"has consistent package files for talk",
"has consistent package files for telegram",
"has consistent package files for voice",
"has consistent package files for web",
"refuses missing and backend repositories before any request",
"pushes platform digests then the index, and a retry is digest-identical",
"rejects overwriting an immutable version with different content",
"adopts published content only for the same version and commit",
"refuses reserved aliases and mismatched tags as immutable tags",
"publishes nothing from a partial or local-check layout",
"fails closed when no platform is enabled, the file is absent or empty",
"rejects enabled platforms without a native runner or check, duplicates and unknown fields",
"prints the enabled platforms with their native runners",
"ships a checked-in Tables matrix with at least one enabled platform",
"moves development forward and leaves it alone for an older commit",
"accepts a diverged branch head and refuses one commit with two contents",
"treats a force-pushed branch as the new truth for a push to the same ref",
"blocks the alias for anything but a push to the channel's own ref",
"refuses development when its commit is unreachable, even for a push",
"fails on any git error that is not a plain not-ancestor answer",
"tells an unreachable commit from a plain not-ancestor",
"moves latest only to a newer stable version",
"refuses reserved or foreign alias names and unpublished digests, leaving aliases unchanged",
"promotes a branch channel under its hashed name",
"accepts the checked-in workflow",
"rejects pull_request_target",
"rejects secrets in a pull request validation job",
"rejects id-token write outside the publishing job",
"lets only the release-index job write the contents of the repository",
"hands the guest image digest of the sandbox-image job to the package leg",
"rejects a registry login or publish in an untrusted job",
"rejects publish that does not wait for every platform leg",
"rejects publish that can run after a failed leg",
"rejects publish that does not need validate",
"rejects a package leg that does not need validate",
"rejects a validate job that cannot stop the release",
"rejects a package or promote job that runs after a failed validate",
"keeps validate unprivileged on every event",
"rejects promotion that does not wait for signing",
"rejects alias promotion before signing",
"rejects an alias command inside the publishing job",
"rejects a literal latest tag",
"rejects backend registries and backend workflows",
"rejects a signer identity that is a pattern or the backend workflow",
"rejects signing by tag or without referrers and the new bundle format",
"rejects missing serialization per channel",
"rejects publication that is shared between add-ons",
"rejects a workflow that names one add-on by path or skips an add-on in the matrix",
"rejects a plan that does not refuse an add-on without an enabled platform",
"rejects a plan that does not exit 1 for an add-on without an enabled platform on a publishing event",
"rejects a plan that treats any matrix error as no legs",
"rejects a repository rule that derives a repository for each add-on",
"rejects a publish or promote matrix that stops the other add-ons on a failure",
"rejects a publish job that downloads the layouts of other add-ons",
"rejects a promote job that does not check the digest format",
"rejects a plan that does not fail closed on missing configuration",
"rejects a checkout of the pull request head or a persisted token",
"rejects write permission at workflow level and a literal platform matrix",
"rejects a publishing job without an environment or a gate",
"does not trust the backend workflow identity in the documented verification",
"loads exactly the historical grants through the actual host loader",
"explicitly selects the shipped policy in the final Docker runtime stage",
"accepts the add-on namespace and refuses every other go-skynet repository",
"rejects a package without its entrypoint",
"rejects a declared UI whose layer or files are missing",
"rejects a package without a required runtime library",
"rejects a manifest whose platform differs from the image",
"rejects an image config or annotation of another platform",
"rejects a manifest version that differs from the release version",
"rejects another artifact type",
"rejects unexpected layers, roles and layer media types",
"rejects an unexpected file in the executable layer",
"rejects a blob whose bytes differ from its digest",
"rejects a receipt that does not match the image",
"rejects invalid extraction permissions",
"rejects a UI file that is executable or outside the declared directory",
"rejects traversal paths, links and duplicates",
"rejects a UI that bundles its own React runtime",
"rejects an icon that is not an image of its type",
"rejects an invalid platform layout marker or index",
"lays the skills of the add-on in their own layer and verifies them with the install rules",
"refuses to build when the skills folder and the manifest disagree, or a skill breaks a rule",
"builds a deterministic platform layout with executable, ui and manifest layers",
"restores the validated executable mode on extraction",
"refuses a platform that the matrix has not enabled unless it is a local check",
"refuses an invalid version, an existing layout and an empty executable",
"never publishes from a pull request, whatever the ref",
"maps master alone to development and publishes the commit tag",
"never publishes from a branch push, whatever the branch is named",
"keeps reserved names out of the branch namespace",
"separates refs that normalize to the same label",
"bounds empty, Unicode and very long branch names",
"lets a tag push prepare the immutable version and never move latest",
"promotes latest only for a published, stable, non-draft release",
"rejects unknown events and a malformed commit",
"prints the decision as key=value lines"
]
},
{
"path": ".cache/addons/logs/contracts-architecture.json",
"cases": [
"keeps official addon identities out of generic CLI and config policy code",
"keeps provider and Home dispatch independent of official addon IDs"
]
}
]
},
"catalog": {
"kind": "ginkgo",
"commands": [
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/services/addons/catalog",
"-ginkgo.json-report=../../../../.cache/addons/logs/catalog.json"
]
],
"cases": [
"fetches private bearer and basic catalogs without OCI credentials",
"blocks redirects without leaking credentials or error details",
"reports refresh failures rather than serving stale success",
"resolves the host platform from a multi platform catalog",
"selects exact configured owner targets and rejects absent or ambiguous targets",
"requires authoritative administration for all source edits",
"persists protected references and removes sources without touching installs",
"invalidates cached releases on explicit source changes",
"rejects secret URLs invalid digests duplicate identities and malformed catalogs",
"refuses a library entry whose add-on ID is a host route segment",
"lists and gets protected source copies including disabled and empty sources after reload",
"requires current authoritative administration and context for source reads",
"serializes source reads with concurrent configuration edits",
"pins channels and restricts package transport to secure or opted in loopback origins",
"surfaces optional UI metadata in search results and resolutions without changing plain entries",
"rejects entries with remote icons, reserved launch modes, markup or overlong display text",
"lists only releases the configured target platform can install",
"keeps the compatibility hint of an entry and refuses a malformed range",
"lists the releases of one add-on for every platform, from the cache, and refuses a failed library",
"names an unavailable credential reference as a credential failure inside the refresh failure",
"reads a YAML list of releases with the documented fields",
"accepts an empty library written as an empty list",
"refuses a JSON index",
"refuses an unknown field, at the top and inside ui",
"refuses a second document, a mapping, an empty body and a duplicate key",
"refuses duplicate identities",
"enforces the release count and the size limit",
"resolves the tag at install and builds the version from the digest",
"refuses a tag that cannot be resolved or a answer that is not a digest",
"keeps a pinned entry as it is and never looks it up",
"refuses an entry that is neither mutable nor pinned, and a mutable one that has a digest",
"refreshes an index with an unknown kind and reports what it skipped",
"lists add-ons by default and backends on request",
"resolves a backend only as a backend",
"refuses entries that mix the fields of the kinds",
"accepts an anchored identity pattern and refuses a loose one",
"has an entry for every enabled platform of every add-on",
"a release tag",
"a release candidate",
"a source build",
"a commit after a tag",
"a bare commit",
"a version that could escape the URL",
"moves a stored official library to the index of the new build",
"leaves an official library the admin pointed at another URL",
"reads an index written before kinds existed, and the entry is an add-on",
"reads a backend entry on a reader that knows backends",
"skips a backend entry on an add-on only reader and says so",
"skips an unknown kind without reading its fields, and keeps the rest",
"skips the reserved model kind in this phase",
"reports the id of a skipped entry, written as id or as the legacy addonId",
"reads a backend entry that still uses the legacy addonId, and refuses one that has both",
"still refuses an unknown field on an entry of a known kind",
"refuses a malformed kind",
"reads every new field and keeps it",
"keeps the reader strict about an unknown field of the backend kind",
"refuses a license, urls, tags, icon, mirrors or capabilities on an add-on",
"refuses a schemaVersion this host does not know",
"is a URL, and the host does not fetch it",
"must be an https URL with a host and no credentials",
"is not the icon of the add-on UI, which stays a path in the package",
"refuses a url that is not http or https",
"refuses too many urls and too many tags",
"refuses a tag or a license with a control character or a length over the bound",
"keeps the order",
"refuses a mirror that is not an oci image, a duplicate, the artifact itself, and too many",
"refuses a malformed capability name or backend name",
"has capabilities and no artifact, digest or platform, and is listed for every platform",
"cannot carry an artifact-only field",
"needs capabilities: an entry with no artifact and none is refused",
"is not a meta backend when it has an artifact",
"keeps its tag, has no digest and is listed",
"is refused with a digest, and an entry with no digest is refused unless it is mutable",
"is accepted on an add-on without a digest, as on a backend",
"is refused on an add-on with a digest, without a digest unless mutable, or on an archive",
"reads an index of more than a thousand entries",
"encodes and decodes an entry with the new fields unchanged",
"reads the legacy addonId as id, and refuses an entry that has both",
"carries the built-in tools an add-on replaces, and refuses one that may not be replaced",
"carries the built-in skills an add-on replaces, and refuses one that may not be replaced",
"carries toolCount and tools from the index to the listing",
"leaves both fields out for an entry without chat tools",
"keeps a count above the listed names when the names are capped",
"refuses a malformed hint",
"lists the first-party add-ons, one entry for each platform, in the library format",
"is a valid, signature-requiring source",
"is added when there is no sources.json and is written to it",
"keeps a sources.json the admin already has",
"does not add the default again after the admin removed it",
"seeds only once per instance",
"refuses an entry two of your sources list, and excludes disabled sources"
],
"report": ".cache/addons/logs/catalog.json"
},
"packages": {
"kind": "ginkgo",
"commands": [
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/services/addons/packages",
"-ginkgo.json-report=../../../../.cache/addons/logs/packages.json"
]
],
"cases": [
"stages verified HTTP bytes and commits immutable receipts without activation",
"rejects untrusted integrity forged releases and digest mismatches",
"rejects traversal links collisions and excessive extraction",
"rejects cancellation disk full and preserves existing packages",
"rejects platform data API SDK and missing asset mismatches",
"pins and verifies real local OCI distribution bytes without a container runtime",
"rejects downloaded digest mismatch redirects cancellation and file count limits",
"accepts optional UI only with real immutable assets and rejects non executable entrypoints",
"does not allow remote verification policy to replace owner trust",
"requires source opt in before any plaintext OCI request",
"bounds compressed OCI PAX expansion before tar parsing",
"bounds compressed OCI GNU expansion before tar parsing",
"counts padding trailing bytes and layers at the exact expanded boundary",
"denies nonloopback plaintext and redirect responses at the transport boundary",
"bounds expanded bytes cumulatively across real OCI layers",
"bounds sparse logical output across files and layers preserving old packages",
"accepts exact sparse output budget and cancels synthesized writes",
"stages real trusted signatures and rejects signed identity digest and trust mismatches offline",
"records the digest of a packaged immutable icon in the receipt and refuses unusable icons",
"installs from the old repository per add-on",
"installs from the shared repository with an id-prefixed tag",
"follows a digest-pinned blob redirect without the registry credential",
"still verifies the digest of the redirected bytes",
"refuses a plaintext redirect to a host name instead of a loopback address",
"installs by a digest resolved at install, and the receipt records it",
"checks the signature against the resolved digest",
"is refused when the tag cannot be resolved or resolves to something that is not the image",
"refuses an entry that has no digest and is not mutable",
"accepts a good skills tree and records every file with its digest",
"reads the skills back for the copy, checked against the receipt",
"refuses a file added after commit",
"has nothing to copy for a package without skills",
"refuses a declared skill without a folder, and a folder that is not declared",
"refuses a skills folder when the manifest declares none",
"refuses a folder without SKILL.md and bad frontmatter",
"refuses links, executable files and special entries",
"refuses scripts and other file types",
"refuses names that are not plain lowercase ASCII",
"refuses text that is not UTF-8 or holds a NUL",
"refuses oversize files, deep paths and too many files",
"is for backend sources only: an add-on install refuses it",
"installs the darwin/amd64 child of an index with four platforms",
"installs the darwin/arm64 child of an index with four platforms",
"installs the linux/amd64 child of an index with four platforms",
"installs the linux/arm64 child of an index with four platforms",
"refuses an index that does not list the host platform",
"refuses a child whose digest differs from the one the index lists",
"still installs a single manifest and refuses a different digest",
"persists model actions and typed declarations together separately and absent in verified immutable manifests and receipts",
"refuses unsupported typed candidates without changing the previous package bytes digest or receipt",
"discards only the creating installer's unpublished single use stage"
],
"report": ".cache/addons/logs/packages.json"
},
"lifecycle": {
"kind": "ginkgo",
"commands": [
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/services/addons",
"-ginkgo.json-report=../../../.cache/addons/logs/lifecycle.json"
]
],
"cases": [
"persists and recovers model actions and declarations through install manual and automatic upgrades and real activation rollback",
"fails the install and says the package could not be verified, without installing anything",
"retries runtime synchronization after canceled disable and generation upgrade",
"resolves a package for the current enabled generation and digest only",
"binds lifecycle lookup to current admin and original actor without writes or repair",
"publishes identical bytes and digests with sorted archive entries for unchanged inputs and transforms",
"answers from the current installed manifest only and follows a generation change",
"does not retain the caller's map or prefix slices",
"keeps an explicitly empty startup policy immutable",
"reports a digest-only change of a moving channel, applies nothing and offers the pinned upgrade",
"refuses a second operation ID for the same transition, in flight or done, and applies it once",
"runs concurrent requests with one operation ID once and gives each the same answer",
"serializes conflicting upgrades by the installed digest and refuses the loser without a record",
"refuses a candidate that is not the one the library resolves now",
"refuses an upgrade to the digest that is already installed",
"rechecks compatibility at execution and refuses an incompatible candidate",
"selects a newer immutable version and treats a rewritten version as an integrity error",
"keeps the last good generation when the candidate cannot be staged",
"never switches the library or channel, and a failed check is never up to date",
"lets an administrator refresh and everyone with the feature read a redacted status",
"shows the pending update in the apps list from the cache only",
"does not accept pins without an update checker or on another action",
"keeps the unpinned typed upgrade of an earlier release working",
"traces completion, retries, detach, interruption and late delivery without replay",
"keeps terminals immutable for every event and gives each active state a terminal exit",
"denies enable and disable for a stale generation without recording anything",
"lists the identifiers of installed addons, disabled ones included",
"refuses to list installed identifiers while recovery is required",
"lists apps by visibility and serves an icon only for a visible app at its generation",
"distinguishes healthy empty connector discovery from loss of runtime ownership",
"executes enabled owner intent on startup and stops on disable and close without forwarder execution",
"writes the owner and storage only, with no address",
"loads a file written in the old format with an address",
"loads when only the address changed",
"refuses a changed owner ID",
"refuses a changed storage ID",
"is offered when the tag moved, pinned to the build the tag names, and upgrades to exactly that build",
"refuses the upgrade when the tag moved again after the check, and installs nothing",
"upgrades an installed add-on through the same path as a manual upgrade",
"does nothing when no newer version is listed",
"refuses a candidate whose package no longer matches its listed digest and replaces nothing",
"refuses a candidate that fails the signature policy of its library and replaces nothing",
"does not upgrade to a release the host cannot run",
"does nothing without an update checker",
"keeps the manual upgrade closed to a caller who is not an administrator",
"copies them at install, upgrade and owner start, and removes them at uninstall",
"installs upgrades and uninstalls the actual Sandbox document skills through verified receipts",
"never fails the operation when the copy fails",
"copies every capability field of the manifest, so a new field cannot be forgotten",
"reports the supervisor state of an app through a crash and a restart",
"starts the enabled add-ons side by side, so the start takes the slowest ones and not the sum",
"reads a flat directory in batches and stops at the entry bound",
"adds up nested files and reports a complete walk as not truncated",
"never follows or counts a symbolic link",
"keeps a result for a short time so polling does not walk again",
"stops at the time bound and reports a truncated size",
"does not keep a result cut short by the caller",
"is what the installed view reports for the data directory",
"finishes a real backup and commit after the submitting request is cancelled",
"polls and retries during a blocked backup, rejects conflicting IDs, and retains the receipt on restart",
"reconciles durable accepted work to interrupted without replay",
"Close cancels and joins an accepted owner worker before releasing storage",
"Close cancels a backup in flight and joins its cleanup before releasing ownership",
"serializes synchronous disable against an accepted upgrade without overwriting its journal",
"carries the SDK refusal text to the caller of a failed install and keeps the generic error",
"installs an add-on whose SDK range contains the host SDK",
"rejects symlinked package roots without touching external staging",
"recovers every durable journal boundary without replaying publication",
"removes abandoned staging without removing published packages on recovery",
"keeps immutable history on successful upgrade and reinstallation",
"stamps the first install, keeps the time over an upgrade and stamps it again after an uninstall",
"excludes competing owners and rejects conflicting durable identities",
"never opens replica roots or elects an absent owner",
"needs a state root for the owner only",
"refuses commands and asset reads for an add-on ID the host serves as a route",
"binds duplicate operation IDs to actor and command and serializes conflicts",
"retains generations identity data and grants across uninstall and restart",
"preserves old packages and active generation on manager upgrade failure",
"requires current authoritative administration even for idempotent retries",
"names a release that the library does not list",
"names two libraries that list the same add-on",
"names a library that cannot be read",
"reads the library on demand when the startup refresh has not filled the cache",
"reads the library again when the startup refresh failed",
"cancels status lookup while a lifecycle writer holds the journal lock"
],
"report": ".cache/addons/logs/lifecycle.json"
},
"runtime": {
"kind": "ginkgo",
"commands": [
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/services/addons/runtime",
"-ginkgo.json-report=../../../../.cache/addons/logs/runtime.json"
],
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./addons/internal/protocol",
"-ginkgo.json-report=../../../.cache/addons/logs/runtime-protocol.json"
]
],
"cases": [
"registers only ready generation bound service headless and UI capabilities",
"rejects forged registration nonloopback and stale incarnation handshakes",
"bounds readiness and handles exit during start and stop",
"withdraws immediately drains boundedly and rejects stale process identities",
"exhausts restart budget without retaining dead registrations",
"does not inherit secrets and exits when the private parent channel closes",
"rejects foreign supervisor handles and numeric PID substitutions",
"resets restart budget only after sustained authenticated health",
"authenticates every request and separates trusted authority from model arguments",
"bounds output streams cancellation deadlines and stop admission",
"tells a 409 conflict of the add-on from an outage",
"rejects nonloopback endpoints and bounds oversized streams and concurrency",
"never reports failed between a launch starting and the restarted process being published",
"reserves a draining slot against concurrent starts",
"waits for a restart launch worker before acknowledging stop",
"exposes a new incarnation client after restart without reviving the old client",
"kills the exact paused child of a killed owner before launching its replacement",
"fails closed on ambiguous launch identities and preserves unrelated reused PIDs",
"retains a canceled restart slot until cleanup completes and rejects duplicate supervisors",
"refuses a missing established ledger and fences failed cleanup publication",
"withdraws and initiates every live slot before a cleanup timeout",
"reports stopped, running, failed, starting and running again across a crash and a restart",
"keeps reporting failed once the restart budget is exhausted",
"creates one private data directory per addon and passes its path in the startup object",
"gives no data directory without a data root and refuses an unsafe root or addon ID",
"gives an add-on that the host setting names a host endpoint of its own",
"gives an add-on that the host setting does not name no host endpoint",
"closes the host endpoint when the incarnation ends",
"an HTTP 400 answer",
"an HTTP 422 answer",
"keeps a bounded, printable reason and nothing else of the body",
"leaves 503, 500 and 404 as outages",
"types a withdrawn client, a full slot table, a bad envelope and a missing schema as not sent",
"keeps a not-sent error an ErrRuntime for callers that do not tell them apart",
"types a refused connection as not sent",
"never types a possibly-sent request as not sent",
"types the add-on's own 'forbidden' answer as a denial of the person, not as an outage",
"keeps a 403 about the envelope itself an outage: it is a host fault, not a permission",
"reaches an add-on that declares actions, as the actor of the envelope, under the act scope",
"never sends a call that is not an act call or has another scope",
"never sends an act call to an add-on that did not declare actions",
"stops an act call when the caller gives up",
"posts the request with the incarnation credential and decodes the answer",
"is not sent to an add-on that declared no connector",
"gives it time to release what it owns before it kills the process",
"kills an add-on that ignores the closing of its startup channel, within the grace period",
"goes to the log line by line with the add-on ID and a cap per line",
"records the chat with the envelope of a read and of an action while it runs",
"sends the add-on an envelope without a new field",
"requires exact typed capability equality on authenticated registration health",
"keeps all typed declarations on automatic crash restart with a fresh incarnation",
"replays typed and legacy receipts across process restarts",
"refuses missing wire tool discriminators before any read",
"serializes exact identity admission with withdrawal and never dispatches the replacement",
"cannot observe a restarted same-generation process through the captured client",
"rejects output handles before they can reach storage or output-open",
"settles callback denial as failure even if the addon returns a valid positive payload",
"cleans up after cancellation and rejects repeat correlation",
"keeps an ordinary concurrent read authorized while an observation is pending",
"error",
"malformed/artifact payload",
"success",
"timeout",
"cancels an admitted observation when the runtime withdraws",
"encodes a payload",
"reads the tool of a request",
"empty tool",
"no tool",
"not an object",
"no arguments",
"decodes arguments into a closed struct",
"unknown field",
"trailing value",
"wrong type",
"bad request",
"too large",
"not found",
"conflict",
"feature",
"scope",
"keeps any other failure as it is",
"ends the context when the owner closes the startup channel, so Run can return",
"serves /act for a runtime that implements ActRuntime, under the act scope only",
"has no /act for a runtime that does not act",
"serves /connector for a runtime that implements ConnectorRuntime, behind the incarnation credential",
"answers a refusal of the add-on as a bad request",
"has no /connector for a runtime that carries no connector",
"refuses without the protocol flag and builds no runtime",
"echoes model actions and typed declarations together separately and absent over authenticated health",
"sends the reason of a bad request on, so the owner can tell the person what to fix",
"keeps the plain answer for a bad request without a reason",
"closes the runtime with a bounded context before it exits, once",
"exits when the owner closes the startup channel",
"still exits when the runtime does not return in time",
"exits at once for a runtime with nothing to close"
],
"report": ".cache/addons/logs/runtime.json",
"reports": [
{
"path": ".cache/addons/logs/runtime.json",
"cases": [
"registers only ready generation bound service headless and UI capabilities",
"rejects forged registration nonloopback and stale incarnation handshakes",
"bounds readiness and handles exit during start and stop",
"withdraws immediately drains boundedly and rejects stale process identities",
"exhausts restart budget without retaining dead registrations",
"does not inherit secrets and exits when the private parent channel closes",
"rejects foreign supervisor handles and numeric PID substitutions",
"resets restart budget only after sustained authenticated health",
"authenticates every request and separates trusted authority from model arguments",
"bounds output streams cancellation deadlines and stop admission",
"tells a 409 conflict of the add-on from an outage",
"rejects nonloopback endpoints and bounds oversized streams and concurrency",
"never reports failed between a launch starting and the restarted process being published",
"reserves a draining slot against concurrent starts",
"waits for a restart launch worker before acknowledging stop",
"exposes a new incarnation client after restart without reviving the old client",
"kills the exact paused child of a killed owner before launching its replacement",
"fails closed on ambiguous launch identities and preserves unrelated reused PIDs",
"retains a canceled restart slot until cleanup completes and rejects duplicate supervisors",
"refuses a missing established ledger and fences failed cleanup publication",
"withdraws and initiates every live slot before a cleanup timeout",
"reports stopped, running, failed, starting and running again across a crash and a restart",
"keeps reporting failed once the restart budget is exhausted",
"creates one private data directory per addon and passes its path in the startup object",
"gives no data directory without a data root and refuses an unsafe root or addon ID",
"gives an add-on that the host setting names a host endpoint of its own",
"gives an add-on that the host setting does not name no host endpoint",
"closes the host endpoint when the incarnation ends",
"an HTTP 400 answer",
"an HTTP 422 answer",
"keeps a bounded, printable reason and nothing else of the body",
"leaves 503, 500 and 404 as outages",
"types a withdrawn client, a full slot table, a bad envelope and a missing schema as not sent",
"keeps a not-sent error an ErrRuntime for callers that do not tell them apart",
"types a refused connection as not sent",
"never types a possibly-sent request as not sent",
"types the add-on's own 'forbidden' answer as a denial of the person, not as an outage",
"keeps a 403 about the envelope itself an outage: it is a host fault, not a permission",
"reaches an add-on that declares actions, as the actor of the envelope, under the act scope",
"never sends a call that is not an act call or has another scope",
"never sends an act call to an add-on that did not declare actions",
"stops an act call when the caller gives up",
"posts the request with the incarnation credential and decodes the answer",
"is not sent to an add-on that declared no connector",
"gives it time to release what it owns before it kills the process",
"kills an add-on that ignores the closing of its startup channel, within the grace period",
"goes to the log line by line with the add-on ID and a cap per line",
"records the chat with the envelope of a read and of an action while it runs",
"sends the add-on an envelope without a new field",
"requires exact typed capability equality on authenticated registration health",
"keeps all typed declarations on automatic crash restart with a fresh incarnation",
"replays typed and legacy receipts across process restarts",
"refuses missing wire tool discriminators before any read",
"serializes exact identity admission with withdrawal and never dispatches the replacement",
"cannot observe a restarted same-generation process through the captured client",
"rejects output handles before they can reach storage or output-open",
"settles callback denial as failure even if the addon returns a valid positive payload",
"cleans up after cancellation and rejects repeat correlation",
"keeps an ordinary concurrent read authorized while an observation is pending",
"error",
"malformed/artifact payload",
"success",
"timeout",
"cancels an admitted observation when the runtime withdraws"
]
},
{
"path": ".cache/addons/logs/runtime-protocol.json",
"cases": [
"encodes a payload",
"reads the tool of a request",
"empty tool",
"no tool",
"not an object",
"no arguments",
"decodes arguments into a closed struct",
"unknown field",
"trailing value",
"wrong type",
"bad request",
"too large",
"not found",
"conflict",
"feature",
"scope",
"keeps any other failure as it is",
"ends the context when the owner closes the startup channel, so Run can return",
"serves /act for a runtime that implements ActRuntime, under the act scope only",
"has no /act for a runtime that does not act",
"serves /connector for a runtime that implements ConnectorRuntime, behind the incarnation credential",
"answers a refusal of the add-on as a bad request",
"has no /connector for a runtime that carries no connector",
"refuses without the protocol flag and builds no runtime",
"echoes model actions and typed declarations together separately and absent over authenticated health",
"sends the reason of a bad request on, so the owner can tell the person what to fix",
"keeps the plain answer for a bad request without a reason",
"closes the runtime with a bounded context before it exits, once",
"exits when the owner closes the startup channel",
"still exits when the runtime does not return in time",
"exits at once for a runtime with nothing to close"
]
}
]
},
"gateway": {
"kind": "ginkgo",
"commands": [
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/services/addons/gateway",
"-ginkgo.json-report=../../../../.cache/addons/logs/gateway.json"
],
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/http/endpoints/addons",
"-ginkgo.json-report=../../../../.cache/addons/logs/gateway-http.json"
],
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/application",
"-ginkgo.focus=execution binding owner resolver|workspace operation declarations",
"-ginkgo.json-report=../../.cache/addons/logs/gateway-owner-binding.json"
],
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/services/studio/session",
"-ginkgo.json-report=../../../../.cache/addons/logs/gateway-session-scope.json"
]
],
"cases": [
"reports a runtime that cannot serve as unavailable through both frontends",
"reports an output that ends before its first byte as unavailable",
"fails closed as unavailable for an unclassified owner error",
"keeps authorization and policy denials forbidden",
"keeps a mutation unknown when the runtime fails after the owner applied it",
"keeps a mutation unknown when the owner reports recovery required for its operation",
"reports a mutation as unknown when the owner cannot serve it at all",
"keeps a mutation unknown on the owner's own frontend and leaves reads and denials alone",
"lets unavailability win when an error wraps both a denial and an unavailable cause",
"does not leak attachment headers into an error when the first read fails",
"fails closed without current identity or resource policy and reports the original ID of an unknown mutation outcome",
"carries the chat binding signed and rejects a changed one",
"signs a request without a binding as before",
"gives the owner the chat the frontend bound the call to",
"says nothing was sent when the add-on is not running, instead of an unknown outcome",
"runs a declared action tool for the calling user, under the act scope, admitted as an add-on call",
"is not reachable through the typed dispatch of the direct API",
"refuses what is not a declared action tool",
"refuses an add-on that did not declare actions",
"is unavailable when the runtime does not serve action tools, and never runs for an unvalidated user",
"reports an unknown outcome, not a refusal, when the runtime fails after the call began",
"returns the artifact status through the owner from every frontend with one denial for the rest",
"types the owner's refusal and outage of a lookup the same from every frontend",
"writes an attachment header that cannot be broken out of",
"rejects unknown lifecycle argument fields before touching the owner journal",
"is not permitted when the add-on denies the person, on the owner and on a forwarding frontend",
"is an unreachable resource when the policy denies it, on the owner and on a forwarding frontend",
"types the denial of a read like the denial of a write, on the owner and on a forwarding frontend",
"crosses the wire of a resource call typed, so a forwarding frontend answers like the owner",
"keeps any other failure to resolve a resource a plain denial, so nothing more is told",
"reports an account store outage as unavailable and a refused account as forbidden",
"propagates interrupted progress cancellation through the receiving frontend",
"round trips installed typed home metadata over mTLS with owner actor visibility and immutable asset URLs",
"returns the owner's forbidden status for an invalid kind and for missing policy",
"still reports unavailable when the owner is unable to serve and not forbidden",
"reaches the same decision through both frontends and delivers bytes when allowed",
"keeps aborting when revocation happens after bytes were written",
"validates finite relay budgets and prevents disabling polling bounds",
"treats every action except the known reads as a mutation",
"reads typed status and preserves named tool and host operation IDs through a supervised process",
"rejects a captured supervised client after same generation replacement before carrier dispatch",
"rejects a late supervised carrier observation after replacement before owner consumption",
"serves only declared installed generation assets and rejects traversal",
"builds a carrier only from complete pinned identities",
"types an unknown mutation outcome as unavailable without losing its operation",
"passes through owner-resolved bindings with distinct provider and status names",
"rejects a CA signed peer without a pin on the owner side",
"refuses an owner whose CA signed certificate is not the pinned owner",
"crosses the owner's wire as the same typed error, whatever the frontend",
"does not trust a code the host does not know, and cleans the detail the add-on wrote",
"is a stale view for a caller that only knows ErrStale, and a denial otherwise",
"is a mutation on the carrier: a lost answer is an unknown outcome, never a plain outage",
"never expires the response deadline after the relay returned",
"runs on the owner for the actor the signature binds, and the typed direct dispatch still refuses it",
"keeps the answer of a call that outlasts the write timeout of the owner server",
"is an unknown outcome when the answer is lost",
"refuses at ingest a file result larger than the relay file bound so nothing unservable is staged",
"preserves bounded owner admission refusals over mTLS without frontend grants",
"rejects untrusted peers wrong audience body expiry replay and revoked credentials",
"writes the set with private modes and no CA key",
"loads both roles into carriers and serves a frontend call from the owner",
"gives the owner no signing key and the frontend its own",
"accepts two frontends made from the same set",
"refuses a frontend from another generation",
"reads only the files of the role",
"refuses a key file with group or other access",
"refuses an unknown role",
"refuses to overwrite a file and leaves it unchanged",
"needs an owner host",
"allows only an exact declared tool name and fails closed otherwise",
"never contacts the add-on for an undeclared tool and still serves a declared one",
"denies a repeated key at any depth however it is spelled",
"denies arguments that are not exactly one object",
"separates a denial from an unavailable declaration source",
"answers 503 and never contacts the add-on when the source is unavailable or the arguments repeat a key",
"runs the backend-releases check for a pinned frontend without an actor",
"refuses a system call from a peer that is not pinned",
"never lets a system call change anything or ride the user-facing route",
"denies private relays without host resolution and admission",
"resolves only the authenticated claim over actual mTLS",
"fails closed on unsupported owners and mismatched binding replies",
"serves declared assets of the current enabled generation by package digest only",
"bounds progress, asset and file relays by their own limit",
"reads the exact uiOnly status tool locally and over authenticated mTLS",
"refuses forged identities tools current selections and incarnations without dispatch",
"rejects stale carrier replies and frontend authority fields without dispatch",
"refuses forged observations through the real carrier and ignores ordinary dispatch attempts",
"does not relay a captured old binding to a same-generation replacement",
"settles parent cancellation and owner permission loss as unknown",
"does not grant owner selection authority through wire capability support",
"rejects duplicate noncanonical and nested authority keys in observation DTOs",
"withdraws a positive late reply when exact-client admission becomes stale",
"adopts read outputs as private artifacts inside admission and replaces a forged resource identity",
"rotates the enforced audience on restart and rejects captured requests",
"keeps resolved resources under admission for JSON and attachment bytes",
"closes interrupted output and releases admission on disconnect",
"rechecks revoked credentials during attachment copying",
"alternates real owner journal status and terminates coarse progress without submitting again",
"keeps its address stable across starts",
"does not share state between different roots",
"fails clearly when the port is in use",
"rejects an invalid port file",
"rejects a port file with a loose mode",
"rejects a port file that links outside the root",
"is the typed invalid request on the owner for a read, never an outage",
"is the typed invalid request on the owner for a proposal call",
"is the typed invalid request on the owner for a json relay",
"is the same typed answer from a forwarding frontend",
"runs a resource-less read tool for the calling user only",
"denies a tool that declares a resource when none is given, and never reaches the add-on",
"denies a resource-less read when the admission cannot admit an add-on, or the tool is undeclared",
"alternates pinned frontends and rejects untrusted certificates without local fallback",
"reports the original operation after lost mutation replies without retrying",
"rejects a stream longer than its receiving frontend budget",
"reports an unclassified account check error as unavailable on every path and a wrapped denial as forbidden",
"stores a proposal from an API key and lets only the proposer's browser session confirm it",
"cancels a proposal from the same chain and never lets typed dispatch or relay confirm",
"denies sharing and deletion proposals and an unauthenticated caller",
"serves the local owner's confirmation only from a same-origin fetch of the host page",
"reports a lost reply with the original operation from forwarding frontends and resolves it by receipt",
"lets only the resource owner's browser session abandon an unresolved outcome and then accepts writes",
"lets the owner role list an editor's unresolved proposal and abandon it by the listed digest from every frontend",
"tells an editor of a blocked write only that it is denied",
"returns the applied proposal when the confirmed operation committed",
"answers an owner outage by the owner's state with the same type from every frontend",
"keeps a proposal confirmable by the same ID after the owner could not reach the addon",
"documents the proposal routes and the proposal schema in the Swagger spec",
"serves one owner journal through two real authenticated HTTP frontends and rejects paused keys",
"serves the synthetic owner through the real chain, denies sharing and rejects named callers",
"checks browser CSRF feature and admin access with real stored keys",
"serves a private file result as a safe attachment over real HTTP",
"never renders hostile names or active media types inline",
"answers one 403 for unknown, foreign, incomplete and expired artifacts and requires the feature and a principal",
"denies the download of a disabled addon and serves it again after enable",
"relays the same bytes, headers and denials through two forwarding frontends",
"keeps a file result of a read denied whole without an artifact store",
"serves the local owner's file only in local-owner mode",
"documents the artifact routes and the artifact schema in the Swagger spec",
"rejects anonymous callers and forged forwarding headers",
"gates the feature and then administration for named keys",
"requires same-origin browser requests for cookie mutations",
"registers only the dispatch, relay and proposal mutations",
"reserves every first path segment the host registers under /api/addons",
"gates the artifact routes by authentication and feature",
"gates the proposal routes by feature and refuses a confirmation from a key before the owner is asked",
"rejects anonymous and forged forwarding authority through real authentication",
"lets callers through only when the deployment selected local-owner mode",
"keeps authentication, the feature gate and administration when accounts exist",
"reports an unknown mutation outcome from a forwarding frontend with the original operation",
"documents every field the error responses emit in the Swagger schema",
"reports an unavailable read as plain unavailability",
"reports a denial as forbidden",
"reports an unclassified account check error as unavailable and a definite denial as forbidden",
"reports an unknown mutation outcome from the owner's own frontend with the original operation",
"lists the enabled installed apps for a reader and the disabled ones too for administrators, the same from every frontend",
"lets only administrators start and stop, through the lifecycle manager, and denies a stale generation",
"serves the verified icon through the host route and denies it identically otherwise",
"reports a lost start as an unknown outcome with its original operation and a lost list as unavailable",
"documents the apps routes and every field of the app view in the Swagger spec",
"lists every registered addon route in the feature registry",
"gates the apps routes by authentication, feature and administration",
"serves catalog search, details and the installed management view to administrators only, the same from every frontend",
"refuses every management call of the owner itself for a caller that is not an administrator",
"saves, refreshes and removes a library by reference and leaves installed addons alone",
"upgrades an installed addon through the typed action and keeps its earlier generation",
"reports a lost source change as an unknown outcome and a lost read as unavailable",
"documents the management actions and every emitted field of the installed view",
"serves the declared files of the current package through every frontend with immutable headers",
"lists the same URLs the route serves, and only for an enabled addon",
"denies every other path, digest, addon and credential form with one answer and no immutable caching",
"accepts a same-origin browser session and refuses a cross-site or direct one",
"withdraws the code the moment the addon is disabled, uninstalled or replaced, even for a page that is still open",
"refuses a declared file that is not a regular file of the package",
"documents the asset route and its binary response in the Swagger spec",
"gives the same 403 on the owner and on a forwarding frontend and never contacts the add-on",
"lists the caller's own pending proposals the same from the owner and every forwarding frontend",
"gives every caller with the feature the same status from every frontend, redacted for non-administrators",
"checks only for an administrator's own browser session, and applies nothing",
"upgrades only to the checked candidate, with the same typed refusals from every frontend, and never twice",
"runs two concurrent upgrades from two frontends once: the same ID shares the answer, another ID is a conflict",
"refuses an incompatible candidate and a library that cannot be read, with a typed answer",
"reports a lost upgrade as an unknown outcome with its original operation, and a lost status read or check as plainly unavailable",
"keeps the update actions out of the tools and names every field of the status in the Swagger spec",
"answers an add-on's invalid-request refusal as a typed 400 from the owner and from a forwarding frontend",
"returns the same text through a forwarding frontend",
"Sec-Fetch-Site cross-site is refused even with a Referer on the same host",
"Sec-Fetch-Site same-origin passes",
"Sec-Fetch-Site same-site is refused",
"a request without a session cookie is not guarded",
"no Sec-Fetch-Site and no Origin or Referer is refused",
"no Sec-Fetch-Site with a Referer on the same host passes",
"no Sec-Fetch-Site with a foreign Origin is refused",
"no Sec-Fetch-Site with a foreign Origin is refused even with a Referer on the same host",
"no Sec-Fetch-Site with a foreign Referer is refused",
"no Sec-Fetch-Site with a null Origin is refused",
"no Sec-Fetch-Site with an Origin on the same host passes",
"no Sec-Fetch-Site with the same host on another port is refused",
"matches the host without regard to letter case",
"gives no pins to an account created after the upgrade",
"round-trips pins for the local owner",
"drops IDs the caller cannot see",
"an object",
"numbers",
"not JSON",
"empty",
"null",
"rejects a list over the hard limit",
"does not show Studio and Talk as pins without the add-ons",
"lists add-ons by default, and takes a kind that this host reads",
"is empty because Studio and Talk are packaged add-ons",
"lists every entry without an account database",
"strict same-origin fetch",
"same-origin without destination",
"same-host Referer, no Sec-Fetch headers",
"same-host Origin, no Sec-Fetch headers",
"foreign Referer",
"same host, other port",
"foreign Origin wins over same-host Referer",
"no Origin and no Referer",
"cross-site with same-host Referer",
"same-site with same-host Origin",
"same-host Referer but navigation destination",
"same-host Referer but no-cors mode",
"still refuses a same-host Referer with an API key",
"returns the SDK refusal text, the unverified-package text and the missing-release text to the administrator",
"logs the cause of a failed install and types it for the client",
"logs the reason behind a generic denial and leaves the response unchanged",
"names every typed cause of a failed install in the 403 of the dispatch route",
"keeps one scope through prompt/status/egress and isolates priming and subsequent turns",
"closes pending observations at the real turn boundary (stop=false)",
"closes pending observations at the real turn boundary (stop=true)",
"gives a person's own call the whole home and no chat",
"refuses a person's access for a fenced actor or an actor of a chat",
"builds a view only of folders inside the access, at no more than their mode",
"a sibling",
"the home",
"a name that starts like the folder",
"a parent spelled inside",
"another home",
"a relative path",
"refuses an empty request and a missing store",
"names the work folder in the prompt and makes it only when it is used",
"names the work folder in the prompt and makes it only when it is used",
"gives two chats with the same title two folders before either is made",
"gives two chats with the same title two folders before either is made",
"renames a folder name that has no folder yet",
"renames a folder name that has no folder yet",
"names no work folder when the product does not ask",
"marks the working files of the chat's file list",
"puts the kind of each file on the card of a call",
"closes an idle chat and opens it again",
"does not close a chat in use by the janitor",
"gives the same type for the common text files on every host",
"file tools time out",
"the output cap stops the process",
"backend missing",
"backend missing, first failure",
"cooling down",
"cooling down for minutes",
"load failed",
"model not found",
"provider error",
"upstream key",
"upstream path",
"upstream host",
"timeout",
"cancelled",
"refused",
"quota",
"context",
"unknown",
"does not tell the user to check the backend of a provider that failed",
"does not read a deadline as a context that is too small",
"ignores a model name that is not plain",
"removes addresses, paths, secrets and stacks",
"drops the internal marks",
"cuts a long text",
"keeps a well formed app",
"refuses a bad reference",
"drops an oversize input or result but keeps the reference",
"drops invalid JSON",
"CapText cuts on a rune boundary",
"Summarize picks the first useful argument",
"tells uploads, model and tool writes apart",
"follows a rename of the chat folder",
"are not found for another user",
"give an empty prompt without files and a capped one with many",
"gets the actor and the input source",
"offers no sandbox tools without a sandbox",
"keeps the turn events when full",
"drops the oldest text",
"does not drop answer text in a reasoning flood",
"opens a chat and finishes a turn",
"gives the model the user's text and the guest paths, as before",
"gives the model only the list when there is no text",
"puts the text read from the files between the words and the list",
"leaves a message without files alone",
"splits what ComposeMessage wrote back into the words, the note and the files",
"splits a message that has only files",
"splits a voice note without words",
"splits waiting messages joined into one, each with its files",
"keeps text that only looks like the list",
"shows the user's words of an old message that holds the list",
"leaves the other lines alone",
"gives the model the list of a message stored with its files apart",
"tells the user when a turn has no harness after a restart failure",
"refuses to open a chat as the workspace administrator",
"keeps the order of the conversation in the transcript summary",
"maps every home spelling to the primary mount",
"maps /workspace/chat to the chat folder",
"keeps the home spelling of the chat folder that attachment lists use",
"refuses parents, NUL and control characters wherever they point",
"takes encoded and look-alike separators as literal names",
"refuses a /workspace path that is no mount, case-sensitively",
"maps the skill layers read only",
"never resolves outside its mounts",
"is empty for a view without mounts",
"names a file of the chat folder where the commands see it",
"keeps the home spelling for a file outside the chat folder and in an unscoped chat",
"keeps the stored spelling, which SplitMessage reads back",
"needs a chat ID and keeps the owner without the fence",
"takes a new fence at the next open even when the view is the same",
"makes the folder of a chat that is not open, once, as the user",
"builds a scoped access with the view builder of every chat",
"gives a command runner the turn's view and the skill layers the actor can read",
"gives the same access to another chat of the user",
"gives a refused model request a reason the user can act on",
"context too small with numbers",
"context too small without numbers",
"the model calls a tool that is not offered",
"model keeps failing",
"keeps the fence on its actor and drops it for the owner",
"refuses an actor without a valid principal",
"reaches the client",
"names its files by the place and leaves out files outside its folders",
"mounts the folder at home and the chat folder at chat",
"keeps today's view for an unscoped chat",
"refuses a primary folder outside the fence as a missing home",
"mounts shared folders read only for a scoped view",
"renames a shared folder called chat",
"tells a scoped chat only its folders and no page hint",
"names the whole home for a scoped chat whose folder is the home",
"keeps today's prompt for an unscoped chat",
"validates current selection and authenticated actor",
"rejects aliases, duplicate fields and null claims",
"accepts canonical bindings and rejects aliases and duplicates",
"projects private policy safely",
"forwards authenticated owner decisions",
"validates strict request payloads",
"checks CAS and administrator authority",
"uses owner CAS pins for execution and typed status and fails closed on policy outage",
"resolves local-owner SQLite using current chat and agent reads",
"resolves named SQLite chats and rechecks current accounts and credentials",
"selects the oldest real provider then pins a second distinct manifest and runtime",
"binds the actual renamed running provider and rejects forged bindings and foreign actors",
"observes the actual renamed provider through the Studio typed adapter and withdraws stale facts",
"validates current pins and chat switches without historical ABA guarantees",
"denies foreign chat access and invalid named credentials",
"uses current agent grants and denies unattended actions",
"rejects stale runtime incarnations without owner callback nonces",
"uses the ordinary chat store interface",
"rejects noncanonical and mismatched selected tool identities",
"wrong object",
"additional properties true",
"additional properties absent",
"required",
"enum",
"unknown schema keyword",
"malformed required",
"resource",
"admin",
"status uiOnly",
"status kind",
"action uiOnly",
"action kind",
"shadow",
"nil",
"empty",
"materialize",
"read",
"prefix only",
"future suffix",
"mixed grants",
"unrelated operations",
"bare workspace",
"similar prefix",
"accepts before a slow backup, detaches the request and polls through either frontend"
],
"report": ".cache/addons/logs/gateway.json",
"reports": [
{
"path": ".cache/addons/logs/gateway.json",
"cases": [
"rejects a CA signed peer without a pin on the owner side",
"refuses an owner whose CA signed certificate is not the pinned owner",
"rejects unknown lifecycle argument fields before touching the owner journal",
"adopts read outputs as private artifacts inside admission and replaces a forged resource identity",
"reports an account store outage as unavailable and a refused account as forbidden",
"alternates real owner journal status and terminates coarse progress without submitting again",
"returns the owner's forbidden status for an invalid kind and for missing policy",
"still reports unavailable when the owner is unable to serve and not forbidden",
"reaches the same decision through both frontends and delivers bytes when allowed",
"keeps aborting when revocation happens after bytes were written",
"fails closed without current identity or resource policy and reports the original ID of an unknown mutation outcome",
"refuses at ingest a file result larger than the relay file bound so nothing unservable is staged",
"projects private policy safely",
"forwards authenticated owner decisions",
"validates strict request payloads",
"checks CAS and administrator authority",
"validates current selection and authenticated actor",
"round trips installed typed home metadata over mTLS with owner actor visibility and immutable asset URLs",
"rotates the enforced audience on restart and rejects captured requests",
"passes through owner-resolved bindings with distinct provider and status names",
"writes the set with private modes and no CA key",
"loads both roles into carriers and serves a frontend call from the owner",
"gives the owner no signing key and the frontend its own",
"accepts two frontends made from the same set",
"refuses a frontend from another generation",
"reads only the files of the role",
"refuses a key file with group or other access",
"refuses an unknown role",
"refuses to overwrite a file and leaves it unchanged",
"needs an owner host",
"builds a carrier only from complete pinned identities",
"types an unknown mutation outcome as unavailable without losing its operation",
"rejects untrusted peers wrong audience body expiry replay and revoked credentials",
"is not permitted when the add-on denies the person, on the owner and on a forwarding frontend",
"is an unreachable resource when the policy denies it, on the owner and on a forwarding frontend",
"types the denial of a read like the denial of a write, on the owner and on a forwarding frontend",
"crosses the wire of a resource call typed, so a forwarding frontend answers like the owner",
"keeps any other failure to resolve a resource a plain denial, so nothing more is told",
"preserves bounded owner admission refusals over mTLS without frontend grants",
"accepts canonical bindings and rejects aliases and duplicates",
"keeps resolved resources under admission for JSON and attachment bytes",
"closes interrupted output and releases admission on disconnect",
"rechecks revoked credentials during attachment copying",
"denies private relays without host resolution and admission",
"carries the chat binding signed and rejects a changed one",
"signs a request without a binding as before",
"gives the owner the chat the frontend bound the call to",
"bounds progress, asset and file relays by their own limit",
"returns the artifact status through the owner from every frontend with one denial for the rest",
"types the owner's refusal and outage of a lookup the same from every frontend",
"writes an attachment header that cannot be broken out of",
"rejects aliases, duplicate fields and null claims",
"runs the backend-releases check for a pinned frontend without an actor",
"refuses a system call from a peer that is not pinned",
"never lets a system call change anything or ride the user-facing route",
"wrong object",
"additional properties true",
"additional properties absent",
"required",
"enum",
"unknown schema keyword",
"malformed required",
"resource",
"admin",
"status uiOnly",
"status kind",
"action uiOnly",
"action kind",
"shadow",
"reads the exact uiOnly status tool locally and over authenticated mTLS",
"refuses forged identities tools current selections and incarnations without dispatch",
"rejects stale carrier replies and frontend authority fields without dispatch",
"refuses forged observations through the real carrier and ignores ordinary dispatch attempts",
"does not relay a captured old binding to a same-generation replacement",
"settles parent cancellation and owner permission loss as unknown",
"does not grant owner selection authority through wire capability support",
"rejects duplicate noncanonical and nested authority keys in observation DTOs",
"withdraws a positive late reply when exact-client admission becomes stale",
"serves only declared installed generation assets and rejects traversal",
"accepts before a slow backup, detaches the request and polls through either frontend",
"reads typed status and preserves named tool and host operation IDs through a supervised process",
"rejects a captured supervised client after same generation replacement before carrier dispatch",
"rejects a late supervised carrier observation after replacement before owner consumption",
"resolves only the authenticated claim over actual mTLS",
"fails closed on unsupported owners and mismatched binding replies",
"runs a resource-less read tool for the calling user only",
"denies a tool that declares a resource when none is given, and never reaches the add-on",
"denies a resource-less read when the admission cannot admit an add-on, or the tool is undeclared",
"never expires the response deadline after the relay returned",
"propagates interrupted progress cancellation through the receiving frontend",
"reports a runtime that cannot serve as unavailable through both frontends",
"reports an output that ends before its first byte as unavailable",
"fails closed as unavailable for an unclassified owner error",
"keeps authorization and policy denials forbidden",
"keeps a mutation unknown when the runtime fails after the owner applied it",
"keeps a mutation unknown when the owner reports recovery required for its operation",
"reports a mutation as unknown when the owner cannot serve it at all",
"keeps a mutation unknown on the owner's own frontend and leaves reads and denials alone",
"lets unavailability win when an error wraps both a denial and an unavailable cause",
"does not leak attachment headers into an error when the first read fails",
"keeps its address stable across starts",
"does not share state between different roots",
"fails clearly when the port is in use",
"rejects an invalid port file",
"rejects a port file with a loose mode",
"rejects a port file that links outside the root",
"allows only an exact declared tool name and fails closed otherwise",
"never contacts the add-on for an undeclared tool and still serves a declared one",
"denies a repeated key at any depth however it is spelled",
"denies arguments that are not exactly one object",
"separates a denial from an unavailable declaration source",
"answers 503 and never contacts the add-on when the source is unavailable or the arguments repeat a key",
"crosses the owner's wire as the same typed error, whatever the frontend",
"does not trust a code the host does not know, and cleans the detail the add-on wrote",
"is a stale view for a caller that only knows ErrStale, and a denial otherwise",
"is a mutation on the carrier: a lost answer is an unknown outcome, never a plain outage",
"alternates pinned frontends and rejects untrusted certificates without local fallback",
"reports the original operation after lost mutation replies without retrying",
"rejects a stream longer than its receiving frontend budget",
"treats every action except the known reads as a mutation",
"is the typed invalid request on the owner for a read, never an outage",
"is the typed invalid request on the owner for a proposal call",
"is the typed invalid request on the owner for a json relay",
"is the same typed answer from a forwarding frontend",
"runs on the owner for the actor the signature binds, and the typed direct dispatch still refuses it",
"keeps the answer of a call that outlasts the write timeout of the owner server",
"is an unknown outcome when the answer is lost",
"reports an unclassified account check error as unavailable on every path and a wrapped denial as forbidden",
"says nothing was sent when the add-on is not running, instead of an unknown outcome",
"runs a declared action tool for the calling user, under the act scope, admitted as an add-on call",
"is not reachable through the typed dispatch of the direct API",
"refuses what is not a declared action tool",
"refuses an add-on that did not declare actions",
"is unavailable when the runtime does not serve action tools, and never runs for an unvalidated user",
"reports an unknown outcome, not a refusal, when the runtime fails after the call began",
"validates finite relay budgets and prevents disabling polling bounds",
"serves declared assets of the current enabled generation by package digest only"
]
},
{
"path": ".cache/addons/logs/gateway-http.json",
"cases": [
"stores a proposal from an API key and lets only the proposer's browser session confirm it",
"cancels a proposal from the same chain and never lets typed dispatch or relay confirm",
"denies sharing and deletion proposals and an unauthenticated caller",
"serves the local owner's confirmation only from a same-origin fetch of the host page",
"reports a lost reply with the original operation from forwarding frontends and resolves it by receipt",
"lets only the resource owner's browser session abandon an unresolved outcome and then accepts writes",
"lets the owner role list an editor's unresolved proposal and abandon it by the listed digest from every frontend",
"tells an editor of a blocked write only that it is denied",
"returns the applied proposal when the confirmed operation committed",
"answers an owner outage by the owner's state with the same type from every frontend",
"keeps a proposal confirmable by the same ID after the owner could not reach the addon",
"documents the proposal routes and the proposal schema in the Swagger spec",
"serves one owner journal through two real authenticated HTTP frontends and rejects paused keys",
"serves the synthetic owner through the real chain, denies sharing and rejects named callers",
"checks browser CSRF feature and admin access with real stored keys",
"serves a private file result as a safe attachment over real HTTP",
"never renders hostile names or active media types inline",
"answers one 403 for unknown, foreign, incomplete and expired artifacts and requires the feature and a principal",
"denies the download of a disabled addon and serves it again after enable",
"relays the same bytes, headers and denials through two forwarding frontends",
"keeps a file result of a read denied whole without an artifact store",
"serves the local owner's file only in local-owner mode",
"documents the artifact routes and the artifact schema in the Swagger spec",
"rejects anonymous callers and forged forwarding headers",
"gates the feature and then administration for named keys",
"requires same-origin browser requests for cookie mutations",
"registers only the dispatch, relay and proposal mutations",
"reserves every first path segment the host registers under /api/addons",
"gates the artifact routes by authentication and feature",
"gates the proposal routes by feature and refuses a confirmation from a key before the owner is asked",
"rejects anonymous and forged forwarding authority through real authentication",
"lets callers through only when the deployment selected local-owner mode",
"keeps authentication, the feature gate and administration when accounts exist",
"reports an unknown mutation outcome from a forwarding frontend with the original operation",
"documents every field the error responses emit in the Swagger schema",
"reports an unavailable read as plain unavailability",
"reports a denial as forbidden",
"reports an unclassified account check error as unavailable and a definite denial as forbidden",
"reports an unknown mutation outcome from the owner's own frontend with the original operation",
"lists the enabled installed apps for a reader and the disabled ones too for administrators, the same from every frontend",
"lets only administrators start and stop, through the lifecycle manager, and denies a stale generation",
"serves the verified icon through the host route and denies it identically otherwise",
"reports a lost start as an unknown outcome with its original operation and a lost list as unavailable",
"documents the apps routes and every field of the app view in the Swagger spec",
"lists every registered addon route in the feature registry",
"gates the apps routes by authentication, feature and administration",
"serves catalog search, details and the installed management view to administrators only, the same from every frontend",
"refuses every management call of the owner itself for a caller that is not an administrator",
"saves, refreshes and removes a library by reference and leaves installed addons alone",
"upgrades an installed addon through the typed action and keeps its earlier generation",
"reports a lost source change as an unknown outcome and a lost read as unavailable",
"documents the management actions and every emitted field of the installed view",
"serves the declared files of the current package through every frontend with immutable headers",
"lists the same URLs the route serves, and only for an enabled addon",
"denies every other path, digest, addon and credential form with one answer and no immutable caching",
"accepts a same-origin browser session and refuses a cross-site or direct one",
"withdraws the code the moment the addon is disabled, uninstalled or replaced, even for a page that is still open",
"refuses a declared file that is not a regular file of the package",
"documents the asset route and its binary response in the Swagger spec",
"gives the same 403 on the owner and on a forwarding frontend and never contacts the add-on",
"lists the caller's own pending proposals the same from the owner and every forwarding frontend",
"gives every caller with the feature the same status from every frontend, redacted for non-administrators",
"checks only for an administrator's own browser session, and applies nothing",
"upgrades only to the checked candidate, with the same typed refusals from every frontend, and never twice",
"runs two concurrent upgrades from two frontends once: the same ID shares the answer, another ID is a conflict",
"refuses an incompatible candidate and a library that cannot be read, with a typed answer",
"reports a lost upgrade as an unknown outcome with its original operation, and a lost status read or check as plainly unavailable",
"keeps the update actions out of the tools and names every field of the status in the Swagger spec",
"answers an add-on's invalid-request refusal as a typed 400 from the owner and from a forwarding frontend",
"returns the same text through a forwarding frontend",
"Sec-Fetch-Site cross-site is refused even with a Referer on the same host",
"Sec-Fetch-Site same-origin passes",
"Sec-Fetch-Site same-site is refused",
"a request without a session cookie is not guarded",
"no Sec-Fetch-Site and no Origin or Referer is refused",
"no Sec-Fetch-Site with a Referer on the same host passes",
"no Sec-Fetch-Site with a foreign Origin is refused",
"no Sec-Fetch-Site with a foreign Origin is refused even with a Referer on the same host",
"no Sec-Fetch-Site with a foreign Referer is refused",
"no Sec-Fetch-Site with a null Origin is refused",
"no Sec-Fetch-Site with an Origin on the same host passes",
"no Sec-Fetch-Site with the same host on another port is refused",
"matches the host without regard to letter case",
"gives no pins to an account created after the upgrade",
"round-trips pins for the local owner",
"drops IDs the caller cannot see",
"an object",
"numbers",
"not JSON",
"empty",
"null",
"rejects a list over the hard limit",
"does not show Studio and Talk as pins without the add-ons",
"lists add-ons by default, and takes a kind that this host reads",
"is empty because Studio and Talk are packaged add-ons",
"lists every entry without an account database",
"strict same-origin fetch",
"same-origin without destination",
"same-host Referer, no Sec-Fetch headers",
"same-host Origin, no Sec-Fetch headers",
"foreign Referer",
"same host, other port",
"foreign Origin wins over same-host Referer",
"no Origin and no Referer",
"cross-site with same-host Referer",
"same-site with same-host Origin",
"same-host Referer but navigation destination",
"same-host Referer but no-cors mode",
"still refuses a same-host Referer with an API key",
"returns the SDK refusal text, the unverified-package text and the missing-release text to the administrator",
"logs the cause of a failed install and types it for the client",
"logs the reason behind a generic denial and leaves the response unchanged",
"names every typed cause of a failed install in the 403 of the dispatch route"
]
},
{
"path": ".cache/addons/logs/gateway-owner-binding.json",
"cases": [
"uses owner CAS pins for execution and typed status and fails closed on policy outage",
"resolves local-owner SQLite using current chat and agent reads",
"resolves named SQLite chats and rechecks current accounts and credentials",
"selects the oldest real provider then pins a second distinct manifest and runtime",
"binds the actual renamed running provider and rejects forged bindings and foreign actors",
"observes the actual renamed provider through the Studio typed adapter and withdraws stale facts",
"validates current pins and chat switches without historical ABA guarantees",
"denies foreign chat access and invalid named credentials",
"uses current agent grants and denies unattended actions",
"rejects stale runtime incarnations without owner callback nonces",
"uses the ordinary chat store interface",
"rejects noncanonical and mismatched selected tool identities",
"nil",
"empty",
"materialize",
"read",
"prefix only",
"future suffix",
"mixed grants",
"unrelated operations",
"bare workspace",
"similar prefix"
],
"focus": "execution binding owner resolver|workspace operation declarations"
},
{
"path": ".cache/addons/logs/gateway-session-scope.json",
"cases": [
"keeps one scope through prompt/status/egress and isolates priming and subsequent turns",
"closes pending observations at the real turn boundary (stop=false)",
"closes pending observations at the real turn boundary (stop=true)",
"gives a person's own call the whole home and no chat",
"refuses a person's access for a fenced actor or an actor of a chat",
"builds a view only of folders inside the access, at no more than their mode",
"a sibling",
"the home",
"a name that starts like the folder",
"a parent spelled inside",
"another home",
"a relative path",
"refuses an empty request and a missing store",
"names the work folder in the prompt and makes it only when it is used",
"names the work folder in the prompt and makes it only when it is used",
"gives two chats with the same title two folders before either is made",
"gives two chats with the same title two folders before either is made",
"renames a folder name that has no folder yet",
"renames a folder name that has no folder yet",
"names no work folder when the product does not ask",
"marks the working files of the chat's file list",
"puts the kind of each file on the card of a call",
"closes an idle chat and opens it again",
"does not close a chat in use by the janitor",
"gives the same type for the common text files on every host",
"file tools time out",
"the output cap stops the process",
"backend missing",
"backend missing, first failure",
"cooling down",
"cooling down for minutes",
"load failed",
"model not found",
"provider error",
"upstream key",
"upstream path",
"upstream host",
"timeout",
"cancelled",
"refused",
"quota",
"context",
"unknown",
"does not tell the user to check the backend of a provider that failed",
"does not read a deadline as a context that is too small",
"ignores a model name that is not plain",
"removes addresses, paths, secrets and stacks",
"drops the internal marks",
"cuts a long text",
"keeps a well formed app",
"refuses a bad reference",
"drops an oversize input or result but keeps the reference",
"drops invalid JSON",
"CapText cuts on a rune boundary",
"Summarize picks the first useful argument",
"tells uploads, model and tool writes apart",
"follows a rename of the chat folder",
"are not found for another user",
"give an empty prompt without files and a capped one with many",
"gets the actor and the input source",
"offers no sandbox tools without a sandbox",
"keeps the turn events when full",
"drops the oldest text",
"does not drop answer text in a reasoning flood",
"opens a chat and finishes a turn",
"gives the model the user's text and the guest paths, as before",
"gives the model only the list when there is no text",
"puts the text read from the files between the words and the list",
"leaves a message without files alone",
"splits what ComposeMessage wrote back into the words, the note and the files",
"splits a message that has only files",
"splits a voice note without words",
"splits waiting messages joined into one, each with its files",
"keeps text that only looks like the list",
"shows the user's words of an old message that holds the list",
"leaves the other lines alone",
"gives the model the list of a message stored with its files apart",
"tells the user when a turn has no harness after a restart failure",
"refuses to open a chat as the workspace administrator",
"keeps the order of the conversation in the transcript summary",
"maps every home spelling to the primary mount",
"maps /workspace/chat to the chat folder",
"keeps the home spelling of the chat folder that attachment lists use",
"refuses parents, NUL and control characters wherever they point",
"takes encoded and look-alike separators as literal names",
"refuses a /workspace path that is no mount, case-sensitively",
"maps the skill layers read only",
"never resolves outside its mounts",
"is empty for a view without mounts",
"names a file of the chat folder where the commands see it",
"keeps the home spelling for a file outside the chat folder and in an unscoped chat",
"keeps the stored spelling, which SplitMessage reads back",
"needs a chat ID and keeps the owner without the fence",
"takes a new fence at the next open even when the view is the same",
"makes the folder of a chat that is not open, once, as the user",
"builds a scoped access with the view builder of every chat",
"gives a command runner the turn's view and the skill layers the actor can read",
"gives the same access to another chat of the user",
"gives a refused model request a reason the user can act on",
"context too small with numbers",
"context too small without numbers",
"the model calls a tool that is not offered",
"model keeps failing",
"keeps the fence on its actor and drops it for the owner",
"refuses an actor without a valid principal",
"reaches the client",
"names its files by the place and leaves out files outside its folders",
"mounts the folder at home and the chat folder at chat",
"keeps today's view for an unscoped chat",
"refuses a primary folder outside the fence as a missing home",
"mounts shared folders read only for a scoped view",
"renames a shared folder called chat",
"tells a scoped chat only its folders and no page hint",
"names the whole home for a scoped chat whose folder is the home",
"keeps today's prompt for an unscoped chat"
]
}
]
},
"policy": {
"kind": "ginkgo",
"commands": [
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/services/addons/policy",
"-ginkgo.json-report=../../../../.cache/addons/logs/policy.json"
]
],
"cases": [
"enforces the viewer editor owner matrix on fixture resources",
"denies installation administrators and unrelated users any access to user data",
"does not leak resource existence and treats unknown actions as owner mutations",
"never grants the owner role or a grant to the owner and the synthetic principals",
"rejects anonymous and legacy synthetic principals in named mode",
"checks credential and account status on every admission",
"keeps no current-user state shared between concurrent admissions",
"disables sharing in explicit local-owner mode and lets every local caller own the resource",
"refuses a mode switch of populated data without a stopped backed-up migration",
"retains resources and grants across a restart and an uninstall of the package",
"refuses a corrupt store and a second opener",
"stops admitted work of a revoked user and acknowledges only after it ended",
"lets a racing revocation win against read and write admissions",
"serializes writes per resource while reads run concurrently",
"bounds the revocation wait and does not acknowledge a stuck drain",
"invalidates pending proposals on revoke and downgrade and fails closed when it cannot",
"requires explicit creation authority and keeps pending registrations inaccessible",
"reconciles a registration interrupted by a crash from the durable store",
"keeps a record whose existence cannot be established and settles the rest",
"never drops a committed resource and counts pending quota unchanged",
"retries kept records from the loop on a tick and on a kick, and stops on Close",
"closes a loop that never started without waiting",
"maps opaque ids to the trusted addon and owner and keeps an absent policy denying",
"does not acknowledge a retried downgrade while the lowered user's write still runs",
"retries a failed proposal invalidation after the lowered grant is already durable",
"keeps the drain owed across a restart",
"does not cancel work admitted under a later grant when a lowering is retried",
"still waits for and cancels work admitted before the lowering when the regrant is retried",
"stops work admitted after a regrant when the role is lowered again",
"keeps the epoch of the owed drain across a restart",
"keeps a drain mark that a concurrent lowering replaced while a retry was waiting",
"maps a store outage to unavailable and a disabled account to forbidden",
"caps pending and committed registrations per user and in total",
"applies finite defaults when no limit is configured",
"denies creation as unavailable when the authority cannot tell",
"reports an unclassified account or creation check error as unavailable and a definite denial as forbidden",
"does not start the work when revocation cancels the admission before run",
"rejects persisted unknown roles and trailing bytes without resetting the store",
"removes stale temporary files on open",
"stops accepting writes after a failed directory sync and keeps the applied change",
"retains resources and grants across a real manager uninstall and restart",
"stores a pending proposal with its exact effects and never executes it",
"applies exactly the stored arguments once and answers a repeat from the stored receipt",
"refuses changed arguments, other actors, unknown identifiers and an unbound digest",
"never lets an API key, plain text or a boolean approve",
"accepts the local owner as the confirming principal in local-owner mode only",
"expires a proposal and refuses a late or repeated confirmation",
"refuses a proposal made stale by a new generation or a moved revision",
"cancels a proposal for good and restricts who may propose which action",
"never accepts sharing, deletion, reads or unclassified actions as proposals",
"cancels pending proposals when authority is lowered and lets a revocation win the confirmation race",
"persists every transition atomically before it is reported",
"does not dispatch when the executing state cannot be made durable",
"keeps a lost reply unknown, blocks conflicting writes and resolves it by receipt without a replay",
"reports a lost reply from the owner's own gateway with the original operation",
"recovers a crash after dispatch by receipt and a crash before dispatch as unknown without replay",
"keeps pending proposals across a restart and never resets a corrupt store",
"bounds the pending proposals of one user and the store as a whole",
"records expiry and collects settled proposals without any read so a quiet clock cannot fill the store",
"records expiry durably when the owner starts and when it recovers",
"keeps settled proposals for the retention window only",
"keeps one user from starving others and never drops another user's live proposal",
"bounds the stored canonical arguments per user and in total with a typed quota error",
"looks an unresolved receipt up again with backoff for a finite window and never applies again",
"lets only the resource owner's browser session abandon an unresolved outcome and then unblocks writes",
"records a late receipt of an abandoned outcome instead of hiding it",
"settles by lookup instead of abandoning when the receipt is final",
"refuses a stored abandonment that names nobody and keeps looking up in the background",
"binds the digest to the operation, actor, resource, generation, action, arguments and revision",
"refuses a stored proposal whose operation, actor, resource, generation or arguments changed at rest",
"issues resource identifiers the envelope contract accepts",
"is unavailable until it is attached to a policy and a runtime",
"keeps executing, outcome-unknown and abandoned records far past retention and still dedupes them",
"waits for the background run and for lookups in flight before it closes, and writes nothing after",
"lets the owner role list the unresolved proposals of its resource and abandon one by the listed digest",
"names the blocking proposal in the denial only to the resource owner",
"refuses an unbound digest when the owner abandons through the gateway or the broker",
"answers the same typed outage for a resolution whoever proposed the operation",
"returns the applied proposal when the owner cannot read it back after a successful apply",
"does not show another user's blocking operation in a proposal view",
"denies a proposal for an undeclared tool before any preview and stores nothing",
"denies a proposal that names a tool when no tool source is installed",
"rechecks the stored tool at confirmation and never applies a withdrawn tool",
"denies a proposal whose arguments repeat a key and stores nothing",
"reports an unavailable declaration source as unavailable, never as a denial",
"does not apply at confirmation while the declaration source is unavailable, and applies once it recovers",
"reserves a create proposal as a pending resource that nobody can reach",
"commits the reservation on confirmation and makes the proposer the private owner",
"abandons the reservation when a create proposal is cancelled or expires",
"abandons the reservation when the addon rejects the creation",
"keeps a lost create reply pending and unknown and settles it by receipt",
"abandons an unknown create only when the addon confirms the backing is absent",
"settles reservations at restart by asking the addon and keeps those of live proposals",
"bounds concurrent create proposals by the pending quota",
"lets only the proposer confirm, cancel or read a create proposal",
"denies a create proposal when creation authority is revoked before confirmation",
"denies a create proposal for an undeclared tool or an existing resource without reserving",
"does not let reconcile drop the reservation of a creation in flight",
"commits the reservation at recovery when the crash came after the receipt was stored",
"never reads an add-on that cannot answer as a backing that is gone",
"accepts the explicit answer of the declared existence tool, true or false",
"holds the resources of one add-on and leaves another add-on alone",
"cancels admitted work and reports a drain that did not finish",
"restores grants through the account directory and the lowerings since the backup, never beyond them",
"keeps a bounded durable log of lowered access",
"keeps a revocation however many later lowerings of another person follow",
"restores the data but no access when the history may have lost a lowering",
"reads a store that is full of lowerings as one whose history may be cut",
"applies a lowering made after the export whatever time the backup is given",
"refuses a change that was authorized just before the hold began",
"cancels a pending proposal and leaves an executing one outcome-unknown after a restore",
"forgets the records of one add-on and no other",
"maps an owner on a restore to a local-owner store only when nothing named is in it",
"migrates the ownership of a stopped store with a backup and an explicit mapping and refuses a populated downgrade",
"refuses a proposal whose preview the add-on refused, storing nothing",
"settles a confirmation the add-on refused as rejected, never as an unknown outcome",
"R34: returns an admission that was refused before the wire to pending, and a repeat applies",
"R35, R52: a hold that cancels the dispatch before the wire ends the proposal as cancelled, not unknown",
"R38: records a conflict of the add-on as rejected, not unknown",
"R39: still records an unknown outcome when the request may have been sent",
"reports a not-sent confirmation through the gateway as an outage that sent nothing, never as unknown",
"is a refusal that changed nothing, not an outage, and leaves the ID free",
"R4, S4: refuses an editor who claims the write action for a schema tool, and stores nothing",
"R4: refuses an editor who names the schema action for a schema tool",
"derives the action from the tool, so the owner needs the matching claim and gets the schema action",
"still lets an editor propose a data write for a write tool",
"R3: refuses a read tool, a create tool and a tool without a definition",
"runs the declaration check as well as the kind check",
"refuses a named tool when the source cannot report kinds",
"R3: a creation names a create tool, never a schema or data tool",
"retry-after-not-sent: R34 then R37",
"addon-conflict-is-rejected: R38",
"timeout-unknown-then-receipt-committed: R39 then R40",
"runs the work for a current account",
"refuses a stale account and does not run the work",
"refuses an identity that does not fit the mode",
"refuses a held add-on as unavailable, and serves it again after the release",
"refuses an empty add-on ID and a nil work function",
"is reached through the gateway provider"
],
"report": ".cache/addons/logs/policy.json"
},
"proposals": {
"kind": "ginkgo",
"commands": [
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/services/addons/policy",
"-ginkgo.json-report=../../../../.cache/addons/logs/proposals.json"
],
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/http/endpoints/addons",
"-ginkgo.json-report=../../../../.cache/addons/logs/proposals-http.json"
]
],
"cases": [
"requires explicit creation authority and keeps pending registrations inaccessible",
"reconciles a registration interrupted by a crash from the durable store",
"keeps a record whose existence cannot be established and settles the rest",
"never drops a committed resource and counts pending quota unchanged",
"retries kept records from the loop on a tick and on a kick, and stops on Close",
"closes a loop that never started without waiting",
"stops admitted work of a revoked user and acknowledges only after it ended",
"lets a racing revocation win against read and write admissions",
"serializes writes per resource while reads run concurrently",
"bounds the revocation wait and does not acknowledge a stuck drain",
"invalidates pending proposals on revoke and downgrade and fails closed when it cannot",
"maps a store outage to unavailable and a disabled account to forbidden",
"maps opaque ids to the trusted addon and owner and keeps an absent policy denying",
"disables sharing in explicit local-owner mode and lets every local caller own the resource",
"refuses a mode switch of populated data without a stopped backed-up migration",
"retains resources and grants across a restart and an uninstall of the package",
"refuses a corrupt store and a second opener",
"caps pending and committed registrations per user and in total",
"applies finite defaults when no limit is configured",
"denies creation as unavailable when the authority cannot tell",
"does not acknowledge a retried downgrade while the lowered user's write still runs",
"retries a failed proposal invalidation after the lowered grant is already durable",
"keeps the drain owed across a restart",
"does not start the work when revocation cancels the admission before run",
"retains resources and grants across a real manager uninstall and restart",
"rejects persisted unknown roles and trailing bytes without resetting the store",
"removes stale temporary files on open",
"stops accepting writes after a failed directory sync and keeps the applied change",
"enforces the viewer editor owner matrix on fixture resources",
"denies installation administrators and unrelated users any access to user data",
"does not leak resource existence and treats unknown actions as owner mutations",
"never grants the owner role or a grant to the owner and the synthetic principals",
"does not cancel work admitted under a later grant when a lowering is retried",
"still waits for and cancels work admitted before the lowering when the regrant is retried",
"stops work admitted after a regrant when the role is lowered again",
"keeps the epoch of the owed drain across a restart",
"keeps a drain mark that a concurrent lowering replaced while a retry was waiting",
"reports an unclassified account or creation check error as unavailable and a definite denial as forbidden",
"rejects anonymous and legacy synthetic principals in named mode",
"checks credential and account status on every admission",
"keeps no current-user state shared between concurrent admissions",
"stores a pending proposal with its exact effects and never executes it",
"applies exactly the stored arguments once and answers a repeat from the stored receipt",
"refuses changed arguments, other actors, unknown identifiers and an unbound digest",
"never lets an API key, plain text or a boolean approve",
"accepts the local owner as the confirming principal in local-owner mode only",
"expires a proposal and refuses a late or repeated confirmation",
"refuses a proposal made stale by a new generation or a moved revision",
"cancels a proposal for good and restricts who may propose which action",
"never accepts sharing, deletion, reads or unclassified actions as proposals",
"cancels pending proposals when authority is lowered and lets a revocation win the confirmation race",
"persists every transition atomically before it is reported",
"does not dispatch when the executing state cannot be made durable",
"keeps a lost reply unknown, blocks conflicting writes and resolves it by receipt without a replay",
"reports a lost reply from the owner's own gateway with the original operation",
"recovers a crash after dispatch by receipt and a crash before dispatch as unknown without replay",
"keeps pending proposals across a restart and never resets a corrupt store",
"bounds the pending proposals of one user and the store as a whole",
"records expiry and collects settled proposals without any read so a quiet clock cannot fill the store",
"records expiry durably when the owner starts and when it recovers",
"keeps settled proposals for the retention window only",
"keeps one user from starving others and never drops another user's live proposal",
"bounds the stored canonical arguments per user and in total with a typed quota error",
"looks an unresolved receipt up again with backoff for a finite window and never applies again",
"lets only the resource owner's browser session abandon an unresolved outcome and then unblocks writes",
"records a late receipt of an abandoned outcome instead of hiding it",
"settles by lookup instead of abandoning when the receipt is final",
"refuses a stored abandonment that names nobody and keeps looking up in the background",
"binds the digest to the operation, actor, resource, generation, action, arguments and revision",
"refuses a stored proposal whose operation, actor, resource, generation or arguments changed at rest",
"issues resource identifiers the envelope contract accepts",
"is unavailable until it is attached to a policy and a runtime",
"keeps executing, outcome-unknown and abandoned records far past retention and still dedupes them",
"waits for the background run and for lookups in flight before it closes, and writes nothing after",
"lets the owner role list the unresolved proposals of its resource and abandon one by the listed digest",
"names the blocking proposal in the denial only to the resource owner",
"refuses an unbound digest when the owner abandons through the gateway or the broker",
"answers the same typed outage for a resolution whoever proposed the operation",
"returns the applied proposal when the owner cannot read it back after a successful apply",
"does not show another user's blocking operation in a proposal view",
"denies a proposal for an undeclared tool before any preview and stores nothing",
"denies a proposal that names a tool when no tool source is installed",
"rechecks the stored tool at confirmation and never applies a withdrawn tool",
"denies a proposal whose arguments repeat a key and stores nothing",
"reports an unavailable declaration source as unavailable, never as a denial",
"does not apply at confirmation while the declaration source is unavailable, and applies once it recovers",
"reserves a create proposal as a pending resource that nobody can reach",
"commits the reservation on confirmation and makes the proposer the private owner",
"abandons the reservation when a create proposal is cancelled or expires",
"abandons the reservation when the addon rejects the creation",
"keeps a lost create reply pending and unknown and settles it by receipt",
"abandons an unknown create only when the addon confirms the backing is absent",
"settles reservations at restart by asking the addon and keeps those of live proposals",
"bounds concurrent create proposals by the pending quota",
"lets only the proposer confirm, cancel or read a create proposal",
"denies a create proposal when creation authority is revoked before confirmation",
"denies a create proposal for an undeclared tool or an existing resource without reserving",
"does not let reconcile drop the reservation of a creation in flight",
"commits the reservation at recovery when the crash came after the receipt was stored",
"never reads an add-on that cannot answer as a backing that is gone",
"accepts the explicit answer of the declared existence tool, true or false",
"holds the resources of one add-on and leaves another add-on alone",
"cancels admitted work and reports a drain that did not finish",
"restores grants through the account directory and the lowerings since the backup, never beyond them",
"keeps a bounded durable log of lowered access",
"keeps a revocation however many later lowerings of another person follow",
"restores the data but no access when the history may have lost a lowering",
"reads a store that is full of lowerings as one whose history may be cut",
"applies a lowering made after the export whatever time the backup is given",
"refuses a change that was authorized just before the hold began",
"cancels a pending proposal and leaves an executing one outcome-unknown after a restore",
"forgets the records of one add-on and no other",
"maps an owner on a restore to a local-owner store only when nothing named is in it",
"migrates the ownership of a stopped store with a backup and an explicit mapping and refuses a populated downgrade",
"refuses a proposal whose preview the add-on refused, storing nothing",
"settles a confirmation the add-on refused as rejected, never as an unknown outcome",
"R34: returns an admission that was refused before the wire to pending, and a repeat applies",
"R35, R52: a hold that cancels the dispatch before the wire ends the proposal as cancelled, not unknown",
"R38: records a conflict of the add-on as rejected, not unknown",
"R39: still records an unknown outcome when the request may have been sent",
"reports a not-sent confirmation through the gateway as an outage that sent nothing, never as unknown",
"is a refusal that changed nothing, not an outage, and leaves the ID free",
"R4, S4: refuses an editor who claims the write action for a schema tool, and stores nothing",
"R4: refuses an editor who names the schema action for a schema tool",
"derives the action from the tool, so the owner needs the matching claim and gets the schema action",
"still lets an editor propose a data write for a write tool",
"R3: refuses a read tool, a create tool and a tool without a definition",
"runs the declaration check as well as the kind check",
"refuses a named tool when the source cannot report kinds",
"R3: a creation names a create tool, never a schema or data tool",
"retry-after-not-sent: R34 then R37",
"addon-conflict-is-rejected: R38",
"timeout-unknown-then-receipt-committed: R39 then R40",
"runs the work for a current account",
"refuses a stale account and does not run the work",
"refuses an identity that does not fit the mode",
"refuses a held add-on as unavailable, and serves it again after the release",
"refuses an empty add-on ID and a nil work function",
"is reached through the gateway provider",
"stores a proposal from an API key and lets only the proposer's browser session confirm it",
"cancels a proposal from the same chain and never lets typed dispatch or relay confirm",
"denies sharing and deletion proposals and an unauthenticated caller",
"serves the local owner's confirmation only from a same-origin fetch of the host page",
"reports a lost reply with the original operation from forwarding frontends and resolves it by receipt",
"lets only the resource owner's browser session abandon an unresolved outcome and then accepts writes",
"lets the owner role list an editor's unresolved proposal and abandon it by the listed digest from every frontend",
"tells an editor of a blocked write only that it is denied",
"returns the applied proposal when the confirmed operation committed",
"answers an owner outage by the owner's state with the same type from every frontend",
"keeps a proposal confirmable by the same ID after the owner could not reach the addon",
"documents the proposal routes and the proposal schema in the Swagger spec",
"serves one owner journal through two real authenticated HTTP frontends and rejects paused keys",
"serves the synthetic owner through the real chain, denies sharing and rejects named callers",
"checks browser CSRF feature and admin access with real stored keys",
"serves a private file result as a safe attachment over real HTTP",
"never renders hostile names or active media types inline",
"answers one 403 for unknown, foreign, incomplete and expired artifacts and requires the feature and a principal",
"denies the download of a disabled addon and serves it again after enable",
"relays the same bytes, headers and denials through two forwarding frontends",
"keeps a file result of a read denied whole without an artifact store",
"serves the local owner's file only in local-owner mode",
"documents the artifact routes and the artifact schema in the Swagger spec",
"rejects anonymous callers and forged forwarding headers",
"gates the feature and then administration for named keys",
"requires same-origin browser requests for cookie mutations",
"registers only the dispatch, relay and proposal mutations",
"reserves every first path segment the host registers under /api/addons",
"gates the artifact routes by authentication and feature",
"gates the proposal routes by feature and refuses a confirmation from a key before the owner is asked",
"rejects anonymous and forged forwarding authority through real authentication",
"lets callers through only when the deployment selected local-owner mode",
"keeps authentication, the feature gate and administration when accounts exist",
"reports an unknown mutation outcome from a forwarding frontend with the original operation",
"documents every field the error responses emit in the Swagger schema",
"reports an unavailable read as plain unavailability",
"reports a denial as forbidden",
"reports an unclassified account check error as unavailable and a definite denial as forbidden",
"reports an unknown mutation outcome from the owner's own frontend with the original operation",
"lists the enabled installed apps for a reader and the disabled ones too for administrators, the same from every frontend",
"lets only administrators start and stop, through the lifecycle manager, and denies a stale generation",
"serves the verified icon through the host route and denies it identically otherwise",
"reports a lost start as an unknown outcome with its original operation and a lost list as unavailable",
"documents the apps routes and every field of the app view in the Swagger spec",
"lists every registered addon route in the feature registry",
"gates the apps routes by authentication, feature and administration",
"serves catalog search, details and the installed management view to administrators only, the same from every frontend",
"refuses every management call of the owner itself for a caller that is not an administrator",
"saves, refreshes and removes a library by reference and leaves installed addons alone",
"upgrades an installed addon through the typed action and keeps its earlier generation",
"reports a lost source change as an unknown outcome and a lost read as unavailable",
"documents the management actions and every emitted field of the installed view",
"serves the declared files of the current package through every frontend with immutable headers",
"lists the same URLs the route serves, and only for an enabled addon",
"denies every other path, digest, addon and credential form with one answer and no immutable caching",
"accepts a same-origin browser session and refuses a cross-site or direct one",
"withdraws the code the moment the addon is disabled, uninstalled or replaced, even for a page that is still open",
"refuses a declared file that is not a regular file of the package",
"documents the asset route and its binary response in the Swagger spec",
"gives the same 403 on the owner and on a forwarding frontend and never contacts the add-on",
"lists the caller's own pending proposals the same from the owner and every forwarding frontend",
"gives every caller with the feature the same status from every frontend, redacted for non-administrators",
"checks only for an administrator's own browser session, and applies nothing",
"upgrades only to the checked candidate, with the same typed refusals from every frontend, and never twice",
"runs two concurrent upgrades from two frontends once: the same ID shares the answer, another ID is a conflict",
"refuses an incompatible candidate and a library that cannot be read, with a typed answer",
"reports a lost upgrade as an unknown outcome with its original operation, and a lost status read or check as plainly unavailable",
"keeps the update actions out of the tools and names every field of the status in the Swagger spec",
"answers an add-on's invalid-request refusal as a typed 400 from the owner and from a forwarding frontend",
"returns the same text through a forwarding frontend",
"Sec-Fetch-Site cross-site is refused even with a Referer on the same host",
"Sec-Fetch-Site same-origin passes",
"Sec-Fetch-Site same-site is refused",
"a request without a session cookie is not guarded",
"no Sec-Fetch-Site and no Origin or Referer is refused",
"no Sec-Fetch-Site with a Referer on the same host passes",
"no Sec-Fetch-Site with a foreign Origin is refused",
"no Sec-Fetch-Site with a foreign Origin is refused even with a Referer on the same host",
"no Sec-Fetch-Site with a foreign Referer is refused",
"no Sec-Fetch-Site with a null Origin is refused",
"no Sec-Fetch-Site with an Origin on the same host passes",
"no Sec-Fetch-Site with the same host on another port is refused",
"matches the host without regard to letter case",
"gives no pins to an account created after the upgrade",
"round-trips pins for the local owner",
"drops IDs the caller cannot see",
"an object",
"numbers",
"not JSON",
"empty",
"null",
"rejects a list over the hard limit",
"does not show Studio and Talk as pins without the add-ons",
"lists add-ons by default, and takes a kind that this host reads",
"is empty because Studio and Talk are packaged add-ons",
"lists every entry without an account database",
"strict same-origin fetch",
"same-origin without destination",
"same-host Referer, no Sec-Fetch headers",
"same-host Origin, no Sec-Fetch headers",
"foreign Referer",
"same host, other port",
"foreign Origin wins over same-host Referer",
"no Origin and no Referer",
"cross-site with same-host Referer",
"same-site with same-host Origin",
"same-host Referer but navigation destination",
"same-host Referer but no-cors mode",
"still refuses a same-host Referer with an API key",
"returns the SDK refusal text, the unverified-package text and the missing-release text to the administrator",
"logs the cause of a failed install and types it for the client",
"logs the reason behind a generic denial and leaves the response unchanged",
"names every typed cause of a failed install in the 403 of the dispatch route"
],
"report": ".cache/addons/logs/proposals.json",
"reports": [
{
"path": ".cache/addons/logs/proposals.json",
"cases": [
"requires explicit creation authority and keeps pending registrations inaccessible",
"reconciles a registration interrupted by a crash from the durable store",
"keeps a record whose existence cannot be established and settles the rest",
"never drops a committed resource and counts pending quota unchanged",
"retries kept records from the loop on a tick and on a kick, and stops on Close",
"closes a loop that never started without waiting",
"stops admitted work of a revoked user and acknowledges only after it ended",
"lets a racing revocation win against read and write admissions",
"serializes writes per resource while reads run concurrently",
"bounds the revocation wait and does not acknowledge a stuck drain",
"invalidates pending proposals on revoke and downgrade and fails closed when it cannot",
"maps a store outage to unavailable and a disabled account to forbidden",
"maps opaque ids to the trusted addon and owner and keeps an absent policy denying",
"disables sharing in explicit local-owner mode and lets every local caller own the resource",
"refuses a mode switch of populated data without a stopped backed-up migration",
"retains resources and grants across a restart and an uninstall of the package",
"refuses a corrupt store and a second opener",
"caps pending and committed registrations per user and in total",
"applies finite defaults when no limit is configured",
"denies creation as unavailable when the authority cannot tell",
"does not acknowledge a retried downgrade while the lowered user's write still runs",
"retries a failed proposal invalidation after the lowered grant is already durable",
"keeps the drain owed across a restart",
"does not start the work when revocation cancels the admission before run",
"retains resources and grants across a real manager uninstall and restart",
"rejects persisted unknown roles and trailing bytes without resetting the store",
"removes stale temporary files on open",
"stops accepting writes after a failed directory sync and keeps the applied change",
"enforces the viewer editor owner matrix on fixture resources",
"denies installation administrators and unrelated users any access to user data",
"does not leak resource existence and treats unknown actions as owner mutations",
"never grants the owner role or a grant to the owner and the synthetic principals",
"does not cancel work admitted under a later grant when a lowering is retried",
"still waits for and cancels work admitted before the lowering when the regrant is retried",
"stops work admitted after a regrant when the role is lowered again",
"keeps the epoch of the owed drain across a restart",
"keeps a drain mark that a concurrent lowering replaced while a retry was waiting",
"reports an unclassified account or creation check error as unavailable and a definite denial as forbidden",
"rejects anonymous and legacy synthetic principals in named mode",
"checks credential and account status on every admission",
"keeps no current-user state shared between concurrent admissions",
"stores a pending proposal with its exact effects and never executes it",
"applies exactly the stored arguments once and answers a repeat from the stored receipt",
"refuses changed arguments, other actors, unknown identifiers and an unbound digest",
"never lets an API key, plain text or a boolean approve",
"accepts the local owner as the confirming principal in local-owner mode only",
"expires a proposal and refuses a late or repeated confirmation",
"refuses a proposal made stale by a new generation or a moved revision",
"cancels a proposal for good and restricts who may propose which action",
"never accepts sharing, deletion, reads or unclassified actions as proposals",
"cancels pending proposals when authority is lowered and lets a revocation win the confirmation race",
"persists every transition atomically before it is reported",
"does not dispatch when the executing state cannot be made durable",
"keeps a lost reply unknown, blocks conflicting writes and resolves it by receipt without a replay",
"reports a lost reply from the owner's own gateway with the original operation",
"recovers a crash after dispatch by receipt and a crash before dispatch as unknown without replay",
"keeps pending proposals across a restart and never resets a corrupt store",
"bounds the pending proposals of one user and the store as a whole",
"records expiry and collects settled proposals without any read so a quiet clock cannot fill the store",
"records expiry durably when the owner starts and when it recovers",
"keeps settled proposals for the retention window only",
"keeps one user from starving others and never drops another user's live proposal",
"bounds the stored canonical arguments per user and in total with a typed quota error",
"looks an unresolved receipt up again with backoff for a finite window and never applies again",
"lets only the resource owner's browser session abandon an unresolved outcome and then unblocks writes",
"records a late receipt of an abandoned outcome instead of hiding it",
"settles by lookup instead of abandoning when the receipt is final",
"refuses a stored abandonment that names nobody and keeps looking up in the background",
"binds the digest to the operation, actor, resource, generation, action, arguments and revision",
"refuses a stored proposal whose operation, actor, resource, generation or arguments changed at rest",
"issues resource identifiers the envelope contract accepts",
"is unavailable until it is attached to a policy and a runtime",
"keeps executing, outcome-unknown and abandoned records far past retention and still dedupes them",
"waits for the background run and for lookups in flight before it closes, and writes nothing after",
"lets the owner role list the unresolved proposals of its resource and abandon one by the listed digest",
"names the blocking proposal in the denial only to the resource owner",
"refuses an unbound digest when the owner abandons through the gateway or the broker",
"answers the same typed outage for a resolution whoever proposed the operation",
"returns the applied proposal when the owner cannot read it back after a successful apply",
"does not show another user's blocking operation in a proposal view",
"denies a proposal for an undeclared tool before any preview and stores nothing",
"denies a proposal that names a tool when no tool source is installed",
"rechecks the stored tool at confirmation and never applies a withdrawn tool",
"denies a proposal whose arguments repeat a key and stores nothing",
"reports an unavailable declaration source as unavailable, never as a denial",
"does not apply at confirmation while the declaration source is unavailable, and applies once it recovers",
"reserves a create proposal as a pending resource that nobody can reach",
"commits the reservation on confirmation and makes the proposer the private owner",
"abandons the reservation when a create proposal is cancelled or expires",
"abandons the reservation when the addon rejects the creation",
"keeps a lost create reply pending and unknown and settles it by receipt",
"abandons an unknown create only when the addon confirms the backing is absent",
"settles reservations at restart by asking the addon and keeps those of live proposals",
"bounds concurrent create proposals by the pending quota",
"lets only the proposer confirm, cancel or read a create proposal",
"denies a create proposal when creation authority is revoked before confirmation",
"denies a create proposal for an undeclared tool or an existing resource without reserving",
"does not let reconcile drop the reservation of a creation in flight",
"commits the reservation at recovery when the crash came after the receipt was stored",
"never reads an add-on that cannot answer as a backing that is gone",
"accepts the explicit answer of the declared existence tool, true or false",
"holds the resources of one add-on and leaves another add-on alone",
"cancels admitted work and reports a drain that did not finish",
"restores grants through the account directory and the lowerings since the backup, never beyond them",
"keeps a bounded durable log of lowered access",
"keeps a revocation however many later lowerings of another person follow",
"restores the data but no access when the history may have lost a lowering",
"reads a store that is full of lowerings as one whose history may be cut",
"applies a lowering made after the export whatever time the backup is given",
"refuses a change that was authorized just before the hold began",
"cancels a pending proposal and leaves an executing one outcome-unknown after a restore",
"forgets the records of one add-on and no other",
"maps an owner on a restore to a local-owner store only when nothing named is in it",
"migrates the ownership of a stopped store with a backup and an explicit mapping and refuses a populated downgrade",
"refuses a proposal whose preview the add-on refused, storing nothing",
"settles a confirmation the add-on refused as rejected, never as an unknown outcome",
"R34: returns an admission that was refused before the wire to pending, and a repeat applies",
"R35, R52: a hold that cancels the dispatch before the wire ends the proposal as cancelled, not unknown",
"R38: records a conflict of the add-on as rejected, not unknown",
"R39: still records an unknown outcome when the request may have been sent",
"reports a not-sent confirmation through the gateway as an outage that sent nothing, never as unknown",
"is a refusal that changed nothing, not an outage, and leaves the ID free",
"R4, S4: refuses an editor who claims the write action for a schema tool, and stores nothing",
"R4: refuses an editor who names the schema action for a schema tool",
"derives the action from the tool, so the owner needs the matching claim and gets the schema action",
"still lets an editor propose a data write for a write tool",
"R3: refuses a read tool, a create tool and a tool without a definition",
"runs the declaration check as well as the kind check",
"refuses a named tool when the source cannot report kinds",
"R3: a creation names a create tool, never a schema or data tool",
"retry-after-not-sent: R34 then R37",
"addon-conflict-is-rejected: R38",
"timeout-unknown-then-receipt-committed: R39 then R40",
"runs the work for a current account",
"refuses a stale account and does not run the work",
"refuses an identity that does not fit the mode",
"refuses a held add-on as unavailable, and serves it again after the release",
"refuses an empty add-on ID and a nil work function",
"is reached through the gateway provider"
]
},
{
"path": ".cache/addons/logs/proposals-http.json",
"cases": [
"stores a proposal from an API key and lets only the proposer's browser session confirm it",
"cancels a proposal from the same chain and never lets typed dispatch or relay confirm",
"denies sharing and deletion proposals and an unauthenticated caller",
"serves the local owner's confirmation only from a same-origin fetch of the host page",
"reports a lost reply with the original operation from forwarding frontends and resolves it by receipt",
"lets only the resource owner's browser session abandon an unresolved outcome and then accepts writes",
"lets the owner role list an editor's unresolved proposal and abandon it by the listed digest from every frontend",
"tells an editor of a blocked write only that it is denied",
"returns the applied proposal when the confirmed operation committed",
"answers an owner outage by the owner's state with the same type from every frontend",
"keeps a proposal confirmable by the same ID after the owner could not reach the addon",
"documents the proposal routes and the proposal schema in the Swagger spec",
"serves one owner journal through two real authenticated HTTP frontends and rejects paused keys",
"serves the synthetic owner through the real chain, denies sharing and rejects named callers",
"checks browser CSRF feature and admin access with real stored keys",
"serves a private file result as a safe attachment over real HTTP",
"never renders hostile names or active media types inline",
"answers one 403 for unknown, foreign, incomplete and expired artifacts and requires the feature and a principal",
"denies the download of a disabled addon and serves it again after enable",
"relays the same bytes, headers and denials through two forwarding frontends",
"keeps a file result of a read denied whole without an artifact store",
"serves the local owner's file only in local-owner mode",
"documents the artifact routes and the artifact schema in the Swagger spec",
"rejects anonymous callers and forged forwarding headers",
"gates the feature and then administration for named keys",
"requires same-origin browser requests for cookie mutations",
"registers only the dispatch, relay and proposal mutations",
"reserves every first path segment the host registers under /api/addons",
"gates the artifact routes by authentication and feature",
"gates the proposal routes by feature and refuses a confirmation from a key before the owner is asked",
"rejects anonymous and forged forwarding authority through real authentication",
"lets callers through only when the deployment selected local-owner mode",
"keeps authentication, the feature gate and administration when accounts exist",
"reports an unknown mutation outcome from a forwarding frontend with the original operation",
"documents every field the error responses emit in the Swagger schema",
"reports an unavailable read as plain unavailability",
"reports a denial as forbidden",
"reports an unclassified account check error as unavailable and a definite denial as forbidden",
"reports an unknown mutation outcome from the owner's own frontend with the original operation",
"lists the enabled installed apps for a reader and the disabled ones too for administrators, the same from every frontend",
"lets only administrators start and stop, through the lifecycle manager, and denies a stale generation",
"serves the verified icon through the host route and denies it identically otherwise",
"reports a lost start as an unknown outcome with its original operation and a lost list as unavailable",
"documents the apps routes and every field of the app view in the Swagger spec",
"lists every registered addon route in the feature registry",
"gates the apps routes by authentication, feature and administration",
"serves catalog search, details and the installed management view to administrators only, the same from every frontend",
"refuses every management call of the owner itself for a caller that is not an administrator",
"saves, refreshes and removes a library by reference and leaves installed addons alone",
"upgrades an installed addon through the typed action and keeps its earlier generation",
"reports a lost source change as an unknown outcome and a lost read as unavailable",
"documents the management actions and every emitted field of the installed view",
"serves the declared files of the current package through every frontend with immutable headers",
"lists the same URLs the route serves, and only for an enabled addon",
"denies every other path, digest, addon and credential form with one answer and no immutable caching",
"accepts a same-origin browser session and refuses a cross-site or direct one",
"withdraws the code the moment the addon is disabled, uninstalled or replaced, even for a page that is still open",
"refuses a declared file that is not a regular file of the package",
"documents the asset route and its binary response in the Swagger spec",
"gives the same 403 on the owner and on a forwarding frontend and never contacts the add-on",
"lists the caller's own pending proposals the same from the owner and every forwarding frontend",
"gives every caller with the feature the same status from every frontend, redacted for non-administrators",
"checks only for an administrator's own browser session, and applies nothing",
"upgrades only to the checked candidate, with the same typed refusals from every frontend, and never twice",
"runs two concurrent upgrades from two frontends once: the same ID shares the answer, another ID is a conflict",
"refuses an incompatible candidate and a library that cannot be read, with a typed answer",
"reports a lost upgrade as an unknown outcome with its original operation, and a lost status read or check as plainly unavailable",
"keeps the update actions out of the tools and names every field of the status in the Swagger spec",
"answers an add-on's invalid-request refusal as a typed 400 from the owner and from a forwarding frontend",
"returns the same text through a forwarding frontend",
"Sec-Fetch-Site cross-site is refused even with a Referer on the same host",
"Sec-Fetch-Site same-origin passes",
"Sec-Fetch-Site same-site is refused",
"a request without a session cookie is not guarded",
"no Sec-Fetch-Site and no Origin or Referer is refused",
"no Sec-Fetch-Site with a Referer on the same host passes",
"no Sec-Fetch-Site with a foreign Origin is refused",
"no Sec-Fetch-Site with a foreign Origin is refused even with a Referer on the same host",
"no Sec-Fetch-Site with a foreign Referer is refused",
"no Sec-Fetch-Site with a null Origin is refused",
"no Sec-Fetch-Site with an Origin on the same host passes",
"no Sec-Fetch-Site with the same host on another port is refused",
"matches the host without regard to letter case",
"gives no pins to an account created after the upgrade",
"round-trips pins for the local owner",
"drops IDs the caller cannot see",
"an object",
"numbers",
"not JSON",
"empty",
"null",
"rejects a list over the hard limit",
"does not show Studio and Talk as pins without the add-ons",
"lists add-ons by default, and takes a kind that this host reads",
"is empty because Studio and Talk are packaged add-ons",
"lists every entry without an account database",
"strict same-origin fetch",
"same-origin without destination",
"same-host Referer, no Sec-Fetch headers",
"same-host Origin, no Sec-Fetch headers",
"foreign Referer",
"same host, other port",
"foreign Origin wins over same-host Referer",
"no Origin and no Referer",
"cross-site with same-host Referer",
"same-site with same-host Origin",
"same-host Referer but navigation destination",
"same-host Referer but no-cors mode",
"still refuses a same-host Referer with an API key",
"returns the SDK refusal text, the unverified-package text and the missing-release text to the administrator",
"logs the cause of a failed install and types it for the client",
"logs the reason behind a generic denial and leaves the response unchanged",
"names every typed cause of a failed install in the 403 of the dispatch route"
]
}
]
},
"artifacts": {
"kind": "ginkgo",
"commands": [
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/services/addons/artifacts",
"-ginkgo.json-report=../../../../.cache/addons/logs/artifacts.json"
],
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/services/addons/gateway",
"-ginkgo.json-report=../../../../.cache/addons/logs/artifacts-gateway.json"
],
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/http/endpoints/addons",
"-ginkgo.json-report=../../../../.cache/addons/logs/artifacts-http.json"
]
],
"cases": [
"adopts every output of a result or none, and shows the owner only its own status",
"sanitizes attachment names and maps media types to a fixed allowlist",
"applies finite default limits and rejects partial or unbounded overrides",
"keeps staged bytes behind the object store boundary and publishes only complete writes",
"never serves an artifact at or after expiry, including during admission and mid-stream",
"fails a transfer that outlives its artifact",
"fails a transfer whose source is revoked before completion and denies a revoked download",
"stops a download stream when the source is revoked mid-stream",
"requires read access to every source resource at completion and download",
"denies a disabled or unavailable account at ingestion and download",
"denies downloads of a disabled addon, keeps the bytes and serves again only while unexpired with current permissions",
"denies downloads after uninstall and removes the bytes at the next sweep",
"sweeps expired artifacts, abandoned partials and orphan files without touching live transfers",
"enforces per-user, total and size limits atomically under concurrent ingestion",
"bounds concurrent transfers and concurrent downloads",
"cancels a transfer by its context or by its owner and removes the partial bytes",
"returns the same artifact for a repeated request without a second transfer",
"keeps addon handles operation-bound and out of metadata and views",
"keeps complete artifacts across a restart and settles interrupted transfers",
"keeps the bytes of a transfer that completes while a sweep is running",
"never loses the bytes of a complete artifact when sweeps race with several completing transfers",
"answers a transient storage error as unavailable and keeps the bytes and the record",
"marks an artifact corrupt only for missing bytes or a size mismatch",
"answers a download that races with an expiry or a drop like any expired identifier",
"refuses a corrupt metadata store and stops writing after a failed sync",
"waits for background transfers before Close returns and writes nothing after",
"ingests a file result into a private staged artifact with a host-generated identifier",
"never uses an addon handle, URL or path as an identifier or a file path",
"answers one denial for an unknown identifier and for another principal's artifact",
"never serves incomplete, short, long or failed transfers and removes their partial bytes",
"streams ingestion and download without buffering the whole file",
"rejects an output declared larger than one artifact may be before reading it",
"never opens an output for a request that names a tool no source declares",
"denies an output request whose arguments repeat a key and never opens the output",
"reports an unavailable declaration source as unavailable and never opens the output",
"shortens the lifetime and keeps the bounds consistent, and zero keeps the defaults",
"fails the artifact with a fixed reason that says it was refused, not that the add-on is down",
"reports a runtime that cannot serve as unavailable through both frontends",
"reports an output that ends before its first byte as unavailable",
"fails closed as unavailable for an unclassified owner error",
"keeps authorization and policy denials forbidden",
"keeps a mutation unknown when the runtime fails after the owner applied it",
"keeps a mutation unknown when the owner reports recovery required for its operation",
"reports a mutation as unknown when the owner cannot serve it at all",
"keeps a mutation unknown on the owner's own frontend and leaves reads and denials alone",
"lets unavailability win when an error wraps both a denial and an unavailable cause",
"does not leak attachment headers into an error when the first read fails",
"fails closed without current identity or resource policy and reports the original ID of an unknown mutation outcome",
"carries the chat binding signed and rejects a changed one",
"signs a request without a binding as before",
"gives the owner the chat the frontend bound the call to",
"says nothing was sent when the add-on is not running, instead of an unknown outcome",
"runs a declared action tool for the calling user, under the act scope, admitted as an add-on call",
"is not reachable through the typed dispatch of the direct API",
"refuses what is not a declared action tool",
"refuses an add-on that did not declare actions",
"is unavailable when the runtime does not serve action tools, and never runs for an unvalidated user",
"reports an unknown outcome, not a refusal, when the runtime fails after the call began",
"returns the artifact status through the owner from every frontend with one denial for the rest",
"types the owner's refusal and outage of a lookup the same from every frontend",
"writes an attachment header that cannot be broken out of",
"rejects unknown lifecycle argument fields before touching the owner journal",
"is not permitted when the add-on denies the person, on the owner and on a forwarding frontend",
"is an unreachable resource when the policy denies it, on the owner and on a forwarding frontend",
"types the denial of a read like the denial of a write, on the owner and on a forwarding frontend",
"crosses the wire of a resource call typed, so a forwarding frontend answers like the owner",
"keeps any other failure to resolve a resource a plain denial, so nothing more is told",
"reports an account store outage as unavailable and a refused account as forbidden",
"propagates interrupted progress cancellation through the receiving frontend",
"round trips installed typed home metadata over mTLS with owner actor visibility and immutable asset URLs",
"returns the owner's forbidden status for an invalid kind and for missing policy",
"still reports unavailable when the owner is unable to serve and not forbidden",
"reaches the same decision through both frontends and delivers bytes when allowed",
"keeps aborting when revocation happens after bytes were written",
"validates finite relay budgets and prevents disabling polling bounds",
"treats every action except the known reads as a mutation",
"reads typed status and preserves named tool and host operation IDs through a supervised process",
"rejects a captured supervised client after same generation replacement before carrier dispatch",
"rejects a late supervised carrier observation after replacement before owner consumption",
"serves only declared installed generation assets and rejects traversal",
"builds a carrier only from complete pinned identities",
"types an unknown mutation outcome as unavailable without losing its operation",
"passes through owner-resolved bindings with distinct provider and status names",
"rejects a CA signed peer without a pin on the owner side",
"refuses an owner whose CA signed certificate is not the pinned owner",
"crosses the owner's wire as the same typed error, whatever the frontend",
"does not trust a code the host does not know, and cleans the detail the add-on wrote",
"is a stale view for a caller that only knows ErrStale, and a denial otherwise",
"is a mutation on the carrier: a lost answer is an unknown outcome, never a plain outage",
"never expires the response deadline after the relay returned",
"runs on the owner for the actor the signature binds, and the typed direct dispatch still refuses it",
"keeps the answer of a call that outlasts the write timeout of the owner server",
"is an unknown outcome when the answer is lost",
"refuses at ingest a file result larger than the relay file bound so nothing unservable is staged",
"preserves bounded owner admission refusals over mTLS without frontend grants",
"rejects untrusted peers wrong audience body expiry replay and revoked credentials",
"writes the set with private modes and no CA key",
"loads both roles into carriers and serves a frontend call from the owner",
"gives the owner no signing key and the frontend its own",
"accepts two frontends made from the same set",
"refuses a frontend from another generation",
"reads only the files of the role",
"refuses a key file with group or other access",
"refuses an unknown role",
"refuses to overwrite a file and leaves it unchanged",
"needs an owner host",
"allows only an exact declared tool name and fails closed otherwise",
"never contacts the add-on for an undeclared tool and still serves a declared one",
"denies a repeated key at any depth however it is spelled",
"denies arguments that are not exactly one object",
"separates a denial from an unavailable declaration source",
"answers 503 and never contacts the add-on when the source is unavailable or the arguments repeat a key",
"runs the backend-releases check for a pinned frontend without an actor",
"refuses a system call from a peer that is not pinned",
"never lets a system call change anything or ride the user-facing route",
"denies private relays without host resolution and admission",
"resolves only the authenticated claim over actual mTLS",
"fails closed on unsupported owners and mismatched binding replies",
"serves declared assets of the current enabled generation by package digest only",
"bounds progress, asset and file relays by their own limit",
"reads the exact uiOnly status tool locally and over authenticated mTLS",
"refuses forged identities tools current selections and incarnations without dispatch",
"rejects stale carrier replies and frontend authority fields without dispatch",
"refuses forged observations through the real carrier and ignores ordinary dispatch attempts",
"does not relay a captured old binding to a same-generation replacement",
"settles parent cancellation and owner permission loss as unknown",
"does not grant owner selection authority through wire capability support",
"rejects duplicate noncanonical and nested authority keys in observation DTOs",
"withdraws a positive late reply when exact-client admission becomes stale",
"adopts read outputs as private artifacts inside admission and replaces a forged resource identity",
"rotates the enforced audience on restart and rejects captured requests",
"keeps resolved resources under admission for JSON and attachment bytes",
"closes interrupted output and releases admission on disconnect",
"rechecks revoked credentials during attachment copying",
"alternates real owner journal status and terminates coarse progress without submitting again",
"keeps its address stable across starts",
"does not share state between different roots",
"fails clearly when the port is in use",
"rejects an invalid port file",
"rejects a port file with a loose mode",
"rejects a port file that links outside the root",
"is the typed invalid request on the owner for a read, never an outage",
"is the typed invalid request on the owner for a proposal call",
"is the typed invalid request on the owner for a json relay",
"is the same typed answer from a forwarding frontend",
"runs a resource-less read tool for the calling user only",
"denies a tool that declares a resource when none is given, and never reaches the add-on",
"denies a resource-less read when the admission cannot admit an add-on, or the tool is undeclared",
"alternates pinned frontends and rejects untrusted certificates without local fallback",
"reports the original operation after lost mutation replies without retrying",
"rejects a stream longer than its receiving frontend budget",
"reports an unclassified account check error as unavailable on every path and a wrapped denial as forbidden",
"stores a proposal from an API key and lets only the proposer's browser session confirm it",
"cancels a proposal from the same chain and never lets typed dispatch or relay confirm",
"denies sharing and deletion proposals and an unauthenticated caller",
"serves the local owner's confirmation only from a same-origin fetch of the host page",
"reports a lost reply with the original operation from forwarding frontends and resolves it by receipt",
"lets only the resource owner's browser session abandon an unresolved outcome and then accepts writes",
"lets the owner role list an editor's unresolved proposal and abandon it by the listed digest from every frontend",
"tells an editor of a blocked write only that it is denied",
"returns the applied proposal when the confirmed operation committed",
"answers an owner outage by the owner's state with the same type from every frontend",
"keeps a proposal confirmable by the same ID after the owner could not reach the addon",
"documents the proposal routes and the proposal schema in the Swagger spec",
"serves one owner journal through two real authenticated HTTP frontends and rejects paused keys",
"serves the synthetic owner through the real chain, denies sharing and rejects named callers",
"checks browser CSRF feature and admin access with real stored keys",
"serves a private file result as a safe attachment over real HTTP",
"never renders hostile names or active media types inline",
"answers one 403 for unknown, foreign, incomplete and expired artifacts and requires the feature and a principal",
"denies the download of a disabled addon and serves it again after enable",
"relays the same bytes, headers and denials through two forwarding frontends",
"keeps a file result of a read denied whole without an artifact store",
"serves the local owner's file only in local-owner mode",
"documents the artifact routes and the artifact schema in the Swagger spec",
"rejects anonymous callers and forged forwarding headers",
"gates the feature and then administration for named keys",
"requires same-origin browser requests for cookie mutations",
"registers only the dispatch, relay and proposal mutations",
"reserves every first path segment the host registers under /api/addons",
"gates the artifact routes by authentication and feature",
"gates the proposal routes by feature and refuses a confirmation from a key before the owner is asked",
"rejects anonymous and forged forwarding authority through real authentication",
"lets callers through only when the deployment selected local-owner mode",
"keeps authentication, the feature gate and administration when accounts exist",
"reports an unknown mutation outcome from a forwarding frontend with the original operation",
"documents every field the error responses emit in the Swagger schema",
"reports an unavailable read as plain unavailability",
"reports a denial as forbidden",
"reports an unclassified account check error as unavailable and a definite denial as forbidden",
"reports an unknown mutation outcome from the owner's own frontend with the original operation",
"lists the enabled installed apps for a reader and the disabled ones too for administrators, the same from every frontend",
"lets only administrators start and stop, through the lifecycle manager, and denies a stale generation",
"serves the verified icon through the host route and denies it identically otherwise",
"reports a lost start as an unknown outcome with its original operation and a lost list as unavailable",
"documents the apps routes and every field of the app view in the Swagger spec",
"lists every registered addon route in the feature registry",
"gates the apps routes by authentication, feature and administration",
"serves catalog search, details and the installed management view to administrators only, the same from every frontend",
"refuses every management call of the owner itself for a caller that is not an administrator",
"saves, refreshes and removes a library by reference and leaves installed addons alone",
"upgrades an installed addon through the typed action and keeps its earlier generation",
"reports a lost source change as an unknown outcome and a lost read as unavailable",
"documents the management actions and every emitted field of the installed view",
"serves the declared files of the current package through every frontend with immutable headers",
"lists the same URLs the route serves, and only for an enabled addon",
"denies every other path, digest, addon and credential form with one answer and no immutable caching",
"accepts a same-origin browser session and refuses a cross-site or direct one",
"withdraws the code the moment the addon is disabled, uninstalled or replaced, even for a page that is still open",
"refuses a declared file that is not a regular file of the package",
"documents the asset route and its binary response in the Swagger spec",
"gives the same 403 on the owner and on a forwarding frontend and never contacts the add-on",
"lists the caller's own pending proposals the same from the owner and every forwarding frontend",
"gives every caller with the feature the same status from every frontend, redacted for non-administrators",
"checks only for an administrator's own browser session, and applies nothing",
"upgrades only to the checked candidate, with the same typed refusals from every frontend, and never twice",
"runs two concurrent upgrades from two frontends once: the same ID shares the answer, another ID is a conflict",
"refuses an incompatible candidate and a library that cannot be read, with a typed answer",
"reports a lost upgrade as an unknown outcome with its original operation, and a lost status read or check as plainly unavailable",
"keeps the update actions out of the tools and names every field of the status in the Swagger spec",
"answers an add-on's invalid-request refusal as a typed 400 from the owner and from a forwarding frontend",
"returns the same text through a forwarding frontend",
"Sec-Fetch-Site cross-site is refused even with a Referer on the same host",
"Sec-Fetch-Site same-origin passes",
"Sec-Fetch-Site same-site is refused",
"a request without a session cookie is not guarded",
"no Sec-Fetch-Site and no Origin or Referer is refused",
"no Sec-Fetch-Site with a Referer on the same host passes",
"no Sec-Fetch-Site with a foreign Origin is refused",
"no Sec-Fetch-Site with a foreign Origin is refused even with a Referer on the same host",
"no Sec-Fetch-Site with a foreign Referer is refused",
"no Sec-Fetch-Site with a null Origin is refused",
"no Sec-Fetch-Site with an Origin on the same host passes",
"no Sec-Fetch-Site with the same host on another port is refused",
"matches the host without regard to letter case",
"gives no pins to an account created after the upgrade",
"round-trips pins for the local owner",
"drops IDs the caller cannot see",
"an object",
"numbers",
"not JSON",
"empty",
"null",
"rejects a list over the hard limit",
"does not show Studio and Talk as pins without the add-ons",
"lists add-ons by default, and takes a kind that this host reads",
"is empty because Studio and Talk are packaged add-ons",
"lists every entry without an account database",
"strict same-origin fetch",
"same-origin without destination",
"same-host Referer, no Sec-Fetch headers",
"same-host Origin, no Sec-Fetch headers",
"foreign Referer",
"same host, other port",
"foreign Origin wins over same-host Referer",
"no Origin and no Referer",
"cross-site with same-host Referer",
"same-site with same-host Origin",
"same-host Referer but navigation destination",
"same-host Referer but no-cors mode",
"still refuses a same-host Referer with an API key",
"returns the SDK refusal text, the unverified-package text and the missing-release text to the administrator",
"logs the cause of a failed install and types it for the client",
"logs the reason behind a generic denial and leaves the response unchanged",
"names every typed cause of a failed install in the 403 of the dispatch route",
"projects private policy safely",
"forwards authenticated owner decisions",
"validates strict request payloads",
"checks CAS and administrator authority",
"validates current selection and authenticated actor",
"accepts canonical bindings and rejects aliases and duplicates",
"rejects aliases, duplicate fields and null claims",
"wrong object",
"additional properties true",
"additional properties absent",
"required",
"enum",
"unknown schema keyword",
"malformed required",
"resource",
"admin",
"status uiOnly",
"status kind",
"action uiOnly",
"action kind",
"shadow",
"accepts before a slow backup, detaches the request and polls through either frontend"
],
"report": ".cache/addons/logs/artifacts.json",
"reports": [
{
"path": ".cache/addons/logs/artifacts.json",
"cases": [
"adopts every output of a result or none, and shows the owner only its own status",
"sanitizes attachment names and maps media types to a fixed allowlist",
"applies finite default limits and rejects partial or unbounded overrides",
"keeps staged bytes behind the object store boundary and publishes only complete writes",
"never serves an artifact at or after expiry, including during admission and mid-stream",
"fails a transfer that outlives its artifact",
"fails a transfer whose source is revoked before completion and denies a revoked download",
"stops a download stream when the source is revoked mid-stream",
"requires read access to every source resource at completion and download",
"denies a disabled or unavailable account at ingestion and download",
"denies downloads of a disabled addon, keeps the bytes and serves again only while unexpired with current permissions",
"denies downloads after uninstall and removes the bytes at the next sweep",
"sweeps expired artifacts, abandoned partials and orphan files without touching live transfers",
"enforces per-user, total and size limits atomically under concurrent ingestion",
"bounds concurrent transfers and concurrent downloads",
"cancels a transfer by its context or by its owner and removes the partial bytes",
"returns the same artifact for a repeated request without a second transfer",
"keeps addon handles operation-bound and out of metadata and views",
"keeps complete artifacts across a restart and settles interrupted transfers",
"keeps the bytes of a transfer that completes while a sweep is running",
"never loses the bytes of a complete artifact when sweeps race with several completing transfers",
"answers a transient storage error as unavailable and keeps the bytes and the record",
"marks an artifact corrupt only for missing bytes or a size mismatch",
"answers a download that races with an expiry or a drop like any expired identifier",
"refuses a corrupt metadata store and stops writing after a failed sync",
"waits for background transfers before Close returns and writes nothing after",
"ingests a file result into a private staged artifact with a host-generated identifier",
"never uses an addon handle, URL or path as an identifier or a file path",
"answers one denial for an unknown identifier and for another principal's artifact",
"never serves incomplete, short, long or failed transfers and removes their partial bytes",
"streams ingestion and download without buffering the whole file",
"rejects an output declared larger than one artifact may be before reading it",
"never opens an output for a request that names a tool no source declares",
"denies an output request whose arguments repeat a key and never opens the output",
"reports an unavailable declaration source as unavailable and never opens the output",
"shortens the lifetime and keeps the bounds consistent, and zero keeps the defaults",
"fails the artifact with a fixed reason that says it was refused, not that the add-on is down"
]
},
{
"path": ".cache/addons/logs/artifacts-gateway.json",
"cases": [
"rejects a CA signed peer without a pin on the owner side",
"refuses an owner whose CA signed certificate is not the pinned owner",
"rejects unknown lifecycle argument fields before touching the owner journal",
"adopts read outputs as private artifacts inside admission and replaces a forged resource identity",
"reports an account store outage as unavailable and a refused account as forbidden",
"alternates real owner journal status and terminates coarse progress without submitting again",
"returns the owner's forbidden status for an invalid kind and for missing policy",
"still reports unavailable when the owner is unable to serve and not forbidden",
"reaches the same decision through both frontends and delivers bytes when allowed",
"keeps aborting when revocation happens after bytes were written",
"fails closed without current identity or resource policy and reports the original ID of an unknown mutation outcome",
"refuses at ingest a file result larger than the relay file bound so nothing unservable is staged",
"projects private policy safely",
"forwards authenticated owner decisions",
"validates strict request payloads",
"checks CAS and administrator authority",
"validates current selection and authenticated actor",
"round trips installed typed home metadata over mTLS with owner actor visibility and immutable asset URLs",
"rotates the enforced audience on restart and rejects captured requests",
"passes through owner-resolved bindings with distinct provider and status names",
"writes the set with private modes and no CA key",
"loads both roles into carriers and serves a frontend call from the owner",
"gives the owner no signing key and the frontend its own",
"accepts two frontends made from the same set",
"refuses a frontend from another generation",
"reads only the files of the role",
"refuses a key file with group or other access",
"refuses an unknown role",
"refuses to overwrite a file and leaves it unchanged",
"needs an owner host",
"builds a carrier only from complete pinned identities",
"types an unknown mutation outcome as unavailable without losing its operation",
"rejects untrusted peers wrong audience body expiry replay and revoked credentials",
"is not permitted when the add-on denies the person, on the owner and on a forwarding frontend",
"is an unreachable resource when the policy denies it, on the owner and on a forwarding frontend",
"types the denial of a read like the denial of a write, on the owner and on a forwarding frontend",
"crosses the wire of a resource call typed, so a forwarding frontend answers like the owner",
"keeps any other failure to resolve a resource a plain denial, so nothing more is told",
"preserves bounded owner admission refusals over mTLS without frontend grants",
"accepts canonical bindings and rejects aliases and duplicates",
"keeps resolved resources under admission for JSON and attachment bytes",
"closes interrupted output and releases admission on disconnect",
"rechecks revoked credentials during attachment copying",
"denies private relays without host resolution and admission",
"carries the chat binding signed and rejects a changed one",
"signs a request without a binding as before",
"gives the owner the chat the frontend bound the call to",
"bounds progress, asset and file relays by their own limit",
"returns the artifact status through the owner from every frontend with one denial for the rest",
"types the owner's refusal and outage of a lookup the same from every frontend",
"writes an attachment header that cannot be broken out of",
"rejects aliases, duplicate fields and null claims",
"runs the backend-releases check for a pinned frontend without an actor",
"refuses a system call from a peer that is not pinned",
"never lets a system call change anything or ride the user-facing route",
"wrong object",
"additional properties true",
"additional properties absent",
"required",
"enum",
"unknown schema keyword",
"malformed required",
"resource",
"admin",
"status uiOnly",
"status kind",
"action uiOnly",
"action kind",
"shadow",
"reads the exact uiOnly status tool locally and over authenticated mTLS",
"refuses forged identities tools current selections and incarnations without dispatch",
"rejects stale carrier replies and frontend authority fields without dispatch",
"refuses forged observations through the real carrier and ignores ordinary dispatch attempts",
"does not relay a captured old binding to a same-generation replacement",
"settles parent cancellation and owner permission loss as unknown",
"does not grant owner selection authority through wire capability support",
"rejects duplicate noncanonical and nested authority keys in observation DTOs",
"withdraws a positive late reply when exact-client admission becomes stale",
"serves only declared installed generation assets and rejects traversal",
"accepts before a slow backup, detaches the request and polls through either frontend",
"reads typed status and preserves named tool and host operation IDs through a supervised process",
"rejects a captured supervised client after same generation replacement before carrier dispatch",
"rejects a late supervised carrier observation after replacement before owner consumption",
"resolves only the authenticated claim over actual mTLS",
"fails closed on unsupported owners and mismatched binding replies",
"runs a resource-less read tool for the calling user only",
"denies a tool that declares a resource when none is given, and never reaches the add-on",
"denies a resource-less read when the admission cannot admit an add-on, or the tool is undeclared",
"never expires the response deadline after the relay returned",
"propagates interrupted progress cancellation through the receiving frontend",
"reports a runtime that cannot serve as unavailable through both frontends",
"reports an output that ends before its first byte as unavailable",
"fails closed as unavailable for an unclassified owner error",
"keeps authorization and policy denials forbidden",
"keeps a mutation unknown when the runtime fails after the owner applied it",
"keeps a mutation unknown when the owner reports recovery required for its operation",
"reports a mutation as unknown when the owner cannot serve it at all",
"keeps a mutation unknown on the owner's own frontend and leaves reads and denials alone",
"lets unavailability win when an error wraps both a denial and an unavailable cause",
"does not leak attachment headers into an error when the first read fails",
"keeps its address stable across starts",
"does not share state between different roots",
"fails clearly when the port is in use",
"rejects an invalid port file",
"rejects a port file with a loose mode",
"rejects a port file that links outside the root",
"allows only an exact declared tool name and fails closed otherwise",
"never contacts the add-on for an undeclared tool and still serves a declared one",
"denies a repeated key at any depth however it is spelled",
"denies arguments that are not exactly one object",
"separates a denial from an unavailable declaration source",
"answers 503 and never contacts the add-on when the source is unavailable or the arguments repeat a key",
"crosses the owner's wire as the same typed error, whatever the frontend",
"does not trust a code the host does not know, and cleans the detail the add-on wrote",
"is a stale view for a caller that only knows ErrStale, and a denial otherwise",
"is a mutation on the carrier: a lost answer is an unknown outcome, never a plain outage",
"alternates pinned frontends and rejects untrusted certificates without local fallback",
"reports the original operation after lost mutation replies without retrying",
"rejects a stream longer than its receiving frontend budget",
"treats every action except the known reads as a mutation",
"is the typed invalid request on the owner for a read, never an outage",
"is the typed invalid request on the owner for a proposal call",
"is the typed invalid request on the owner for a json relay",
"is the same typed answer from a forwarding frontend",
"runs on the owner for the actor the signature binds, and the typed direct dispatch still refuses it",
"keeps the answer of a call that outlasts the write timeout of the owner server",
"is an unknown outcome when the answer is lost",
"reports an unclassified account check error as unavailable on every path and a wrapped denial as forbidden",
"says nothing was sent when the add-on is not running, instead of an unknown outcome",
"runs a declared action tool for the calling user, under the act scope, admitted as an add-on call",
"is not reachable through the typed dispatch of the direct API",
"refuses what is not a declared action tool",
"refuses an add-on that did not declare actions",
"is unavailable when the runtime does not serve action tools, and never runs for an unvalidated user",
"reports an unknown outcome, not a refusal, when the runtime fails after the call began",
"validates finite relay budgets and prevents disabling polling bounds",
"serves declared assets of the current enabled generation by package digest only"
]
},
{
"path": ".cache/addons/logs/artifacts-http.json",
"cases": [
"stores a proposal from an API key and lets only the proposer's browser session confirm it",
"cancels a proposal from the same chain and never lets typed dispatch or relay confirm",
"denies sharing and deletion proposals and an unauthenticated caller",
"serves the local owner's confirmation only from a same-origin fetch of the host page",
"reports a lost reply with the original operation from forwarding frontends and resolves it by receipt",
"lets only the resource owner's browser session abandon an unresolved outcome and then accepts writes",
"lets the owner role list an editor's unresolved proposal and abandon it by the listed digest from every frontend",
"tells an editor of a blocked write only that it is denied",
"returns the applied proposal when the confirmed operation committed",
"answers an owner outage by the owner's state with the same type from every frontend",
"keeps a proposal confirmable by the same ID after the owner could not reach the addon",
"documents the proposal routes and the proposal schema in the Swagger spec",
"serves one owner journal through two real authenticated HTTP frontends and rejects paused keys",
"serves the synthetic owner through the real chain, denies sharing and rejects named callers",
"checks browser CSRF feature and admin access with real stored keys",
"serves a private file result as a safe attachment over real HTTP",
"never renders hostile names or active media types inline",
"answers one 403 for unknown, foreign, incomplete and expired artifacts and requires the feature and a principal",
"denies the download of a disabled addon and serves it again after enable",
"relays the same bytes, headers and denials through two forwarding frontends",
"keeps a file result of a read denied whole without an artifact store",
"serves the local owner's file only in local-owner mode",
"documents the artifact routes and the artifact schema in the Swagger spec",
"rejects anonymous callers and forged forwarding headers",
"gates the feature and then administration for named keys",
"requires same-origin browser requests for cookie mutations",
"registers only the dispatch, relay and proposal mutations",
"reserves every first path segment the host registers under /api/addons",
"gates the artifact routes by authentication and feature",
"gates the proposal routes by feature and refuses a confirmation from a key before the owner is asked",
"rejects anonymous and forged forwarding authority through real authentication",
"lets callers through only when the deployment selected local-owner mode",
"keeps authentication, the feature gate and administration when accounts exist",
"reports an unknown mutation outcome from a forwarding frontend with the original operation",
"documents every field the error responses emit in the Swagger schema",
"reports an unavailable read as plain unavailability",
"reports a denial as forbidden",
"reports an unclassified account check error as unavailable and a definite denial as forbidden",
"reports an unknown mutation outcome from the owner's own frontend with the original operation",
"lists the enabled installed apps for a reader and the disabled ones too for administrators, the same from every frontend",
"lets only administrators start and stop, through the lifecycle manager, and denies a stale generation",
"serves the verified icon through the host route and denies it identically otherwise",
"reports a lost start as an unknown outcome with its original operation and a lost list as unavailable",
"documents the apps routes and every field of the app view in the Swagger spec",
"lists every registered addon route in the feature registry",
"gates the apps routes by authentication, feature and administration",
"serves catalog search, details and the installed management view to administrators only, the same from every frontend",
"refuses every management call of the owner itself for a caller that is not an administrator",
"saves, refreshes and removes a library by reference and leaves installed addons alone",
"upgrades an installed addon through the typed action and keeps its earlier generation",
"reports a lost source change as an unknown outcome and a lost read as unavailable",
"documents the management actions and every emitted field of the installed view",
"serves the declared files of the current package through every frontend with immutable headers",
"lists the same URLs the route serves, and only for an enabled addon",
"denies every other path, digest, addon and credential form with one answer and no immutable caching",
"accepts a same-origin browser session and refuses a cross-site or direct one",
"withdraws the code the moment the addon is disabled, uninstalled or replaced, even for a page that is still open",
"refuses a declared file that is not a regular file of the package",
"documents the asset route and its binary response in the Swagger spec",
"gives the same 403 on the owner and on a forwarding frontend and never contacts the add-on",
"lists the caller's own pending proposals the same from the owner and every forwarding frontend",
"gives every caller with the feature the same status from every frontend, redacted for non-administrators",
"checks only for an administrator's own browser session, and applies nothing",
"upgrades only to the checked candidate, with the same typed refusals from every frontend, and never twice",
"runs two concurrent upgrades from two frontends once: the same ID shares the answer, another ID is a conflict",
"refuses an incompatible candidate and a library that cannot be read, with a typed answer",
"reports a lost upgrade as an unknown outcome with its original operation, and a lost status read or check as plainly unavailable",
"keeps the update actions out of the tools and names every field of the status in the Swagger spec",
"answers an add-on's invalid-request refusal as a typed 400 from the owner and from a forwarding frontend",
"returns the same text through a forwarding frontend",
"Sec-Fetch-Site cross-site is refused even with a Referer on the same host",
"Sec-Fetch-Site same-origin passes",
"Sec-Fetch-Site same-site is refused",
"a request without a session cookie is not guarded",
"no Sec-Fetch-Site and no Origin or Referer is refused",
"no Sec-Fetch-Site with a Referer on the same host passes",
"no Sec-Fetch-Site with a foreign Origin is refused",
"no Sec-Fetch-Site with a foreign Origin is refused even with a Referer on the same host",
"no Sec-Fetch-Site with a foreign Referer is refused",
"no Sec-Fetch-Site with a null Origin is refused",
"no Sec-Fetch-Site with an Origin on the same host passes",
"no Sec-Fetch-Site with the same host on another port is refused",
"matches the host without regard to letter case",
"gives no pins to an account created after the upgrade",
"round-trips pins for the local owner",
"drops IDs the caller cannot see",
"an object",
"numbers",
"not JSON",
"empty",
"null",
"rejects a list over the hard limit",
"does not show Studio and Talk as pins without the add-ons",
"lists add-ons by default, and takes a kind that this host reads",
"is empty because Studio and Talk are packaged add-ons",
"lists every entry without an account database",
"strict same-origin fetch",
"same-origin without destination",
"same-host Referer, no Sec-Fetch headers",
"same-host Origin, no Sec-Fetch headers",
"foreign Referer",
"same host, other port",
"foreign Origin wins over same-host Referer",
"no Origin and no Referer",
"cross-site with same-host Referer",
"same-site with same-host Origin",
"same-host Referer but navigation destination",
"same-host Referer but no-cors mode",
"still refuses a same-host Referer with an API key",
"returns the SDK refusal text, the unverified-package text and the missing-release text to the administrator",
"logs the cause of a failed install and types it for the client",
"logs the reason behind a generic denial and leaves the response unchanged",
"names every typed cause of a failed install in the 403 of the dispatch route"
]
}
]
},
"apps": {
"kind": "ginkgo",
"commands": [
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/services/addons/apps",
"-ginkgo.json-report=../../../../.cache/addons/logs/apps.json"
],
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/services/addons",
"-ginkgo.json-report=../../../.cache/addons/logs/apps-lifecycle.json"
],
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/services/addons/runtime",
"-ginkgo.json-report=../../../../.cache/addons/logs/apps-runtime.json"
],
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/http/endpoints/addons",
"-ginkgo.json-report=../../../../.cache/addons/logs/apps-http.json"
]
],
"cases": [
"lists installed enabled addons for users and adds installed disabled ones only for administrators",
"carries the install time to the list and the management view, and none for an old record",
"derives display fields, the main page and the icon URL from the verified manifest only",
"describes the immutable UI assets of an enabled addon by the package digest and never otherwise",
"bounds the tool summary and coerces unknown process states to failed",
"shows controls and the management link only to administrators and never leaks owner details",
"lists the host controls an add-on is entitled to, whatever its ID",
"projects two non-Studio addon pages without identity dispatch",
"projects home commands with resolved declared pages display metadata immutable icons and generation",
"keeps disabled home apps installed without UI and never invents a destination",
"projects typed model actions without sharing manifest or view slices",
"keeps unavailable installed records and omits unavailable or absent model metadata",
"denies enable and disable for a stale generation without recording anything",
"lists the identifiers of installed addons, disabled ones included",
"refuses to list installed identifiers while recovery is required",
"lists apps by visibility and serves an icon only for a visible app at its generation",
"cancels status lookup while a lifecycle writer holds the journal lock",
"retries runtime synchronization after canceled disable and generation upgrade",
"rejects symlinked package roots without touching external staging",
"recovers every durable journal boundary without replaying publication",
"removes abandoned staging without removing published packages on recovery",
"keeps immutable history on successful upgrade and reinstallation",
"excludes competing owners and rejects conflicting durable identities",
"never opens replica roots or elects an absent owner",
"binds duplicate operation IDs to actor and command and serializes conflicts",
"refuses commands and asset reads for an add-on ID the host serves as a route",
"retains generations identity data and grants across uninstall and restart",
"preserves old packages and active generation on manager upgrade failure",
"requires current authoritative administration even for idempotent retries",
"executes enabled owner intent on startup and stops on disable and close without forwarder execution",
"binds lifecycle lookup to current admin and original actor without writes or repair",
"reports the supervisor state of an app through a crash and a restart",
"reads a flat directory in batches and stops at the entry bound",
"adds up nested files and reports a complete walk as not truncated",
"never follows or counts a symbolic link",
"keeps a result for a short time so polling does not walk again",
"stops at the time bound and reports a truncated size",
"does not keep a result cut short by the caller",
"is what the installed view reports for the data directory",
"resolves a package for the current enabled generation and digest only",
"answers from the current installed manifest only and follows a generation change",
"reports a digest-only change of a moving channel, applies nothing and offers the pinned upgrade",
"refuses a second operation ID for the same transition, in flight or done, and applies it once",
"runs concurrent requests with one operation ID once and gives each the same answer",
"serializes conflicting upgrades by the installed digest and refuses the loser without a record",
"refuses a candidate that is not the one the library resolves now",
"refuses an upgrade to the digest that is already installed",
"rechecks compatibility at execution and refuses an incompatible candidate",
"selects a newer immutable version and treats a rewritten version as an integrity error",
"keeps the last good generation when the candidate cannot be staged",
"never switches the library or channel, and a failed check is never up to date",
"lets an administrator refresh and everyone with the feature read a redacted status",
"shows the pending update in the apps list from the cache only",
"does not accept pins without an update checker or on another action",
"keeps the unpinned typed upgrade of an earlier release working",
"carries the SDK refusal text to the caller of a failed install and keeps the generic error",
"installs an add-on whose SDK range contains the host SDK",
"copies them at install, upgrade and owner start, and removes them at uninstall",
"never fails the operation when the copy fails",
"fails the install and says the package could not be verified, without installing anything",
"names a release that the library does not list",
"names two libraries that list the same add-on",
"names a library that cannot be read",
"reads the library on demand when the startup refresh has not filled the cache",
"reads the library again when the startup refresh failed",
"writes the owner and storage only, with no address",
"loads a file written in the old format with an address",
"loads when only the address changed",
"refuses a changed owner ID",
"refuses a changed storage ID",
"copies every capability field of the manifest, so a new field cannot be forgotten",
"is offered when the tag moved, pinned to the build the tag names, and upgrades to exactly that build",
"refuses the upgrade when the tag moved again after the check, and installs nothing",
"stamps the first install, keeps the time over an upgrade and stamps it again after an uninstall",
"needs a state root for the owner only",
"upgrades an installed add-on through the same path as a manual upgrade",
"does nothing when no newer version is listed",
"refuses a candidate whose package no longer matches its listed digest and replaces nothing",
"refuses a candidate that fails the signature policy of its library and replaces nothing",
"does not upgrade to a release the host cannot run",
"does nothing without an update checker",
"keeps the manual upgrade closed to a caller who is not an administrator",
"starts the enabled add-ons side by side, so the start takes the slowest ones and not the sum",
"distinguishes healthy empty connector discovery from loss of runtime ownership",
"persists and recovers model actions and declarations through install manual and automatic upgrades and real activation rollback",
"does not retain the caller's map or prefix slices",
"keeps an explicitly empty startup policy immutable",
"publishes identical bytes and digests with sorted archive entries for unchanged inputs and transforms",
"registers only ready generation bound service headless and UI capabilities",
"rejects forged registration nonloopback and stale incarnation handshakes",
"bounds readiness and handles exit during start and stop",
"withdraws immediately drains boundedly and rejects stale process identities",
"exhausts restart budget without retaining dead registrations",
"does not inherit secrets and exits when the private parent channel closes",
"fails closed on ambiguous launch identities and preserves unrelated reused PIDs",
"retains a canceled restart slot until cleanup completes and rejects duplicate supervisors",
"rejects nonloopback endpoints and bounds oversized streams and concurrency",
"reports stopped, running, failed, starting and running again across a crash and a restart",
"keeps reporting failed once the restart budget is exhausted",
"rejects foreign supervisor handles and numeric PID substitutions",
"resets restart budget only after sustained authenticated health",
"kills the exact paused child of a killed owner before launching its replacement",
"never reports failed between a launch starting and the restarted process being published",
"reserves a draining slot against concurrent starts",
"waits for a restart launch worker before acknowledging stop",
"exposes a new incarnation client after restart without reviving the old client",
"refuses a missing established ledger and fences failed cleanup publication",
"authenticates every request and separates trusted authority from model arguments",
"bounds output streams cancellation deadlines and stop admission",
"tells a 409 conflict of the add-on from an outage",
"withdraws and initiates every live slot before a cleanup timeout",
"creates one private data directory per addon and passes its path in the startup object",
"gives no data directory without a data root and refuses an unsafe root or addon ID",
"gives an add-on that the host setting names a host endpoint of its own",
"gives an add-on that the host setting does not name no host endpoint",
"closes the host endpoint when the incarnation ends",
"an HTTP 400 answer",
"an HTTP 422 answer",
"keeps a bounded, printable reason and nothing else of the body",
"leaves 503, 500 and 404 as outages",
"types a withdrawn client, a full slot table, a bad envelope and a missing schema as not sent",
"keeps a not-sent error an ErrRuntime for callers that do not tell them apart",
"types a refused connection as not sent",
"never types a possibly-sent request as not sent",
"types the add-on's own 'forbidden' answer as a denial of the person, not as an outage",
"keeps a 403 about the envelope itself an outage: it is a host fault, not a permission",
"reaches an add-on that declares actions, as the actor of the envelope, under the act scope",
"never sends a call that is not an act call or has another scope",
"never sends an act call to an add-on that did not declare actions",
"stops an act call when the caller gives up",
"posts the request with the incarnation credential and decodes the answer",
"is not sent to an add-on that declared no connector",
"gives it time to release what it owns before it kills the process",
"kills an add-on that ignores the closing of its startup channel, within the grace period",
"goes to the log line by line with the add-on ID and a cap per line",
"records the chat with the envelope of a read and of an action while it runs",
"sends the add-on an envelope without a new field",
"requires exact typed capability equality on authenticated registration health",
"keeps all typed declarations on automatic crash restart with a fresh incarnation",
"replays typed and legacy receipts across process restarts",
"refuses missing wire tool discriminators before any read",
"serializes exact identity admission with withdrawal and never dispatches the replacement",
"cannot observe a restarted same-generation process through the captured client",
"rejects output handles before they can reach storage or output-open",
"settles callback denial as failure even if the addon returns a valid positive payload",
"cleans up after cancellation and rejects repeat correlation",
"keeps an ordinary concurrent read authorized while an observation is pending",
"error",
"malformed/artifact payload",
"success",
"timeout",
"cancels an admitted observation when the runtime withdraws",
"rejects anonymous and forged forwarding authority through real authentication",
"lets callers through only when the deployment selected local-owner mode",
"keeps authentication, the feature gate and administration when accounts exist",
"lists the enabled installed apps for a reader and the disabled ones too for administrators, the same from every frontend",
"lets only administrators start and stop, through the lifecycle manager, and denies a stale generation",
"serves the verified icon through the host route and denies it identically otherwise",
"reports a lost start as an unknown outcome with its original operation and a lost list as unavailable",
"documents the apps routes and every field of the app view in the Swagger spec",
"rejects anonymous callers and forged forwarding headers",
"gates the feature and then administration for named keys",
"requires same-origin browser requests for cookie mutations",
"registers only the dispatch, relay and proposal mutations",
"reserves every first path segment the host registers under /api/addons",
"gates the artifact routes by authentication and feature",
"lists every registered addon route in the feature registry",
"gates the apps routes by authentication, feature and administration",
"gates the proposal routes by feature and refuses a confirmation from a key before the owner is asked",
"checks browser CSRF feature and admin access with real stored keys",
"stores a proposal from an API key and lets only the proposer's browser session confirm it",
"cancels a proposal from the same chain and never lets typed dispatch or relay confirm",
"denies sharing and deletion proposals and an unauthenticated caller",
"serves the local owner's confirmation only from a same-origin fetch of the host page",
"reports a lost reply with the original operation from forwarding frontends and resolves it by receipt",
"lets only the resource owner's browser session abandon an unresolved outcome and then accepts writes",
"lets the owner role list an editor's unresolved proposal and abandon it by the listed digest from every frontend",
"tells an editor of a blocked write only that it is denied",
"returns the applied proposal when the confirmed operation committed",
"answers an owner outage by the owner's state with the same type from every frontend",
"keeps a proposal confirmable by the same ID after the owner could not reach the addon",
"documents the proposal routes and the proposal schema in the Swagger spec",
"reports an unknown mutation outcome from a forwarding frontend with the original operation",
"documents every field the error responses emit in the Swagger schema",
"reports an unavailable read as plain unavailability",
"reports a denial as forbidden",
"reports an unclassified account check error as unavailable and a definite denial as forbidden",
"reports an unknown mutation outcome from the owner's own frontend with the original operation",
"serves a private file result as a safe attachment over real HTTP",
"never renders hostile names or active media types inline",
"answers one 403 for unknown, foreign, incomplete and expired artifacts and requires the feature and a principal",
"denies the download of a disabled addon and serves it again after enable",
"relays the same bytes, headers and denials through two forwarding frontends",
"keeps a file result of a read denied whole without an artifact store",
"serves the local owner's file only in local-owner mode",
"documents the artifact routes and the artifact schema in the Swagger spec",
"serves one owner journal through two real authenticated HTTP frontends and rejects paused keys",
"serves the synthetic owner through the real chain, denies sharing and rejects named callers",
"serves catalog search, details and the installed management view to administrators only, the same from every frontend",
"refuses every management call of the owner itself for a caller that is not an administrator",
"saves, refreshes and removes a library by reference and leaves installed addons alone",
"upgrades an installed addon through the typed action and keeps its earlier generation",
"reports a lost source change as an unknown outcome and a lost read as unavailable",
"documents the management actions and every emitted field of the installed view",
"serves the declared files of the current package through every frontend with immutable headers",
"lists the same URLs the route serves, and only for an enabled addon",
"denies every other path, digest, addon and credential form with one answer and no immutable caching",
"accepts a same-origin browser session and refuses a cross-site or direct one",
"withdraws the code the moment the addon is disabled, uninstalled or replaced, even for a page that is still open",
"refuses a declared file that is not a regular file of the package",
"documents the asset route and its binary response in the Swagger spec",
"gives the same 403 on the owner and on a forwarding frontend and never contacts the add-on",
"lists the caller's own pending proposals the same from the owner and every forwarding frontend",
"gives every caller with the feature the same status from every frontend, redacted for non-administrators",
"checks only for an administrator's own browser session, and applies nothing",
"upgrades only to the checked candidate, with the same typed refusals from every frontend, and never twice",
"runs two concurrent upgrades from two frontends once: the same ID shares the answer, another ID is a conflict",
"refuses an incompatible candidate and a library that cannot be read, with a typed answer",
"reports a lost upgrade as an unknown outcome with its original operation, and a lost status read or check as plainly unavailable",
"keeps the update actions out of the tools and names every field of the status in the Swagger spec",
"answers an add-on's invalid-request refusal as a typed 400 from the owner and from a forwarding frontend",
"returns the same text through a forwarding frontend",
"Sec-Fetch-Site cross-site is refused even with a Referer on the same host",
"Sec-Fetch-Site same-origin passes",
"Sec-Fetch-Site same-site is refused",
"a request without a session cookie is not guarded",
"no Sec-Fetch-Site and no Origin or Referer is refused",
"no Sec-Fetch-Site with a Referer on the same host passes",
"no Sec-Fetch-Site with a foreign Origin is refused",
"no Sec-Fetch-Site with a foreign Origin is refused even with a Referer on the same host",
"no Sec-Fetch-Site with a foreign Referer is refused",
"no Sec-Fetch-Site with a null Origin is refused",
"no Sec-Fetch-Site with an Origin on the same host passes",
"no Sec-Fetch-Site with the same host on another port is refused",
"matches the host without regard to letter case",
"gives no pins to an account created after the upgrade",
"round-trips pins for the local owner",
"drops IDs the caller cannot see",
"an object",
"numbers",
"not JSON",
"empty",
"null",
"rejects a list over the hard limit",
"does not show Studio and Talk as pins without the add-ons",
"lists add-ons by default, and takes a kind that this host reads",
"is empty because Studio and Talk are packaged add-ons",
"lists every entry without an account database",
"strict same-origin fetch",
"same-origin without destination",
"same-host Referer, no Sec-Fetch headers",
"same-host Origin, no Sec-Fetch headers",
"foreign Referer",
"same host, other port",
"foreign Origin wins over same-host Referer",
"no Origin and no Referer",
"cross-site with same-host Referer",
"same-site with same-host Origin",
"same-host Referer but navigation destination",
"same-host Referer but no-cors mode",
"still refuses a same-host Referer with an API key",
"returns the SDK refusal text, the unverified-package text and the missing-release text to the administrator",
"logs the cause of a failed install and types it for the client",
"logs the reason behind a generic denial and leaves the response unchanged",
"names every typed cause of a failed install in the 403 of the dispatch route"
],
"report": ".cache/addons/logs/apps.json",
"reports": [
{
"path": ".cache/addons/logs/apps.json",
"cases": [
"lists installed enabled addons for users and adds installed disabled ones only for administrators",
"carries the install time to the list and the management view, and none for an old record",
"derives display fields, the main page and the icon URL from the verified manifest only",
"describes the immutable UI assets of an enabled addon by the package digest and never otherwise",
"bounds the tool summary and coerces unknown process states to failed",
"shows controls and the management link only to administrators and never leaks owner details",
"lists the host controls an add-on is entitled to, whatever its ID",
"projects two non-Studio addon pages without identity dispatch",
"projects home commands with resolved declared pages display metadata immutable icons and generation",
"keeps disabled home apps installed without UI and never invents a destination",
"projects typed model actions without sharing manifest or view slices",
"keeps unavailable installed records and omits unavailable or absent model metadata"
]
},
{
"path": ".cache/addons/logs/apps-lifecycle.json",
"cases": [
"denies enable and disable for a stale generation without recording anything",
"lists the identifiers of installed addons, disabled ones included",
"refuses to list installed identifiers while recovery is required",
"lists apps by visibility and serves an icon only for a visible app at its generation",
"cancels status lookup while a lifecycle writer holds the journal lock",
"retries runtime synchronization after canceled disable and generation upgrade",
"rejects symlinked package roots without touching external staging",
"recovers every durable journal boundary without replaying publication",
"removes abandoned staging without removing published packages on recovery",
"keeps immutable history on successful upgrade and reinstallation",
"excludes competing owners and rejects conflicting durable identities",
"never opens replica roots or elects an absent owner",
"binds duplicate operation IDs to actor and command and serializes conflicts",
"refuses commands and asset reads for an add-on ID the host serves as a route",
"retains generations identity data and grants across uninstall and restart",
"preserves old packages and active generation on manager upgrade failure",
"requires current authoritative administration even for idempotent retries",
"executes enabled owner intent on startup and stops on disable and close without forwarder execution",
"binds lifecycle lookup to current admin and original actor without writes or repair",
"reports the supervisor state of an app through a crash and a restart",
"reads a flat directory in batches and stops at the entry bound",
"adds up nested files and reports a complete walk as not truncated",
"never follows or counts a symbolic link",
"keeps a result for a short time so polling does not walk again",
"stops at the time bound and reports a truncated size",
"does not keep a result cut short by the caller",
"is what the installed view reports for the data directory",
"resolves a package for the current enabled generation and digest only",
"answers from the current installed manifest only and follows a generation change",
"reports a digest-only change of a moving channel, applies nothing and offers the pinned upgrade",
"refuses a second operation ID for the same transition, in flight or done, and applies it once",
"runs concurrent requests with one operation ID once and gives each the same answer",
"serializes conflicting upgrades by the installed digest and refuses the loser without a record",
"refuses a candidate that is not the one the library resolves now",
"refuses an upgrade to the digest that is already installed",
"rechecks compatibility at execution and refuses an incompatible candidate",
"selects a newer immutable version and treats a rewritten version as an integrity error",
"keeps the last good generation when the candidate cannot be staged",
"never switches the library or channel, and a failed check is never up to date",
"lets an administrator refresh and everyone with the feature read a redacted status",
"shows the pending update in the apps list from the cache only",
"does not accept pins without an update checker or on another action",
"keeps the unpinned typed upgrade of an earlier release working",
"carries the SDK refusal text to the caller of a failed install and keeps the generic error",
"installs an add-on whose SDK range contains the host SDK",
"copies them at install, upgrade and owner start, and removes them at uninstall",
"never fails the operation when the copy fails",
"fails the install and says the package could not be verified, without installing anything",
"names a release that the library does not list",
"names two libraries that list the same add-on",
"names a library that cannot be read",
"reads the library on demand when the startup refresh has not filled the cache",
"reads the library again when the startup refresh failed",
"writes the owner and storage only, with no address",
"loads a file written in the old format with an address",
"loads when only the address changed",
"refuses a changed owner ID",
"refuses a changed storage ID",
"copies every capability field of the manifest, so a new field cannot be forgotten",
"is offered when the tag moved, pinned to the build the tag names, and upgrades to exactly that build",
"refuses the upgrade when the tag moved again after the check, and installs nothing",
"stamps the first install, keeps the time over an upgrade and stamps it again after an uninstall",
"needs a state root for the owner only",
"upgrades an installed add-on through the same path as a manual upgrade",
"does nothing when no newer version is listed",
"refuses a candidate whose package no longer matches its listed digest and replaces nothing",
"refuses a candidate that fails the signature policy of its library and replaces nothing",
"does not upgrade to a release the host cannot run",
"does nothing without an update checker",
"keeps the manual upgrade closed to a caller who is not an administrator",
"starts the enabled add-ons side by side, so the start takes the slowest ones and not the sum",
"distinguishes healthy empty connector discovery from loss of runtime ownership",
"installs upgrades and uninstalls the actual Sandbox document skills through verified receipts",
"finishes a real backup and commit after the submitting request is cancelled",
"polls and retries during a blocked backup, rejects conflicting IDs, and retains the receipt on restart",
"reconciles durable accepted work to interrupted without replay",
"Close cancels and joins an accepted owner worker before releasing storage",
"traces completion, retries, detach, interruption and late delivery without replay",
"keeps terminals immutable for every event and gives each active state a terminal exit",
"Close cancels a backup in flight and joins its cleanup before releasing ownership",
"serializes synchronous disable against an accepted upgrade without overwriting its journal",
"persists and recovers model actions and declarations through install manual and automatic upgrades and real activation rollback",
"does not retain the caller's map or prefix slices",
"keeps an explicitly empty startup policy immutable",
"publishes identical bytes and digests with sorted archive entries for unchanged inputs and transforms"
]
},
{
"path": ".cache/addons/logs/apps-runtime.json",
"cases": [
"registers only ready generation bound service headless and UI capabilities",
"rejects forged registration nonloopback and stale incarnation handshakes",
"bounds readiness and handles exit during start and stop",
"withdraws immediately drains boundedly and rejects stale process identities",
"exhausts restart budget without retaining dead registrations",
"does not inherit secrets and exits when the private parent channel closes",
"fails closed on ambiguous launch identities and preserves unrelated reused PIDs",
"retains a canceled restart slot until cleanup completes and rejects duplicate supervisors",
"rejects nonloopback endpoints and bounds oversized streams and concurrency",
"reports stopped, running, failed, starting and running again across a crash and a restart",
"keeps reporting failed once the restart budget is exhausted",
"rejects foreign supervisor handles and numeric PID substitutions",
"resets restart budget only after sustained authenticated health",
"kills the exact paused child of a killed owner before launching its replacement",
"never reports failed between a launch starting and the restarted process being published",
"reserves a draining slot against concurrent starts",
"waits for a restart launch worker before acknowledging stop",
"exposes a new incarnation client after restart without reviving the old client",
"refuses a missing established ledger and fences failed cleanup publication",
"authenticates every request and separates trusted authority from model arguments",
"bounds output streams cancellation deadlines and stop admission",
"tells a 409 conflict of the add-on from an outage",
"withdraws and initiates every live slot before a cleanup timeout",
"creates one private data directory per addon and passes its path in the startup object",
"gives no data directory without a data root and refuses an unsafe root or addon ID",
"gives an add-on that the host setting names a host endpoint of its own",
"gives an add-on that the host setting does not name no host endpoint",
"closes the host endpoint when the incarnation ends",
"an HTTP 400 answer",
"an HTTP 422 answer",
"keeps a bounded, printable reason and nothing else of the body",
"leaves 503, 500 and 404 as outages",
"types a withdrawn client, a full slot table, a bad envelope and a missing schema as not sent",
"keeps a not-sent error an ErrRuntime for callers that do not tell them apart",
"types a refused connection as not sent",
"never types a possibly-sent request as not sent",
"types the add-on's own 'forbidden' answer as a denial of the person, not as an outage",
"keeps a 403 about the envelope itself an outage: it is a host fault, not a permission",
"reaches an add-on that declares actions, as the actor of the envelope, under the act scope",
"never sends a call that is not an act call or has another scope",
"never sends an act call to an add-on that did not declare actions",
"stops an act call when the caller gives up",
"posts the request with the incarnation credential and decodes the answer",
"is not sent to an add-on that declared no connector",
"gives it time to release what it owns before it kills the process",
"kills an add-on that ignores the closing of its startup channel, within the grace period",
"goes to the log line by line with the add-on ID and a cap per line",
"records the chat with the envelope of a read and of an action while it runs",
"sends the add-on an envelope without a new field",
"requires exact typed capability equality on authenticated registration health",
"keeps all typed declarations on automatic crash restart with a fresh incarnation",
"replays typed and legacy receipts across process restarts",
"refuses missing wire tool discriminators before any read",
"serializes exact identity admission with withdrawal and never dispatches the replacement",
"cannot observe a restarted same-generation process through the captured client",
"rejects output handles before they can reach storage or output-open",
"settles callback denial as failure even if the addon returns a valid positive payload",
"cleans up after cancellation and rejects repeat correlation",
"keeps an ordinary concurrent read authorized while an observation is pending",
"error",
"malformed/artifact payload",
"success",
"timeout",
"cancels an admitted observation when the runtime withdraws"
]
},
{
"path": ".cache/addons/logs/apps-http.json",
"cases": [
"rejects anonymous and forged forwarding authority through real authentication",
"lets callers through only when the deployment selected local-owner mode",
"keeps authentication, the feature gate and administration when accounts exist",
"lists the enabled installed apps for a reader and the disabled ones too for administrators, the same from every frontend",
"lets only administrators start and stop, through the lifecycle manager, and denies a stale generation",
"serves the verified icon through the host route and denies it identically otherwise",
"reports a lost start as an unknown outcome with its original operation and a lost list as unavailable",
"documents the apps routes and every field of the app view in the Swagger spec",
"rejects anonymous callers and forged forwarding headers",
"gates the feature and then administration for named keys",
"requires same-origin browser requests for cookie mutations",
"registers only the dispatch, relay and proposal mutations",
"reserves every first path segment the host registers under /api/addons",
"gates the artifact routes by authentication and feature",
"lists every registered addon route in the feature registry",
"gates the apps routes by authentication, feature and administration",
"gates the proposal routes by feature and refuses a confirmation from a key before the owner is asked",
"checks browser CSRF feature and admin access with real stored keys",
"stores a proposal from an API key and lets only the proposer's browser session confirm it",
"cancels a proposal from the same chain and never lets typed dispatch or relay confirm",
"denies sharing and deletion proposals and an unauthenticated caller",
"serves the local owner's confirmation only from a same-origin fetch of the host page",
"reports a lost reply with the original operation from forwarding frontends and resolves it by receipt",
"lets only the resource owner's browser session abandon an unresolved outcome and then accepts writes",
"lets the owner role list an editor's unresolved proposal and abandon it by the listed digest from every frontend",
"tells an editor of a blocked write only that it is denied",
"returns the applied proposal when the confirmed operation committed",
"answers an owner outage by the owner's state with the same type from every frontend",
"keeps a proposal confirmable by the same ID after the owner could not reach the addon",
"documents the proposal routes and the proposal schema in the Swagger spec",
"reports an unknown mutation outcome from a forwarding frontend with the original operation",
"documents every field the error responses emit in the Swagger schema",
"reports an unavailable read as plain unavailability",
"reports a denial as forbidden",
"reports an unclassified account check error as unavailable and a definite denial as forbidden",
"reports an unknown mutation outcome from the owner's own frontend with the original operation",
"serves a private file result as a safe attachment over real HTTP",
"never renders hostile names or active media types inline",
"answers one 403 for unknown, foreign, incomplete and expired artifacts and requires the feature and a principal",
"denies the download of a disabled addon and serves it again after enable",
"relays the same bytes, headers and denials through two forwarding frontends",
"keeps a file result of a read denied whole without an artifact store",
"serves the local owner's file only in local-owner mode",
"documents the artifact routes and the artifact schema in the Swagger spec",
"serves one owner journal through two real authenticated HTTP frontends and rejects paused keys",
"serves the synthetic owner through the real chain, denies sharing and rejects named callers",
"serves catalog search, details and the installed management view to administrators only, the same from every frontend",
"refuses every management call of the owner itself for a caller that is not an administrator",
"saves, refreshes and removes a library by reference and leaves installed addons alone",
"upgrades an installed addon through the typed action and keeps its earlier generation",
"reports a lost source change as an unknown outcome and a lost read as unavailable",
"documents the management actions and every emitted field of the installed view",
"serves the declared files of the current package through every frontend with immutable headers",
"lists the same URLs the route serves, and only for an enabled addon",
"denies every other path, digest, addon and credential form with one answer and no immutable caching",
"accepts a same-origin browser session and refuses a cross-site or direct one",
"withdraws the code the moment the addon is disabled, uninstalled or replaced, even for a page that is still open",
"refuses a declared file that is not a regular file of the package",
"documents the asset route and its binary response in the Swagger spec",
"gives the same 403 on the owner and on a forwarding frontend and never contacts the add-on",
"lists the caller's own pending proposals the same from the owner and every forwarding frontend",
"gives every caller with the feature the same status from every frontend, redacted for non-administrators",
"checks only for an administrator's own browser session, and applies nothing",
"upgrades only to the checked candidate, with the same typed refusals from every frontend, and never twice",
"runs two concurrent upgrades from two frontends once: the same ID shares the answer, another ID is a conflict",
"refuses an incompatible candidate and a library that cannot be read, with a typed answer",
"reports a lost upgrade as an unknown outcome with its original operation, and a lost status read or check as plainly unavailable",
"keeps the update actions out of the tools and names every field of the status in the Swagger spec",
"answers an add-on's invalid-request refusal as a typed 400 from the owner and from a forwarding frontend",
"returns the same text through a forwarding frontend",
"Sec-Fetch-Site cross-site is refused even with a Referer on the same host",
"Sec-Fetch-Site same-origin passes",
"Sec-Fetch-Site same-site is refused",
"a request without a session cookie is not guarded",
"no Sec-Fetch-Site and no Origin or Referer is refused",
"no Sec-Fetch-Site with a Referer on the same host passes",
"no Sec-Fetch-Site with a foreign Origin is refused",
"no Sec-Fetch-Site with a foreign Origin is refused even with a Referer on the same host",
"no Sec-Fetch-Site with a foreign Referer is refused",
"no Sec-Fetch-Site with a null Origin is refused",
"no Sec-Fetch-Site with an Origin on the same host passes",
"no Sec-Fetch-Site with the same host on another port is refused",
"matches the host without regard to letter case",
"gives no pins to an account created after the upgrade",
"round-trips pins for the local owner",
"drops IDs the caller cannot see",
"an object",
"numbers",
"not JSON",
"empty",
"null",
"rejects a list over the hard limit",
"does not show Studio and Talk as pins without the add-ons",
"lists add-ons by default, and takes a kind that this host reads",
"is empty because Studio and Talk are packaged add-ons",
"lists every entry without an account database",
"strict same-origin fetch",
"same-origin without destination",
"same-host Referer, no Sec-Fetch headers",
"same-host Origin, no Sec-Fetch headers",
"foreign Referer",
"same host, other port",
"foreign Origin wins over same-host Referer",
"no Origin and no Referer",
"cross-site with same-host Referer",
"same-site with same-host Origin",
"same-host Referer but navigation destination",
"same-host Referer but no-cors mode",
"still refuses a same-host Referer with an API key",
"returns the SDK refusal text, the unverified-package text and the missing-release text to the administrator",
"logs the cause of a failed install and types it for the client",
"logs the reason behind a generic denial and leaves the response unchanged",
"names every typed cause of a failed install in the 403 of the dispatch route"
]
}
]
},
"gallery-ui": {
"kind": "shell",
"commands": [
[
"sh",
"scripts/addons/gallery_ui.sh"
]
],
"cases": [
"unit: query normalization bounds text, library and page",
"unit: an operation book keeps one identity per action until it is done",
"unit: responses classify the same way everywhere",
"unit: polling backs off on failure, slows when hidden and stays bounded",
"unit: library drafts accept references and refuse secrets before sending",
"unit: tabs: the server decides, the page only avoids showing what it will refuse",
"unit: the installed list puts what needs a person first and filters by state",
"unit: an add-on without an icon gets a stable letter and hue, and a dev build says so",
"unit: app chips never turn an unknown state into running",
"unit: titles follow the language, then the default text, then the id",
"unit: update status comes only from an authoritative check",
"unit: the api sends one dispatch shape and classifies refusals",
"unit: an unknown outcome is read with the original identity and never resubmitted",
"unit: a denial is not retried and an exhausted read is reported as unknown",
"unit: an action book binds one identity to one click and its retries",
"unit: an action book mints a fresh identity once an action is resolved",
"unit: an action book blocks another action on a subject with an unknown outcome until it is resolved or dismissed",
"unit: a completed status that left the add-on unchanged is not reported as done",
"apps: lists enabled apps with state chips, the icon route and Open only for a main page",
"apps: a headless add-on shows its tools and no Open action",
"apps: a reader gets no start, stop, manage or management tabs",
"apps: an administrator starts an app with a fresh operation ID and the listed generation",
"apps: a lost start is read with the same operation ID and never submitted again",
"apps: an unknown start is resolved or dismissed before the next action and never replays its ID",
"apps: dismissing an unknown outcome lets the next click mint a new operation",
"apps: a completed status that left the app unchanged is not shown as done",
"apps: a refused start shows the server denial and refreshes the list",
"apps: the list refreshes on a bounded interval, backs off on errors and stops when left",
"apps: an add-on that contributes UI keeps the list current off the page and its disable stops the reads",
"apps: a viewer without the add-ons feature never requests the list",
"browse: searches the libraries, pages and shows trust and platform facts",
"browse: Install and turn on asks once, installs and turns the add-on on",
"browse: a failed turn on keeps the install, says why in the dialog and can be tried again",
"browse: an add-on that is installed but off offers Turn on and nothing else",
"installed: health is separate from enabled and the details show trust, compatibility and storage",
"installed: an update is shown only from the owner update field and upgrade sends that version",
"installed: removing warns that data is kept before anything is submitted",
"installed: Escape cancels the remove dialog only, then closes the pane, and focus returns to the card",
"installed: a headless add-on keeps its details, health and tools",
"installed: a refusal of the installed list leaves the pane without Details",
"installed: an old Installed address lands on Installed and the management link opens the details",
"libraries: a private library is saved by credential reference and never carries a secret",
"libraries: removing a library says installed add-ons stay and leaves them installed",
"libraries: a refresh reports its result and a failed fetch is shown as failed",
"keyboard: the tab list moves with the arrow keys and actions are reachable",
"narrow: at 400 px the apps page is one column without sideways scrolling",
"theme: the apps page follows the light and dark tokens",
"i18n: the page follows the interface language",
"regression: the backends catalog still searches, pages and shows its empty state",
"unit: the add-on browse list drops backend entries and keeps entries with no kind",
"unit: a refusal shows the server reason and falls back to the generic text",
"unit: the add-on list drops a backend entry, and the backend route still installs one",
"unit: a library signer is named exactly or by a pattern, never both",
"unit: a backend install follows its job through the steps and ends with the result",
"unit: a failed backend install job throws the reason and keeps the step that failed",
"unit: install steps: left steps are done, the reported one runs, the rest wait",
"unit: backends page: a library backend shows its library and the digest it pinned",
"unit: backends page: a newer build in the library is an update state, and a running job wins over it",
"unit: the updates route of the host is read as a list and nothing is sent",
"unit: every locale carries the add-on and navigation keys of English",
"unit: the chats page has its add-on control strings in English",
"unit: the add-on labels use one name and one verb pair",
"unit: what an add-on adds comes from its page and its tools, and nothing is guessed",
"unit: screenshots appear only when the host lists them and they are served by the host",
"unit: the list says first run, no match or none, and a search never claims that nothing is installed",
"unit: featured add-ons are the first three add-on entries that are not installed",
"unit: install and turn on runs the install, then the turn on, each as its own action",
"unit: install and turn on stops at a failed install and retries only the turn on",
"unit: a library entry shows its tool count only when it is above zero, from the installed-view fields",
"unit: the catalog adapter carries toolCount and tools of a release, and defaults them to none",
"unit: the English wording is \"Adds 16 tools\" and \"Adds 1 tool\"",
"unit: addons: the install dialog names each built-in skill the entry replaces, and who already does",
"unit: addons: the details list the skills of an add-on and which replace a built-in one",
"hub: under the legacy switch the Add-ons tab appears only for an account that holds the feature"
]
},
"esm-ui": {
"kind": "shell",
"commands": [
[
"sh",
"scripts/addons/esm_ui.sh"
]
],
"cases": [
"unit: sdk: compatibility accepts only a range that holds the host SDK version",
"unit: sdk: the object is a frozen allowlist that carries the host React and no host internals",
"unit: sdk: hooks run on the host React instance and a wrapper keeps one component type",
"unit: sdk: icons outside the semantic set fall back and theme tokens are a fixed set",
"unit: sdk: navigation stays inside the add-on prefix and its declared pages",
"unit: sdk: api calls carry the add-on and its generation and nothing else is reachable",
"unit: sdk: after the signal aborts every service refuses and each disposer runs once",
"unit: sdk: markDirty reports unsaved edits once per change and notifications are bounded",
"unit: sdk: locale is scoped to the add-on and falls back to the default text",
"unit: sdk: layers are host wrappers with a bounded spec",
"unit: css: every selector is scoped to the add-on root and the global ones are neutralised",
"unit: css: imports, fonts, external urls and unknown at-rules are dropped and keyframes are renamed",
"unit: css: no value that loads a URL survives anywhere in the sheet",
"unit: css: harmless values, escapes in strings and nested rules are kept",
"unit: css: two add-ons that use the same class names get disjoint scopes",
"unit: loader: asset URLs must be same-origin immutable URLs of the add-on own package",
"unit: loader: an incompatible SDK range is never imported and leaves a clear error",
"unit: loader: the module receives only the host SDK, its result is validated and styles are scoped",
"unit: loader: a module without createAddon, with a bad result or a bare import is a load error",
"unit: loader: a hanging import times out and an abort cancels and cleans up",
"unit: loader: dispose runs once, aborts the SDK signal and removes the styles",
"unit: loader: chat actions are limited to declared ids and carry only the conversation context",
"unit: registry: disable, uninstall, crash and update withdraw a loaded add-on at once",
"unit: registry: unsaved edits keep a withdrawn add-on stale until the user reloads",
"unit: registry: a poll never replaces a withdrawn instance; only reload does",
"unit: registry: a hold ends with its last holder and a load that was withdrawn leaves no instance behind",
"unit: registry: navigation and chat actions come only from usable add-ons of the current generation",
"unit: registry: the legacy Add-ons tab lists page links only when the registry has usable add-ons",
"unit: registry: the list is read off the Add-ons page only for a viewer with the feature and a UI contribution",
"go: describes the immutable UI assets of an enabled addon by the package digest and never otherwise",
"go: resolves a package for the current enabled generation and digest only",
"go: serves declared assets of the current enabled generation by package digest only",
"go: serves the declared files of the current package through every frontend with immutable headers",
"go: lists the same URLs the route serves, and only for an enabled addon",
"go: denies every other path, digest, addon and credential form with one answer and no immutable caching",
"go: accepts a same-origin browser session and refuses a cross-site or direct one",
"go: withdraws the code the moment the addon is disabled, uninstalled or replaced, even for a page that is still open",
"go: refuses a declared file that is not a regular file of the package",
"go: documents the asset route and its binary response in the Swagger spec",
"esm: a fixture add-on installed after the host build loads through real authorization and draws in its own root",
"esm: hooks run on the host React and the add-on keeps its state across renders",
"esm: the add-on style sheet is scoped to its root and leaves the host and other add-ons alone",
"esm: a component that throws is contained by the error boundary and the shell keeps working",
"esm: deep links, the bare add-on address and a proxy path prefix reach the same declared page",
"esm: a host that does not provide the add-on SDK range never imports its code and says so",
"esm: a module that imports React by a bare specifier fails to load and no second React is resolved",
"esm: the server decides asset access: undeclared files, traversal, other add-ons, credentials in URLs and foreign sessions are denied",
"esm: an add-on navigates only to its own declared pages and the host draws the add-on navigation",
"esm: dialogs an add-on opens are owned by the host: focus, Escape and the close button",
"esm: a dialog or panel whose render throws is contained and the host app keeps running",
"esm: unsaved edits are guarded when leaving the page",
"esm: the page keeps inside the viewport at 400 px and follows the light and dark themes",
"esm: a member without the add-ons feature gets no add-on page and no code",
"esm: disabling an add-on unmounts it, aborts its signal, drops its styles and denies its code at once",
"esm: a withdrawn add-on with unsaved edits stays on screen until the user decides, and never saves",
"esm: an update withdraws the old generation, denies its code and loads the new one only on an explicit reload"
]
},
"host-slots": {
"kind": "shell",
"commands": [
[
"sh",
"scripts/addons/host_slots.sh"
]
],
"cases": [
"unit: slots: the registry is closed and each slot has a frozen minimal props contract",
"unit: slots: props carry only the contract and never message text or history",
"unit: slots: declared component names come from the manifest only and the module cannot add more",
"unit: slots: the loader hands the host only declared components and never an imperative registration",
"unit: slots: contributions come only from enabled, usable, current-generation add-ons that are ready",
"unit: slots: an action appears only in its declared placement and carries its own target",
"unit: slots: labels follow the language with a safe fallback",
"unit: slots: a renderer is found only for the addon own declared tool and kind",
"unit: slots: an action sends its declared tool and the sanitized context, and results are bounded text",
"unit: slots: disable, crash and update unmount every contribution through the runtime",
"unit: slots: contributions keep the apps list polled while they exist",
"unit: slots: the approval frame decides from the stored proposal and never from the renderer",
"unit: slots: the SDK can present an approval of its own addon only through the host",
"unit: slots: a page that only needs the list reads it once and never retries a failed read",
"unit: slots: a file preview is offered for the extensions it declared and gets only the file facts",
"go: accepts tool and component chat actions, slots and own-tool renderers",
"go: keeps bare chat action identifiers and every earlier fixture valid",
"go: rejects every undeclared, unsafe or inconsistent contribution at install",
"go: keeps the closed slot list and the icon allowlist equal to the host",
"go: lists actions, slots and renderers for an enabled addon and keeps the identifiers",
"go: lists no contribution for a disabled addon, whoever asks",
"go: accepts a file preview slot that names the extensions it handles",
"go: rejects a file preview slot or extension list that is not safe",
"slots: an add-on's settings sections are drawn on the Settings tab of its own details and nowhere else",
"slots: the Settings page lists the add-ons that have settings, each a link to its Settings tab",
"slots: the old anchor of a section on the Settings page opens the add-on's Settings tab",
"slots: the add-on page and its details offer the settings to an administrator only",
"slots: the navigation slot adds its entry below the tile grid of the Add-ons drawer"
]
},
"foundation-acceptance": {
"kind": "shell",
"commands": [
[
"sh",
"scripts/addons/foundation.sh"
]
],
"cases": [
"go: fails closed on every frontend while the owner is down, executes nothing locally and recovers the last good package and data on restart",
"go: refuses a second owner on the same storage and keeps one process per add-on",
"go: stops an add-on process orphaned by an owner crash before it starts the next one",
"go: leaves no process behind when a cluster with an orphaned add-on is taken down",
"go: keeps the last good generation running and its data when an upgrade fails to start",
"go: keeps the last good code and data when the owner is killed in the middle of an upgrade and recovers on restart",
"go: keeps retained data and a consistent lifecycle when the owner is killed in the middle of an enable",
"go: keeps the files of the package of an installed add-on read only",
"go: keeps the last good generation running and the retained data when the new generation cannot start",
"go: restores the last good generation and resumes the same operation when the request is canceled during an upgrade start",
"go: converges on the last good generation after a crash that follows the rollback start and precedes any journal write",
"go: starts the owner when an enabled add-on cannot become ready and fails only that add-on",
"go: gives an ordinary account the apps list and no management on any node",
"go: returns the same typed denial from the owner and from each frontend",
"go: refuses a session on every node once it was ended through one frontend",
"go: refuses an API key on every node once it was revoked through one frontend",
"go: installs the UI, tool and service-only packages from the catalog through a frontend without starting them and leaves the host binary and UI build unchanged",
"go: activates each package through the other frontend and runs one process per add-on under the owner only",
"go: lists the same apps from the owner and both frontends and shows only what each declared",
"go: serves reads of the UI, tool and service-only packages alternately through the owner and both frontends",
"go: denies an account without the feature, a stranger to the resource and an anonymous caller the same way on every node",
"go: takes the actor from the authenticated credential only and ignores forged actor and authority headers",
"go: denies a tool the add-on did not declare and a generation that is not current on every node",
"go: relays JSON and a private file result and downloads the file through a different frontend than the one that produced it",
"go: relays lifecycle status and progress of an operation to the administrator who made it and to nobody else",
"go: serves the immutable UI assets by package digest through a non-owner frontend and refuses everything else",
"go: applies one confirmed change exactly once through a different frontend than the one that proposed it",
"go: reports a lost reply as outcome unknown with the original operation ID and settles it by receipt lookup without a second apply",
"go: upgrades to a new generation, denies the previous generation and its assets, and keeps the retained data",
"go: disables, removes and reinstalls an add-on while its data and grants remain",
"go: never changes the host binary or the shipped UI build over the whole lifecycle",
"regression: model and backend gallery specs (core/gallery)",
"regression: gallery operation specs (core/services/galleryop)",
"regression: process adapter specs (pkg/model)",
"foundation: a member opens the add-on through each non-owner frontend and its module comes from the owner by digest",
"foundation: the owner and both frontends list the same add-on to the same account",
"foundation: a member sees the add-on list only and the server refuses every management request",
"foundation: an account without the add-ons feature gets no apps and no code on any node",
"foundation: an administrator manages through a frontend and the change is the owner's",
"foundation: deep links of the add-on page work behind a proxy path prefix on a non-owner frontend",
"foundation: a session ended through one frontend is refused for add-on assets by the other servers"
]
},
"tables-databases": {
"kind": "ginkgo",
"commands": [
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./addons/tables/internal/store",
"-ginkgo.json-report=../../../../.cache/addons/logs/tables-databases-store.json"
],
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./tests/addons/tables",
"-ginkgo.json-report=../../../.cache/addons/logs/tables-databases.json"
]
],
"report": ".cache/addons/logs/tables-databases-store.json",
"reports": [
{
"path": ".cache/addons/logs/tables-databases-store.json",
"cases": [
"enforces the size cap on every connection and fails with a typed capacity error",
"builds a database under a data directory containing percent, question and hash characters",
"leaves no change and no receipt when the process dies before commit, and the ID can still apply",
"finds the committed receipt after a crash between commit and reply and never applies twice",
"replays one operation ID to one receipt and refuses another request under the same ID",
"applies one change once when the same operation arrives concurrently",
"keeps a rejected change out of the receipts so its ID is not burnt",
"encodes the receipt payload so the host can read what changed",
"creates, renames and drops tables with stable internal identifiers and one revision step each",
"adds typed columns, renames them without touching identifiers and never uses a label in SQL",
"validates labels by length, characters and case-insensitive uniqueness",
"refuses type changes, unknown operations, expressions and unknown types",
"encodes typed defaults as literals and survives hostile defaults",
"enforces required columns and refuses unique defaults that would collide",
"adds a unique column through a unique index and refuses duplicates atomically",
"drops a column by rebuilding the table and loses exactly what the preview reported",
"never hands out a row ID again after a column drop rebuilds the table",
"keeps the row ID counter when a column drop rebuilds a table emptied by deletes",
"leaves the original table, data and revision intact when a rebuild fails midway",
"previews exact effects and dependent data loss and changes nothing",
"refuses a stale expected revision with the current revision and applies nothing",
"keeps finite limits on tables and columns",
"migrates a database made before the catalog existed on its first schema change",
"inserts bound rows atomically with defaults, required and unique checks",
"updates by explicit IDs and by filter and bumps only the data revision",
"deletes by IDs or filter and refuses broad, empty or oversized selections",
"previews exact count, sample and conflicts without changing anything",
"refuses a changed revision and never re-evaluates a filter against new rows",
"applies exactly one of two proposals made on the same revision",
"replays a row operation by ID and refuses another request under the same ID",
"leaves no change when the process dies before commit and finds the receipt after commit",
"reserves the row id label so no column can shadow it",
"keeps a row table's data across a column drop that rebuilds it",
"reads selected columns with stable row IDs and typed JSON values",
"filters with bounded AND/OR trees and every operator, matching a reference evaluator on random trees",
"escapes LIKE wildcards in text filters",
"keeps NULL semantics: comparisons never match NULL and is-null finds it",
"sorts with a stable row ID tie-break and pages through a cursor that stops at a revision change",
"counts, sums, averages and bounds groups of aggregates",
"reports a real sum or average that overflows as the typed arithmetic error",
"never lets a label, operator or value reach SQL as text",
"honours hard limits on page size, filter depth, conditions, in-lists, sort keys and result bytes",
"stops a query when the context is cancelled or the deadline passes",
"encodes all five types as JSON and writes 64-bit integers as strings beyond 2^53",
"orders datetimes chronologically across fractional seconds and offsets",
"creates one private WAL database file named by the host resource ID",
"never lets an opaque ID or a name reach outside the storage directory",
"refuses a symbolic link as storage directory, database file or ledger",
"is idempotent by operation ID and never creates a second database",
"serializes concurrent creation of one operation into one database",
"recovers creation after a crash on either side of the file, and hides half-built files",
"renames only the named database and replays a renamed operation without effect",
"reports an unknown database and creates nothing for it",
"honours the busy timeout and the per-operation deadline, then succeeds once the lock is gone",
"encodes its receipts so the host can read them",
"writes a header and one record per row with RFC 4180 quoting, UTF-8 and the documented value forms",
"prefixes text cells and labels that a spreadsheet would run, never numbers",
"honours columns, the row identifier column, filter, sort and the row limit of the query",
"reads one snapshot: writes that commit while the export streams are not in it, and are not blocked by it",
"streams a large table row by row with bounded memory",
"fails cleanly past the row or byte bound and keeps the bound finite by default",
"stops on cancellation, on its deadline and on a failing destination, and reports each",
"does not change the database it reads",
"records the current format of a new store and migrates nothing",
"migrates every database in its own transaction, records the version last and repeats as a no-op",
"leaves a database whose step fails exactly as it was and resumes on the next run",
"refuses data in a newer format, a downgrade and a version it has no path to, and writes nothing",
"leaves no pending line for a change the add-on refused, so the same ID applies the corrected request",
"records an inverse for an insert and removes exactly those rows on undo",
"restores the previous values of an update, for the columns it set only",
"brings deleted rows back with their row IDs and every value, nulls included",
"is idempotent by operation ID: the same ID returns the same receipt and undoes once",
"refuses the same operation ID for another change",
"refuses a stale undo with what changed and overwrites nothing",
"refuses an undo whose expected revision moved between the read and the apply",
"unwinds in order: undoing the latest change makes the earlier one undoable again",
"keeps no change set that is too large and says so at apply time",
"expires a change set after the retention and drops what it held",
"keeps the total of change sets of one database bounded by dropping the oldest",
"answers not found for a change that never existed or belongs to a read",
"removes a created table again and refuses once it was touched",
"renames a table or a column back",
"removes an added column again, with its unique index",
"restores a dropped column with its data, its type, required and unique flags",
"restores a dropped table with its columns, rows and row IDs",
"says a dropped column or table was too large to keep, at apply time",
"renames the database back only while it still has the new name",
"undoes a creation only while the database is untouched, and marks that the resource is deleted",
"keeps the change sets in the database file, so deleting the database removes them"
]
},
{
"path": ".cache/addons/logs/tables-databases.json",
"cases": [
"starts the real executable through the authenticated handshake and refuses unauthenticated callers",
"creates a database under the host-assigned ID and lists it only for people who may read it",
"drops the reservation when the addon refuses the name, and leaves no database",
"drops a reservation at reconcile when the crash came before the database was created",
"commits a reservation at reconcile when the crash came after the database was created",
"never exposes a database that has no host record",
"renames one database by operation, replays safely, and leaves every other database alone",
"rejects an undeclared tool, a forged addon binding and an unknown resource",
"keeps databases and operation receipts across an addon restart",
"fails closed when the addon cannot answer, and drops only for an addon that is not installed",
"creates a database from a chat proposal that only the proposer's session confirms",
"settles reservations at bootstrap by asking the real addon and keeps those of pending proposals",
"reads and mutates rows with the exact preview, refuses wrong actions and keeps receipts across a restart",
"declares the row tools and refuses a row tool the manifest does not name",
"changes the schema as the owner, shows data loss in the preview and refuses an editor at the host and the addon",
"rejects a stale schema revision, replays an operation and keeps receipts across a restart",
"declares the schema tools and refuses any schema tool the manifest does not name",
"applies row changes only on the proposer's confirmation and rejects a proposal whose database moved",
"offers the manifest tools to a permitted user and nothing to a user without the feature or after revocation",
"applies a change a chat makes at once for the chat's user, leaves no proposal, and still refuses a key",
"stores every change as a pending proposal and applies it only on the proposer's own session, exactly once",
"keeps the roles of the host for tool calls and rejects forged fields before the owner sees them",
"lists at most the bound of pending proposals and refuses more than the user's quota",
"tells the model and the chat that a data change can be undone, and undoes it from the person's own tab",
"never lets a key, a tool call, another session or a stranger undo, so a model cannot undo its own work",
"refuses a stale undo with what changed, and unwinds from the newest change to the oldest",
"answers not_found for a change nobody recorded",
"restores a dropped column with its data and puts a dropped table back",
"undoes the creation of a database only while nothing touched it, and deletes it then",
"lets an editor undo a data change but not a schema change"
]
}
],
"cases": [
"enforces the size cap on every connection and fails with a typed capacity error",
"builds a database under a data directory containing percent, question and hash characters",
"leaves no change and no receipt when the process dies before commit, and the ID can still apply",
"finds the committed receipt after a crash between commit and reply and never applies twice",
"replays one operation ID to one receipt and refuses another request under the same ID",
"applies one change once when the same operation arrives concurrently",
"keeps a rejected change out of the receipts so its ID is not burnt",
"encodes the receipt payload so the host can read what changed",
"creates, renames and drops tables with stable internal identifiers and one revision step each",
"adds typed columns, renames them without touching identifiers and never uses a label in SQL",
"validates labels by length, characters and case-insensitive uniqueness",
"refuses type changes, unknown operations, expressions and unknown types",
"encodes typed defaults as literals and survives hostile defaults",
"enforces required columns and refuses unique defaults that would collide",
"adds a unique column through a unique index and refuses duplicates atomically",
"drops a column by rebuilding the table and loses exactly what the preview reported",
"never hands out a row ID again after a column drop rebuilds the table",
"keeps the row ID counter when a column drop rebuilds a table emptied by deletes",
"leaves the original table, data and revision intact when a rebuild fails midway",
"previews exact effects and dependent data loss and changes nothing",
"refuses a stale expected revision with the current revision and applies nothing",
"keeps finite limits on tables and columns",
"migrates a database made before the catalog existed on its first schema change",
"inserts bound rows atomically with defaults, required and unique checks",
"updates by explicit IDs and by filter and bumps only the data revision",
"deletes by IDs or filter and refuses broad, empty or oversized selections",
"previews exact count, sample and conflicts without changing anything",
"refuses a changed revision and never re-evaluates a filter against new rows",
"applies exactly one of two proposals made on the same revision",
"replays a row operation by ID and refuses another request under the same ID",
"leaves no change when the process dies before commit and finds the receipt after commit",
"reserves the row id label so no column can shadow it",
"keeps a row table's data across a column drop that rebuilds it",
"reads selected columns with stable row IDs and typed JSON values",
"filters with bounded AND/OR trees and every operator, matching a reference evaluator on random trees",
"escapes LIKE wildcards in text filters",
"keeps NULL semantics: comparisons never match NULL and is-null finds it",
"sorts with a stable row ID tie-break and pages through a cursor that stops at a revision change",
"counts, sums, averages and bounds groups of aggregates",
"reports a real sum or average that overflows as the typed arithmetic error",
"never lets a label, operator or value reach SQL as text",
"honours hard limits on page size, filter depth, conditions, in-lists, sort keys and result bytes",
"stops a query when the context is cancelled or the deadline passes",
"encodes all five types as JSON and writes 64-bit integers as strings beyond 2^53",
"orders datetimes chronologically across fractional seconds and offsets",
"creates one private WAL database file named by the host resource ID",
"never lets an opaque ID or a name reach outside the storage directory",
"refuses a symbolic link as storage directory, database file or ledger",
"is idempotent by operation ID and never creates a second database",
"serializes concurrent creation of one operation into one database",
"recovers creation after a crash on either side of the file, and hides half-built files",
"renames only the named database and replays a renamed operation without effect",
"reports an unknown database and creates nothing for it",
"honours the busy timeout and the per-operation deadline, then succeeds once the lock is gone",
"encodes its receipts so the host can read them",
"writes a header and one record per row with RFC 4180 quoting, UTF-8 and the documented value forms",
"prefixes text cells and labels that a spreadsheet would run, never numbers",
"honours columns, the row identifier column, filter, sort and the row limit of the query",
"reads one snapshot: writes that commit while the export streams are not in it, and are not blocked by it",
"streams a large table row by row with bounded memory",
"fails cleanly past the row or byte bound and keeps the bound finite by default",
"stops on cancellation, on its deadline and on a failing destination, and reports each",
"does not change the database it reads",
"records the current format of a new store and migrates nothing",
"migrates every database in its own transaction, records the version last and repeats as a no-op",
"leaves a database whose step fails exactly as it was and resumes on the next run",
"refuses data in a newer format, a downgrade and a version it has no path to, and writes nothing",
"leaves no pending line for a change the add-on refused, so the same ID applies the corrected request",
"records an inverse for an insert and removes exactly those rows on undo",
"restores the previous values of an update, for the columns it set only",
"brings deleted rows back with their row IDs and every value, nulls included",
"is idempotent by operation ID: the same ID returns the same receipt and undoes once",
"refuses the same operation ID for another change",
"refuses a stale undo with what changed and overwrites nothing",
"refuses an undo whose expected revision moved between the read and the apply",
"unwinds in order: undoing the latest change makes the earlier one undoable again",
"keeps no change set that is too large and says so at apply time",
"expires a change set after the retention and drops what it held",
"keeps the total of change sets of one database bounded by dropping the oldest",
"answers not found for a change that never existed or belongs to a read",
"removes a created table again and refuses once it was touched",
"renames a table or a column back",
"removes an added column again, with its unique index",
"restores a dropped column with its data, its type, required and unique flags",
"restores a dropped table with its columns, rows and row IDs",
"says a dropped column or table was too large to keep, at apply time",
"renames the database back only while it still has the new name",
"undoes a creation only while the database is untouched, and marks that the resource is deleted",
"keeps the change sets in the database file, so deleting the database removes them",
"starts the real executable through the authenticated handshake and refuses unauthenticated callers",
"creates a database under the host-assigned ID and lists it only for people who may read it",
"drops the reservation when the addon refuses the name, and leaves no database",
"drops a reservation at reconcile when the crash came before the database was created",
"commits a reservation at reconcile when the crash came after the database was created",
"never exposes a database that has no host record",
"renames one database by operation, replays safely, and leaves every other database alone",
"rejects an undeclared tool, a forged addon binding and an unknown resource",
"keeps databases and operation receipts across an addon restart",
"fails closed when the addon cannot answer, and drops only for an addon that is not installed",
"creates a database from a chat proposal that only the proposer's session confirms",
"settles reservations at bootstrap by asking the real addon and keeps those of pending proposals",
"reads and mutates rows with the exact preview, refuses wrong actions and keeps receipts across a restart",
"declares the row tools and refuses a row tool the manifest does not name",
"changes the schema as the owner, shows data loss in the preview and refuses an editor at the host and the addon",
"rejects a stale schema revision, replays an operation and keeps receipts across a restart",
"declares the schema tools and refuses any schema tool the manifest does not name",
"applies row changes only on the proposer's confirmation and rejects a proposal whose database moved",
"offers the manifest tools to a permitted user and nothing to a user without the feature or after revocation",
"applies a change a chat makes at once for the chat's user, leaves no proposal, and still refuses a key",
"stores every change as a pending proposal and applies it only on the proposer's own session, exactly once",
"keeps the roles of the host for tool calls and rejects forged fields before the owner sees them",
"lists at most the bound of pending proposals and refuses more than the user's quota",
"tells the model and the chat that a data change can be undone, and undoes it from the person's own tab",
"never lets a key, a tool call, another session or a stranger undo, so a model cannot undo its own work",
"refuses a stale undo with what changed, and unwinds from the newest change to the oldest",
"answers not_found for a change nobody recorded",
"restores a dropped column with its data and puts a dropped table back",
"undoes the creation of a database only while nothing touched it, and deletes it then",
"lets an editor undo a data change but not a schema change"
]
},
"tables-schema": {
"kind": "ginkgo",
"commands": [
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./addons/tables/internal/store",
"-ginkgo.json-report=../../../../.cache/addons/logs/tables-schema-store.json"
],
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./tests/addons/tables",
"-ginkgo.json-report=../../../.cache/addons/logs/tables-schema.json"
]
],
"report": ".cache/addons/logs/tables-schema-store.json",
"reports": [
{
"path": ".cache/addons/logs/tables-schema-store.json",
"cases": [
"enforces the size cap on every connection and fails with a typed capacity error",
"builds a database under a data directory containing percent, question and hash characters",
"leaves no change and no receipt when the process dies before commit, and the ID can still apply",
"finds the committed receipt after a crash between commit and reply and never applies twice",
"replays one operation ID to one receipt and refuses another request under the same ID",
"applies one change once when the same operation arrives concurrently",
"keeps a rejected change out of the receipts so its ID is not burnt",
"encodes the receipt payload so the host can read what changed",
"creates, renames and drops tables with stable internal identifiers and one revision step each",
"adds typed columns, renames them without touching identifiers and never uses a label in SQL",
"validates labels by length, characters and case-insensitive uniqueness",
"refuses type changes, unknown operations, expressions and unknown types",
"encodes typed defaults as literals and survives hostile defaults",
"enforces required columns and refuses unique defaults that would collide",
"adds a unique column through a unique index and refuses duplicates atomically",
"drops a column by rebuilding the table and loses exactly what the preview reported",
"never hands out a row ID again after a column drop rebuilds the table",
"keeps the row ID counter when a column drop rebuilds a table emptied by deletes",
"leaves the original table, data and revision intact when a rebuild fails midway",
"previews exact effects and dependent data loss and changes nothing",
"refuses a stale expected revision with the current revision and applies nothing",
"keeps finite limits on tables and columns",
"migrates a database made before the catalog existed on its first schema change",
"inserts bound rows atomically with defaults, required and unique checks",
"updates by explicit IDs and by filter and bumps only the data revision",
"deletes by IDs or filter and refuses broad, empty or oversized selections",
"previews exact count, sample and conflicts without changing anything",
"refuses a changed revision and never re-evaluates a filter against new rows",
"applies exactly one of two proposals made on the same revision",
"replays a row operation by ID and refuses another request under the same ID",
"leaves no change when the process dies before commit and finds the receipt after commit",
"reserves the row id label so no column can shadow it",
"keeps a row table's data across a column drop that rebuilds it",
"reads selected columns with stable row IDs and typed JSON values",
"filters with bounded AND/OR trees and every operator, matching a reference evaluator on random trees",
"escapes LIKE wildcards in text filters",
"keeps NULL semantics: comparisons never match NULL and is-null finds it",
"sorts with a stable row ID tie-break and pages through a cursor that stops at a revision change",
"counts, sums, averages and bounds groups of aggregates",
"reports a real sum or average that overflows as the typed arithmetic error",
"never lets a label, operator or value reach SQL as text",
"honours hard limits on page size, filter depth, conditions, in-lists, sort keys and result bytes",
"stops a query when the context is cancelled or the deadline passes",
"encodes all five types as JSON and writes 64-bit integers as strings beyond 2^53",
"orders datetimes chronologically across fractional seconds and offsets",
"creates one private WAL database file named by the host resource ID",
"never lets an opaque ID or a name reach outside the storage directory",
"refuses a symbolic link as storage directory, database file or ledger",
"is idempotent by operation ID and never creates a second database",
"serializes concurrent creation of one operation into one database",
"recovers creation after a crash on either side of the file, and hides half-built files",
"renames only the named database and replays a renamed operation without effect",
"reports an unknown database and creates nothing for it",
"honours the busy timeout and the per-operation deadline, then succeeds once the lock is gone",
"encodes its receipts so the host can read them",
"writes a header and one record per row with RFC 4180 quoting, UTF-8 and the documented value forms",
"prefixes text cells and labels that a spreadsheet would run, never numbers",
"honours columns, the row identifier column, filter, sort and the row limit of the query",
"reads one snapshot: writes that commit while the export streams are not in it, and are not blocked by it",
"streams a large table row by row with bounded memory",
"fails cleanly past the row or byte bound and keeps the bound finite by default",
"stops on cancellation, on its deadline and on a failing destination, and reports each",
"does not change the database it reads",
"records the current format of a new store and migrates nothing",
"migrates every database in its own transaction, records the version last and repeats as a no-op",
"leaves a database whose step fails exactly as it was and resumes on the next run",
"refuses data in a newer format, a downgrade and a version it has no path to, and writes nothing",
"leaves no pending line for a change the add-on refused, so the same ID applies the corrected request",
"records an inverse for an insert and removes exactly those rows on undo",
"restores the previous values of an update, for the columns it set only",
"brings deleted rows back with their row IDs and every value, nulls included",
"is idempotent by operation ID: the same ID returns the same receipt and undoes once",
"refuses the same operation ID for another change",
"refuses a stale undo with what changed and overwrites nothing",
"refuses an undo whose expected revision moved between the read and the apply",
"unwinds in order: undoing the latest change makes the earlier one undoable again",
"keeps no change set that is too large and says so at apply time",
"expires a change set after the retention and drops what it held",
"keeps the total of change sets of one database bounded by dropping the oldest",
"answers not found for a change that never existed or belongs to a read",
"removes a created table again and refuses once it was touched",
"renames a table or a column back",
"removes an added column again, with its unique index",
"restores a dropped column with its data, its type, required and unique flags",
"restores a dropped table with its columns, rows and row IDs",
"says a dropped column or table was too large to keep, at apply time",
"renames the database back only while it still has the new name",
"undoes a creation only while the database is untouched, and marks that the resource is deleted",
"keeps the change sets in the database file, so deleting the database removes them"
]
},
{
"path": ".cache/addons/logs/tables-schema.json",
"cases": [
"starts the real executable through the authenticated handshake and refuses unauthenticated callers",
"creates a database under the host-assigned ID and lists it only for people who may read it",
"drops the reservation when the addon refuses the name, and leaves no database",
"drops a reservation at reconcile when the crash came before the database was created",
"commits a reservation at reconcile when the crash came after the database was created",
"never exposes a database that has no host record",
"renames one database by operation, replays safely, and leaves every other database alone",
"rejects an undeclared tool, a forged addon binding and an unknown resource",
"keeps databases and operation receipts across an addon restart",
"fails closed when the addon cannot answer, and drops only for an addon that is not installed",
"creates a database from a chat proposal that only the proposer's session confirms",
"settles reservations at bootstrap by asking the real addon and keeps those of pending proposals",
"reads and mutates rows with the exact preview, refuses wrong actions and keeps receipts across a restart",
"declares the row tools and refuses a row tool the manifest does not name",
"changes the schema as the owner, shows data loss in the preview and refuses an editor at the host and the addon",
"rejects a stale schema revision, replays an operation and keeps receipts across a restart",
"declares the schema tools and refuses any schema tool the manifest does not name",
"applies row changes only on the proposer's confirmation and rejects a proposal whose database moved",
"offers the manifest tools to a permitted user and nothing to a user without the feature or after revocation",
"applies a change a chat makes at once for the chat's user, leaves no proposal, and still refuses a key",
"stores every change as a pending proposal and applies it only on the proposer's own session, exactly once",
"keeps the roles of the host for tool calls and rejects forged fields before the owner sees them",
"lists at most the bound of pending proposals and refuses more than the user's quota",
"tells the model and the chat that a data change can be undone, and undoes it from the person's own tab",
"never lets a key, a tool call, another session or a stranger undo, so a model cannot undo its own work",
"refuses a stale undo with what changed, and unwinds from the newest change to the oldest",
"answers not_found for a change nobody recorded",
"restores a dropped column with its data and puts a dropped table back",
"undoes the creation of a database only while nothing touched it, and deletes it then",
"lets an editor undo a data change but not a schema change"
]
}
],
"cases": [
"enforces the size cap on every connection and fails with a typed capacity error",
"builds a database under a data directory containing percent, question and hash characters",
"leaves no change and no receipt when the process dies before commit, and the ID can still apply",
"finds the committed receipt after a crash between commit and reply and never applies twice",
"replays one operation ID to one receipt and refuses another request under the same ID",
"applies one change once when the same operation arrives concurrently",
"keeps a rejected change out of the receipts so its ID is not burnt",
"encodes the receipt payload so the host can read what changed",
"creates, renames and drops tables with stable internal identifiers and one revision step each",
"adds typed columns, renames them without touching identifiers and never uses a label in SQL",
"validates labels by length, characters and case-insensitive uniqueness",
"refuses type changes, unknown operations, expressions and unknown types",
"encodes typed defaults as literals and survives hostile defaults",
"enforces required columns and refuses unique defaults that would collide",
"adds a unique column through a unique index and refuses duplicates atomically",
"drops a column by rebuilding the table and loses exactly what the preview reported",
"never hands out a row ID again after a column drop rebuilds the table",
"keeps the row ID counter when a column drop rebuilds a table emptied by deletes",
"leaves the original table, data and revision intact when a rebuild fails midway",
"previews exact effects and dependent data loss and changes nothing",
"refuses a stale expected revision with the current revision and applies nothing",
"keeps finite limits on tables and columns",
"migrates a database made before the catalog existed on its first schema change",
"inserts bound rows atomically with defaults, required and unique checks",
"updates by explicit IDs and by filter and bumps only the data revision",
"deletes by IDs or filter and refuses broad, empty or oversized selections",
"previews exact count, sample and conflicts without changing anything",
"refuses a changed revision and never re-evaluates a filter against new rows",
"applies exactly one of two proposals made on the same revision",
"replays a row operation by ID and refuses another request under the same ID",
"leaves no change when the process dies before commit and finds the receipt after commit",
"reserves the row id label so no column can shadow it",
"keeps a row table's data across a column drop that rebuilds it",
"reads selected columns with stable row IDs and typed JSON values",
"filters with bounded AND/OR trees and every operator, matching a reference evaluator on random trees",
"escapes LIKE wildcards in text filters",
"keeps NULL semantics: comparisons never match NULL and is-null finds it",
"sorts with a stable row ID tie-break and pages through a cursor that stops at a revision change",
"counts, sums, averages and bounds groups of aggregates",
"reports a real sum or average that overflows as the typed arithmetic error",
"never lets a label, operator or value reach SQL as text",
"honours hard limits on page size, filter depth, conditions, in-lists, sort keys and result bytes",
"stops a query when the context is cancelled or the deadline passes",
"encodes all five types as JSON and writes 64-bit integers as strings beyond 2^53",
"orders datetimes chronologically across fractional seconds and offsets",
"creates one private WAL database file named by the host resource ID",
"never lets an opaque ID or a name reach outside the storage directory",
"refuses a symbolic link as storage directory, database file or ledger",
"is idempotent by operation ID and never creates a second database",
"serializes concurrent creation of one operation into one database",
"recovers creation after a crash on either side of the file, and hides half-built files",
"renames only the named database and replays a renamed operation without effect",
"reports an unknown database and creates nothing for it",
"honours the busy timeout and the per-operation deadline, then succeeds once the lock is gone",
"encodes its receipts so the host can read them",
"writes a header and one record per row with RFC 4180 quoting, UTF-8 and the documented value forms",
"prefixes text cells and labels that a spreadsheet would run, never numbers",
"honours columns, the row identifier column, filter, sort and the row limit of the query",
"reads one snapshot: writes that commit while the export streams are not in it, and are not blocked by it",
"streams a large table row by row with bounded memory",
"fails cleanly past the row or byte bound and keeps the bound finite by default",
"stops on cancellation, on its deadline and on a failing destination, and reports each",
"does not change the database it reads",
"records the current format of a new store and migrates nothing",
"migrates every database in its own transaction, records the version last and repeats as a no-op",
"leaves a database whose step fails exactly as it was and resumes on the next run",
"refuses data in a newer format, a downgrade and a version it has no path to, and writes nothing",
"leaves no pending line for a change the add-on refused, so the same ID applies the corrected request",
"records an inverse for an insert and removes exactly those rows on undo",
"restores the previous values of an update, for the columns it set only",
"brings deleted rows back with their row IDs and every value, nulls included",
"is idempotent by operation ID: the same ID returns the same receipt and undoes once",
"refuses the same operation ID for another change",
"refuses a stale undo with what changed and overwrites nothing",
"refuses an undo whose expected revision moved between the read and the apply",
"unwinds in order: undoing the latest change makes the earlier one undoable again",
"keeps no change set that is too large and says so at apply time",
"expires a change set after the retention and drops what it held",
"keeps the total of change sets of one database bounded by dropping the oldest",
"answers not found for a change that never existed or belongs to a read",
"removes a created table again and refuses once it was touched",
"renames a table or a column back",
"removes an added column again, with its unique index",
"restores a dropped column with its data, its type, required and unique flags",
"restores a dropped table with its columns, rows and row IDs",
"says a dropped column or table was too large to keep, at apply time",
"renames the database back only while it still has the new name",
"undoes a creation only while the database is untouched, and marks that the resource is deleted",
"keeps the change sets in the database file, so deleting the database removes them",
"starts the real executable through the authenticated handshake and refuses unauthenticated callers",
"creates a database under the host-assigned ID and lists it only for people who may read it",
"drops the reservation when the addon refuses the name, and leaves no database",
"drops a reservation at reconcile when the crash came before the database was created",
"commits a reservation at reconcile when the crash came after the database was created",
"never exposes a database that has no host record",
"renames one database by operation, replays safely, and leaves every other database alone",
"rejects an undeclared tool, a forged addon binding and an unknown resource",
"keeps databases and operation receipts across an addon restart",
"fails closed when the addon cannot answer, and drops only for an addon that is not installed",
"creates a database from a chat proposal that only the proposer's session confirms",
"settles reservations at bootstrap by asking the real addon and keeps those of pending proposals",
"reads and mutates rows with the exact preview, refuses wrong actions and keeps receipts across a restart",
"declares the row tools and refuses a row tool the manifest does not name",
"changes the schema as the owner, shows data loss in the preview and refuses an editor at the host and the addon",
"rejects a stale schema revision, replays an operation and keeps receipts across a restart",
"declares the schema tools and refuses any schema tool the manifest does not name",
"applies row changes only on the proposer's confirmation and rejects a proposal whose database moved",
"offers the manifest tools to a permitted user and nothing to a user without the feature or after revocation",
"applies a change a chat makes at once for the chat's user, leaves no proposal, and still refuses a key",
"stores every change as a pending proposal and applies it only on the proposer's own session, exactly once",
"keeps the roles of the host for tool calls and rejects forged fields before the owner sees them",
"lists at most the bound of pending proposals and refuses more than the user's quota",
"tells the model and the chat that a data change can be undone, and undoes it from the person's own tab",
"never lets a key, a tool call, another session or a stranger undo, so a model cannot undo its own work",
"refuses a stale undo with what changed, and unwinds from the newest change to the oldest",
"answers not_found for a change nobody recorded",
"restores a dropped column with its data and puts a dropped table back",
"undoes the creation of a database only while nothing touched it, and deletes it then",
"lets an editor undo a data change but not a schema change"
]
},
"tables-rows": {
"kind": "ginkgo",
"commands": [
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./addons/tables/internal/store",
"-ginkgo.json-report=../../../../.cache/addons/logs/tables-rows-store.json"
],
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./tests/addons/tables",
"-ginkgo.json-report=../../../.cache/addons/logs/tables-rows.json"
]
],
"report": ".cache/addons/logs/tables-rows-store.json",
"reports": [
{
"path": ".cache/addons/logs/tables-rows-store.json",
"cases": [
"enforces the size cap on every connection and fails with a typed capacity error",
"builds a database under a data directory containing percent, question and hash characters",
"leaves no change and no receipt when the process dies before commit, and the ID can still apply",
"finds the committed receipt after a crash between commit and reply and never applies twice",
"replays one operation ID to one receipt and refuses another request under the same ID",
"applies one change once when the same operation arrives concurrently",
"keeps a rejected change out of the receipts so its ID is not burnt",
"encodes the receipt payload so the host can read what changed",
"creates, renames and drops tables with stable internal identifiers and one revision step each",
"adds typed columns, renames them without touching identifiers and never uses a label in SQL",
"validates labels by length, characters and case-insensitive uniqueness",
"refuses type changes, unknown operations, expressions and unknown types",
"encodes typed defaults as literals and survives hostile defaults",
"enforces required columns and refuses unique defaults that would collide",
"adds a unique column through a unique index and refuses duplicates atomically",
"drops a column by rebuilding the table and loses exactly what the preview reported",
"never hands out a row ID again after a column drop rebuilds the table",
"keeps the row ID counter when a column drop rebuilds a table emptied by deletes",
"leaves the original table, data and revision intact when a rebuild fails midway",
"previews exact effects and dependent data loss and changes nothing",
"refuses a stale expected revision with the current revision and applies nothing",
"keeps finite limits on tables and columns",
"migrates a database made before the catalog existed on its first schema change",
"inserts bound rows atomically with defaults, required and unique checks",
"updates by explicit IDs and by filter and bumps only the data revision",
"deletes by IDs or filter and refuses broad, empty or oversized selections",
"previews exact count, sample and conflicts without changing anything",
"refuses a changed revision and never re-evaluates a filter against new rows",
"applies exactly one of two proposals made on the same revision",
"replays a row operation by ID and refuses another request under the same ID",
"leaves no change when the process dies before commit and finds the receipt after commit",
"reserves the row id label so no column can shadow it",
"keeps a row table's data across a column drop that rebuilds it",
"reads selected columns with stable row IDs and typed JSON values",
"filters with bounded AND/OR trees and every operator, matching a reference evaluator on random trees",
"escapes LIKE wildcards in text filters",
"keeps NULL semantics: comparisons never match NULL and is-null finds it",
"sorts with a stable row ID tie-break and pages through a cursor that stops at a revision change",
"counts, sums, averages and bounds groups of aggregates",
"reports a real sum or average that overflows as the typed arithmetic error",
"never lets a label, operator or value reach SQL as text",
"honours hard limits on page size, filter depth, conditions, in-lists, sort keys and result bytes",
"stops a query when the context is cancelled or the deadline passes",
"encodes all five types as JSON and writes 64-bit integers as strings beyond 2^53",
"orders datetimes chronologically across fractional seconds and offsets",
"creates one private WAL database file named by the host resource ID",
"never lets an opaque ID or a name reach outside the storage directory",
"refuses a symbolic link as storage directory, database file or ledger",
"is idempotent by operation ID and never creates a second database",
"serializes concurrent creation of one operation into one database",
"recovers creation after a crash on either side of the file, and hides half-built files",
"renames only the named database and replays a renamed operation without effect",
"reports an unknown database and creates nothing for it",
"honours the busy timeout and the per-operation deadline, then succeeds once the lock is gone",
"encodes its receipts so the host can read them",
"writes a header and one record per row with RFC 4180 quoting, UTF-8 and the documented value forms",
"prefixes text cells and labels that a spreadsheet would run, never numbers",
"honours columns, the row identifier column, filter, sort and the row limit of the query",
"reads one snapshot: writes that commit while the export streams are not in it, and are not blocked by it",
"streams a large table row by row with bounded memory",
"fails cleanly past the row or byte bound and keeps the bound finite by default",
"stops on cancellation, on its deadline and on a failing destination, and reports each",
"does not change the database it reads",
"records the current format of a new store and migrates nothing",
"migrates every database in its own transaction, records the version last and repeats as a no-op",
"leaves a database whose step fails exactly as it was and resumes on the next run",
"refuses data in a newer format, a downgrade and a version it has no path to, and writes nothing",
"leaves no pending line for a change the add-on refused, so the same ID applies the corrected request",
"records an inverse for an insert and removes exactly those rows on undo",
"restores the previous values of an update, for the columns it set only",
"brings deleted rows back with their row IDs and every value, nulls included",
"is idempotent by operation ID: the same ID returns the same receipt and undoes once",
"refuses the same operation ID for another change",
"refuses a stale undo with what changed and overwrites nothing",
"refuses an undo whose expected revision moved between the read and the apply",
"unwinds in order: undoing the latest change makes the earlier one undoable again",
"keeps no change set that is too large and says so at apply time",
"expires a change set after the retention and drops what it held",
"keeps the total of change sets of one database bounded by dropping the oldest",
"answers not found for a change that never existed or belongs to a read",
"removes a created table again and refuses once it was touched",
"renames a table or a column back",
"removes an added column again, with its unique index",
"restores a dropped column with its data, its type, required and unique flags",
"restores a dropped table with its columns, rows and row IDs",
"says a dropped column or table was too large to keep, at apply time",
"renames the database back only while it still has the new name",
"undoes a creation only while the database is untouched, and marks that the resource is deleted",
"keeps the change sets in the database file, so deleting the database removes them"
]
},
{
"path": ".cache/addons/logs/tables-rows.json",
"cases": [
"starts the real executable through the authenticated handshake and refuses unauthenticated callers",
"creates a database under the host-assigned ID and lists it only for people who may read it",
"drops the reservation when the addon refuses the name, and leaves no database",
"drops a reservation at reconcile when the crash came before the database was created",
"commits a reservation at reconcile when the crash came after the database was created",
"never exposes a database that has no host record",
"renames one database by operation, replays safely, and leaves every other database alone",
"rejects an undeclared tool, a forged addon binding and an unknown resource",
"keeps databases and operation receipts across an addon restart",
"fails closed when the addon cannot answer, and drops only for an addon that is not installed",
"creates a database from a chat proposal that only the proposer's session confirms",
"settles reservations at bootstrap by asking the real addon and keeps those of pending proposals",
"reads and mutates rows with the exact preview, refuses wrong actions and keeps receipts across a restart",
"declares the row tools and refuses a row tool the manifest does not name",
"changes the schema as the owner, shows data loss in the preview and refuses an editor at the host and the addon",
"rejects a stale schema revision, replays an operation and keeps receipts across a restart",
"declares the schema tools and refuses any schema tool the manifest does not name",
"applies row changes only on the proposer's confirmation and rejects a proposal whose database moved",
"offers the manifest tools to a permitted user and nothing to a user without the feature or after revocation",
"applies a change a chat makes at once for the chat's user, leaves no proposal, and still refuses a key",
"stores every change as a pending proposal and applies it only on the proposer's own session, exactly once",
"keeps the roles of the host for tool calls and rejects forged fields before the owner sees them",
"lists at most the bound of pending proposals and refuses more than the user's quota",
"tells the model and the chat that a data change can be undone, and undoes it from the person's own tab",
"never lets a key, a tool call, another session or a stranger undo, so a model cannot undo its own work",
"refuses a stale undo with what changed, and unwinds from the newest change to the oldest",
"answers not_found for a change nobody recorded",
"restores a dropped column with its data and puts a dropped table back",
"undoes the creation of a database only while nothing touched it, and deletes it then",
"lets an editor undo a data change but not a schema change"
]
}
],
"cases": [
"enforces the size cap on every connection and fails with a typed capacity error",
"builds a database under a data directory containing percent, question and hash characters",
"leaves no change and no receipt when the process dies before commit, and the ID can still apply",
"finds the committed receipt after a crash between commit and reply and never applies twice",
"replays one operation ID to one receipt and refuses another request under the same ID",
"applies one change once when the same operation arrives concurrently",
"keeps a rejected change out of the receipts so its ID is not burnt",
"encodes the receipt payload so the host can read what changed",
"creates, renames and drops tables with stable internal identifiers and one revision step each",
"adds typed columns, renames them without touching identifiers and never uses a label in SQL",
"validates labels by length, characters and case-insensitive uniqueness",
"refuses type changes, unknown operations, expressions and unknown types",
"encodes typed defaults as literals and survives hostile defaults",
"enforces required columns and refuses unique defaults that would collide",
"adds a unique column through a unique index and refuses duplicates atomically",
"drops a column by rebuilding the table and loses exactly what the preview reported",
"never hands out a row ID again after a column drop rebuilds the table",
"keeps the row ID counter when a column drop rebuilds a table emptied by deletes",
"leaves the original table, data and revision intact when a rebuild fails midway",
"previews exact effects and dependent data loss and changes nothing",
"refuses a stale expected revision with the current revision and applies nothing",
"keeps finite limits on tables and columns",
"migrates a database made before the catalog existed on its first schema change",
"inserts bound rows atomically with defaults, required and unique checks",
"updates by explicit IDs and by filter and bumps only the data revision",
"deletes by IDs or filter and refuses broad, empty or oversized selections",
"previews exact count, sample and conflicts without changing anything",
"refuses a changed revision and never re-evaluates a filter against new rows",
"applies exactly one of two proposals made on the same revision",
"replays a row operation by ID and refuses another request under the same ID",
"leaves no change when the process dies before commit and finds the receipt after commit",
"reserves the row id label so no column can shadow it",
"keeps a row table's data across a column drop that rebuilds it",
"reads selected columns with stable row IDs and typed JSON values",
"filters with bounded AND/OR trees and every operator, matching a reference evaluator on random trees",
"escapes LIKE wildcards in text filters",
"keeps NULL semantics: comparisons never match NULL and is-null finds it",
"sorts with a stable row ID tie-break and pages through a cursor that stops at a revision change",
"counts, sums, averages and bounds groups of aggregates",
"reports a real sum or average that overflows as the typed arithmetic error",
"never lets a label, operator or value reach SQL as text",
"honours hard limits on page size, filter depth, conditions, in-lists, sort keys and result bytes",
"stops a query when the context is cancelled or the deadline passes",
"encodes all five types as JSON and writes 64-bit integers as strings beyond 2^53",
"orders datetimes chronologically across fractional seconds and offsets",
"creates one private WAL database file named by the host resource ID",
"never lets an opaque ID or a name reach outside the storage directory",
"refuses a symbolic link as storage directory, database file or ledger",
"is idempotent by operation ID and never creates a second database",
"serializes concurrent creation of one operation into one database",
"recovers creation after a crash on either side of the file, and hides half-built files",
"renames only the named database and replays a renamed operation without effect",
"reports an unknown database and creates nothing for it",
"honours the busy timeout and the per-operation deadline, then succeeds once the lock is gone",
"encodes its receipts so the host can read them",
"writes a header and one record per row with RFC 4180 quoting, UTF-8 and the documented value forms",
"prefixes text cells and labels that a spreadsheet would run, never numbers",
"honours columns, the row identifier column, filter, sort and the row limit of the query",
"reads one snapshot: writes that commit while the export streams are not in it, and are not blocked by it",
"streams a large table row by row with bounded memory",
"fails cleanly past the row or byte bound and keeps the bound finite by default",
"stops on cancellation, on its deadline and on a failing destination, and reports each",
"does not change the database it reads",
"records the current format of a new store and migrates nothing",
"migrates every database in its own transaction, records the version last and repeats as a no-op",
"leaves a database whose step fails exactly as it was and resumes on the next run",
"refuses data in a newer format, a downgrade and a version it has no path to, and writes nothing",
"leaves no pending line for a change the add-on refused, so the same ID applies the corrected request",
"records an inverse for an insert and removes exactly those rows on undo",
"restores the previous values of an update, for the columns it set only",
"brings deleted rows back with their row IDs and every value, nulls included",
"is idempotent by operation ID: the same ID returns the same receipt and undoes once",
"refuses the same operation ID for another change",
"refuses a stale undo with what changed and overwrites nothing",
"refuses an undo whose expected revision moved between the read and the apply",
"unwinds in order: undoing the latest change makes the earlier one undoable again",
"keeps no change set that is too large and says so at apply time",
"expires a change set after the retention and drops what it held",
"keeps the total of change sets of one database bounded by dropping the oldest",
"answers not found for a change that never existed or belongs to a read",
"removes a created table again and refuses once it was touched",
"renames a table or a column back",
"removes an added column again, with its unique index",
"restores a dropped column with its data, its type, required and unique flags",
"restores a dropped table with its columns, rows and row IDs",
"says a dropped column or table was too large to keep, at apply time",
"renames the database back only while it still has the new name",
"undoes a creation only while the database is untouched, and marks that the resource is deleted",
"keeps the change sets in the database file, so deleting the database removes them",
"starts the real executable through the authenticated handshake and refuses unauthenticated callers",
"creates a database under the host-assigned ID and lists it only for people who may read it",
"drops the reservation when the addon refuses the name, and leaves no database",
"drops a reservation at reconcile when the crash came before the database was created",
"commits a reservation at reconcile when the crash came after the database was created",
"never exposes a database that has no host record",
"renames one database by operation, replays safely, and leaves every other database alone",
"rejects an undeclared tool, a forged addon binding and an unknown resource",
"keeps databases and operation receipts across an addon restart",
"fails closed when the addon cannot answer, and drops only for an addon that is not installed",
"creates a database from a chat proposal that only the proposer's session confirms",
"settles reservations at bootstrap by asking the real addon and keeps those of pending proposals",
"reads and mutates rows with the exact preview, refuses wrong actions and keeps receipts across a restart",
"declares the row tools and refuses a row tool the manifest does not name",
"changes the schema as the owner, shows data loss in the preview and refuses an editor at the host and the addon",
"rejects a stale schema revision, replays an operation and keeps receipts across a restart",
"declares the schema tools and refuses any schema tool the manifest does not name",
"applies row changes only on the proposer's confirmation and rejects a proposal whose database moved",
"offers the manifest tools to a permitted user and nothing to a user without the feature or after revocation",
"applies a change a chat makes at once for the chat's user, leaves no proposal, and still refuses a key",
"stores every change as a pending proposal and applies it only on the proposer's own session, exactly once",
"keeps the roles of the host for tool calls and rejects forged fields before the owner sees them",
"lists at most the bound of pending proposals and refuses more than the user's quota",
"tells the model and the chat that a data change can be undone, and undoes it from the person's own tab",
"never lets a key, a tool call, another session or a stranger undo, so a model cannot undo its own work",
"refuses a stale undo with what changed, and unwinds from the newest change to the oldest",
"answers not_found for a change nobody recorded",
"restores a dropped column with its data and puts a dropped table back",
"undoes the creation of a database only while nothing touched it, and deletes it then",
"lets an editor undo a data change but not a schema change"
]
},
"tables-tools": {
"kind": "shell",
"commands": [
[
"sh",
"scripts/addons/tables_tools.sh"
]
],
"cases": [
"unit: tools: the namespace is the brokered add-on tool names only",
"unit: tools: a proposal result of an add-on tool gives its identifier and nothing else",
"unit: tools: other kinds, other tools and malformed identifiers give no card",
"unit: tools: the stored history keeps the reference of a proposal and no row data",
"unit: tools: the card facts come from the stored proposal and never from model text",
"unit: tools: stale, expired, blocked and settled proposals cannot be decided",
"unit: tools: a confirmation names the displayed proposal and its digest and nothing a model supplied",
"go: accepts the Tables definitions and classifies every model-facing tool",
"go: keeps the schema bytes of a parsed manifest equal to what the runtime echoes back",
"go: rejects a definition that declares an identity, role, approval or operation property",
"go: rejects an undeclared tool, a repeated tool, an unknown kind and a missing or unbounded schema",
"go: binds every tool kind of a chat call to the chat",
"go: refuses a call of the chats adapter that names a conversation without its binding",
"go: refuses an incomplete chat call",
"go: leaves the calls of other consumers without a binding",
"go: binds one actor to an executor and serves tools through the broker only",
"go: refuses to bind an executor when the owner denies the actor",
"go: routes the add-on namespace to the broker and never to another executor",
"go: never offers or runs a tool of an MCP session under the add-on namespace",
"go: reads the opt-in once and answers a surface that has no broker with a typed rejection",
"go: takes the actor from the trusted request context only",
"go: classifies every source file that discovers or executes tools",
"go: flags source that hands sessions to the agent library without the namespace filter",
"go: installs the namespace filter wherever sessions reach the agent library",
"go: names a reason and an enforcement for every rejection and an actor for every route, with real files",
"go: keeps the table of the Tables documentation in step with the matrix",
"go: lets only the brokered consumers import the adapter",
"go: has no add-on tool and no add-on route in the admin assistant catalog",
"go: discovers namespaced tools with schemas from the manifest for enabled running addons only",
"go: offers nothing for a disabled, stopped or failed addon and nothing when the owner cannot answer",
"go: has no tool for sharing, deleting a database, purging retained data or approving",
"go: drops a definition whose namespaced name is not a valid function name or does not fit",
"go: reads through the gateway with the immutable actor, the listed generation and the resource taken out of the arguments",
"go: refuses an oversized result instead of truncating it",
"go: returns file results as private artifact references with no bytes",
"go: passes a denial, an outage and an unknown outcome through unchanged",
"go: turns a row change into a proposal reference and never applies",
"go: proposes schema changes under the schema action and creation with no resource",
"go: gives every call its own operation ID so one call can never replay another",
"go: reports a proposal outage with the typed error and no reference",
"go: rejects forged identity, role, approval and operation fields before anything reaches the owner",
"go: rejects approval aliases, undefined tools and names outside the namespace",
"go: rejects arguments that are not exactly one bounded object with known, typed properties",
"go: has no way to confirm, cancel or resolve a proposal",
"go: uses the actor of each call and nothing a previous call left behind",
"go: refuses an actor without a user or credential before any call",
"go: serves the real gateway type as its backend",
"go: lists the caller's own pending proposals the same from the owner and every forwarding frontend",
"go: offers the manifest tools to a permitted user and nothing to a user without the feature or after revocation",
"go: applies a change a chat makes at once for the chat's user, leaves no proposal, and still refuses a key",
"go: stores every change as a pending proposal and applies it only on the proposer's own session, exactly once",
"go: keeps the roles of the host for tool calls and rejects forged fields before the owner sees them",
"go: lists at most the bound of pending proposals and refuses more than the user's quota",
"go: gives the model an error result that says the request was invalid, for a read and for a change",
"go: keeps an outage an error, never the refused result",
"go: are never offered to a model and are unknown when a model calls them",
"go: applies a row change for the chat adapter, as the actor, with the digest it just stored",
"go: says a change can be undone when the add-on kept a change set, with the change ID and what undo does",
"go: says why a change cannot be undone when the add-on says so, and never trusts an undo note with a bad ID",
"go: gives a reason when the add-on says nothing about undo",
"go: keeps the result with the longest undo text small enough for the chat",
"go: stays under the chat's 2 KiB cap for the tool result even with every excerpt at its largest",
"go: keeps the result small enough for the chat to store as valid JSON",
"go: applies a creation and a schema change too",
"go: never confirms for an adapter that is not the chats one, even over an owner that could",
"go: keeps a proposal when the owner cannot apply, so nothing is lost",
"go: withdraws the proposal and reports the error when the apply is refused as stale",
"go: tells the model the call was invalid when the add-on refuses it, and withdraws the proposal",
"go: does not withdraw, and does not claim success, when the outcome is unknown",
"go: does not report a change that the add-on rejected at the apply",
"go: reads the list of add-ons next to the opt-in and consumes both keys",
"go: keeps the boolean form unchanged: a nil list offers every add-on",
"go: offers only the tools of the listed add-ons",
"go: hides the tools of the named add-ons and refuses a call to them as unknown, whatever the list says",
"go: offers nothing for an empty list and for ids that match no add-on",
"go: refuses a call to an add-on that is not listed, as an unknown tool, before the owner is reached",
"go: applies the list through the provider and keeps the actor binding",
"go: passes on the reason the add-on gave, such as a missing engine, and not the generic class",
"go: tells the model a missing permission and an unreachable resource in plain words, for a read and for a change",
"go: accepts a call whose bound body is exactly 1 MiB, end to end, and refuses one byte more",
"go: offers an action tool to the chats adapter and to nobody else",
"go: runs an action tool for the chats adapter as the actor, with the act action, and returns its payload",
"go: tells an action tool which conversation it runs in, from the chat and never from the model",
"go: does not run an action tool for any other adapter, and says the tool is unknown",
"go: is unavailable when the owner cannot act, and never falls back to a read or a proposal",
"go: keeps the argument rules: an identity argument is refused before anything runs",
"go: are listed in any state, with the names they replace and whether they run",
"go: keeps its namespaced name and carries the built-in it shadows, only for a replaceable name",
"go: names the replacement string for legacy arguments at the chat boundary without sending them",
"go: synthesizes exactly one strict host read, without enumerating resources at discovery",
"go: projects only opaque IDs, optional names and caller roles through a normal data envelope",
"go: returns an array even for empty success and truthfully bounds sorted 100/101 results",
"go: rejects every input property and non-object rather than resolving selection",
"go: fails closed without the optional backend interface and never synthesizes for other add-ons",
"go: rejects a reserved Tables manifest collision in discovery and execution even if not advertised",
"go: rechecks missing, hidden, disabled, stopped and uninitialized Tables at execution",
"go: preserves typed credential, feature, owner, forwarding and registry failures after discovery",
"go: rejects missing principals and malformed projections instead of successful empty data",
"go: keeps synthesized listing behind consumer allowlists and hidden add-ons",
"go: does not let a listing-capable provider invent a named-user principal",
"go: revalidates listing failures through an already-bound consumer without namespace fallback",
"go: preserves the model read byte bound",
"go: offers the host read even when Tables has no executable definitions",
"go: keeps declared uiOnly execution status tools out of generic adapters",
"go: round trips valid components and enforces the callable length boundary",
"go: rejects malformed qualified identities while reserving their namespace",
"go: forwards bindings only through an explicit binding backend"
]
},
"tables-admin": {
"kind": "ginkgo",
"commands": [
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./tests/addons/tablesadmin",
"-ginkgo.json-report=../../../.cache/addons/logs/tables-admin.json"
]
],
"report": ".cache/addons/logs/tables-admin.json",
"cases": [
"keys a reference by user, conversation and add-on, bounds it per user and in total and expires what is unused",
"is durable, held by one process, never resets a corrupt file and stops writing after a failed sync",
"serves concurrent users without losing a reference",
"keeps the newest bounded number, validates them on load and remaps them with the owner",
"creates private databases by the person's own action, once per operation, and lists them only for their owner",
"keeps the owner, editor and viewer matrix on the UI routes and shows each person only their own role",
"shares whole databases by immutable account ID behind a bounded picker that tells nothing else",
"keeps sharing disabled in local-owner mode with a typed answer and no named users",
"waits for a revoked user's admitted work and cancels it before acknowledging the revocation",
"answers every typed denial exactly as the owner does and carries every mutation to the owner",
"reports an unknown outcome with the original operation ID and leaves reads plainly unavailable when the owner cannot be reached",
"answers the sharing denial of local-owner mode the same from a frontend",
"deletes the data, the grants and the pending proposals only on the owner's typed confirmation and keeps the add-on installed",
"stops and waits for admitted work of every user before it asks the add-on to delete",
"makes the add-on refuse its delete tool under every action but the host's delete action",
"never offers the delete tool to a model, a proposal, a typed read or an agent",
"denies a stale tab: the generation and the revision the owner saw decide, and nothing is removed",
"finishes or undoes a deletion that a crash interrupted at every step",
"keeps the delete tool out of the model tools and their definitions",
"refuses an admin tool that is also a model tool, has a definition, or is not mapped",
"documents every route, every emitted field and every typed answer in the Swagger spec",
"lists every route in the instructions registry, the feature registry and the documentation, with no MCP tool for any",
"keeps one selection per user, conversation and add-on, across people, conversations and restarts",
"lets a tool call omit the database in a conversation and resolves it at the owner with typed errors",
"withdraws the management and the tool path while the add-on is disabled and restores them on enable",
"answers a revoked, deleted or tampered reference like an unknown database and never reuses it",
"applies schema and row changes under the roles of the host, once per operation, with a receipt and no proposal",
"refuses crafted writes by a viewer, an editor's schema change, a revoked editor and an installation administrator",
"carries a UI change to the owner from a forwarding frontend and answers as the owner does",
"exports a table with exact bytes and attachment headers over real HTTP and shows no one else the file",
"keeps a shared database's file private, applies the person's own filter and sort, and denies after the grant is withdrawn",
"serves the same bytes and headers through a forwarding frontend, and fails the same way for a stranger",
"answers a result past the export limit as data with no file",
"binds an output handle to its operation, person and database",
"fails a truncated, grown or vanished stream and never serves it",
"fails the transfer when the store cannot write, and when the source is revoked before completion",
"expires the file only, enforces the quota per person and leaves the database as it was",
"projects only active owned/shared resources and the caller's own role, never UI management metadata",
"projects only active owned/shared resources and the caller's own role, never UI management metadata",
"excludes policy reservations and resources whose deletion has begun",
"excludes policy reservations and resources whose deletion has begun",
"rechecks grants after discovery and independently refuses inspect on a revoked database",
"rechecks grants after discovery and independently refuses inspect on a revoked database",
"revalidates real credential and feature changes after discovery, not as successful empty lists",
"revalidates real credential and feature changes after discovery, not as successful empty lists",
"preserves typed missing resource registry and app registry failures",
"preserves typed missing resource registry and app registry failures",
"uses the service's actual 100/101 bound in ID order with truthful truncation and absent names",
"uses the service's actual 100/101 bound in ID order with truthful truncation and absent names",
"rechecks credentials at the carrier owner even if the frontend still admits the old principal",
"reports an unavailable carrier owner after discovery instead of fabricating empty success"
]
},
"tables-ui": {
"kind": "shell",
"commands": [
[
"sh",
"scripts/addons/tables_ui.sh"
]
],
"cases": [
"unit: resources: every call carries this add-on and its generation and nothing the add-on chose",
"unit: resources: an operation identifier chosen by the caller is kept across a retry",
"unit: resources: nothing is sent once the add-on is withdrawn",
"unit: resources: a malformed identifier is refused before any request",
"unit: resources: the request of each call names the route, the method and the own-session confirmation",
"unit: resources: an unknown operation and a body the host did not shape are refused",
"unit: resources: typed answers of the host keep their type for the page",
"unit: resources: the client of a stale answer is told it is stale",
"unit: resources: a typed read names the resource the person chose and the client sends it",
"unit: resources: a typed read always carries an operation identifier the owner accepts",
"unit: resources: the conversation header goes on a chat request that uses add-on tools, and only a well-formed one",
"unit: batch: typed rows become wire rows and an untouched optional column is left to its default",
"unit: batch: every cell error is named by row and column and nothing is sent",
"unit: batch: steps stay inside the add-on bounds",
"unit: batch: the selection toggles by row identifier and survives paging",
"unit: layout: Share is offered only where the installation has named accounts",
"unit: layout: a table with no rows offers Add rows once, in its empty state",
"unit: layout: a reader, or a table with no columns, is offered no Add rows",
"unit: errors: each answer of the host gets its own words and recovery",
"unit: codecs: text keeps what was typed, bounds it, and null is explicit",
"unit: codecs: integers are exact up to 64 bits and never silently rounded",
"unit: codecs: reals are finite numbers",
"unit: codecs: booleans are true, false or empty for an optional column",
"unit: codecs: datetimes are read as UTC and sent as RFC 3339",
"unit: codecs: an unknown column type is refused",
"unit: codecs: the editor round-trips stored values",
"unit: codecs: grid text and the unchanged-field test",
"unit: codecs: a datetime with a fraction of a second is not rewritten by editing another field",
"unit: codecs: datetimes are compared as instants and offsets are normalised",
"unit: filters: operators follow the column type",
"unit: filters: a leaf, a list and the null tests are built from typed values",
"unit: filters: a condition that cannot be sent is an error, never dropped",
"unit: query: the arguments are the tool schema and nothing else",
"unit: query: pages go forward by the add-on cursor and back by the ones kept",
"unit: query: a column header cycles ascending, descending and none",
"unit: i18n: every language of the host has every key of the English bundle and nothing else",
"unit: i18n: a translation keeps the placeholders of the English text and carries no markup",
"unit: build: the bundle is plain JavaScript that names nothing it does not define",
"unit: build: the module exports createAddon and imports nothing",
"unit: render: createAddon returns the page, the declared component, a chat action and dispose",
"unit: render: the list, one database and the picker draw their loading state without a host",
"unit: render: what the page read is emptied when the add-on is withdrawn, by signal and by dispose",
"unit: retry: a read that met an unavailable add-on is tried again and then succeeds",
"unit: retry: it gives the last error back after the bound and never loops",
"unit: retry: a refusal, a stale answer or an unknown outcome is never repeated",
"unit: retry: a withdrawn add-on stops the waiting and the reads",
"go: applies schema and row changes under the roles of the host, once per operation, with a receipt and no proposal",
"go: refuses crafted writes by a viewer, an editor's schema change, a revoked editor and an installation administrator",
"go: carries a UI change to the owner from a forwarding frontend and answers as the owner does",
"tables-ui: a new database is private to its owner and a second person sees nothing of it",
"tables-ui: the owner builds a schema and rows, shares by name and each role gets its own controls",
"tables-ui: typed editors, structured filters, sort, paging and bounded batches work on real rows",
"tables-ui: editing another column leaves a datetime with a fraction of a second byte-identical",
"tables-ui: a revoke while a person is editing denies the next save and the page says it is unavailable",
"tables-ui: an installation administrator sees no database of other people and has no data privilege",
"tables-ui: deleting a database shows the warnings, needs the typed name and removes data and shares",
"tables-ui: a tab of an older generation is denied after an upgrade and after a disable",
"tables-ui: the pages work by keyboard, at 400 pixels and in the light and dark themes",
"tables-ui: logging out clears what was read and the next person on the same tab sees none of it",
"tables-ui: in local-owner mode sharing is disabled and the owner still manages databases"
]
},
"tables-csv": {
"kind": "shell",
"commands": [
[
"sh",
"scripts/addons/tables_csv.sh"
]
],
"cases": [
"unit: artifacts: only a host identifier names a file, and the only link is the host route",
"unit: artifacts: the card offers a download only for a complete file that has not expired",
"unit: artifacts: sizes are written with a binary unit",
"unit: artifacts: a tool result keeps well formed identifiers of its own kind only, at most four",
"unit: export: the view becomes the arguments of the tool and nothing a page or a cursor",
"unit: export: the answer is a file, or the reason there is none",
"go: writes a header and one record per row with RFC 4180 quoting, UTF-8 and the documented value forms",
"go: prefixes text cells and labels that a spreadsheet would run, never numbers",
"go: honours columns, the row identifier column, filter, sort and the row limit of the query",
"go: reads one snapshot: writes that commit while the export streams are not in it, and are not blocked by it",
"go: streams a large table row by row with bounded memory",
"go: fails cleanly past the row or byte bound and keeps the bound finite by default",
"go: stops on cancellation, on its deadline and on a failing destination, and reports each",
"go: does not change the database it reads",
"go: answers with one operation-bound CSV output whose bytes the handle streams exactly once",
"go: refuses a handle from another user, another operation, another database or after expiry, and removes expired files",
"go: keeps a handle for a retry until the stream completed",
"go: reports a result past the limit as data without an output, and leaves no file",
"go: removes the staged file when the export fails and bounds what stays staged",
"go: is a read that needs the read action and refuses unknown fields and mutation arguments",
"go: serves the bytes on the protocol output route to the matching envelope only",
"go: exports a table with exact bytes and attachment headers over real HTTP and shows no one else the file",
"go: keeps a shared database's file private, applies the person's own filter and sort, and denies after the grant is withdrawn",
"go: serves the same bytes and headers through a forwarding frontend, and fails the same way for a stranger",
"go: answers a result past the export limit as data with no file",
"go: binds an output handle to its operation, person and database",
"go: fails a truncated, grown or vanished stream and never serves it",
"go: fails the transfer when the store cannot write, and when the source is revoked before completion",
"go: expires the file only, enforces the quota per person and leaves the database as it was",
"go: serves identical bytes and headers from every replica and denies every other way in",
"tables-artifacts: the person exports the view they see and downloads exact bytes with attachment headers",
"tables-artifacts: another person is denied exactly like an unknown file, shared or not",
"tables-artifacts: a viewer exports what they may read and withdrawing the share ends the download",
"tables-artifacts: a result past the export limit gives a message and no file",
"tables-artifacts: a person at the file quota is told so and no file is made",
"tables-artifacts: in local-owner mode the owner exports and downloads with no account",
"go: refuses columns-add under a write action, on preview and on apply",
"go: refuses databases-rename under a write action, on preview and on apply",
"go: refuses tables-create under a write action, on preview and on apply",
"go: refuses columns-add under the schema action with the wrong scope or no actor",
"go: refuses databases-rename under the schema action with the wrong scope or no actor",
"go: refuses tables-create under the schema action with the wrong scope or no actor",
"go: still previews and applies a schema change under the schema action",
"go: says in the receipt of a write that it can be undone, and reads and applies the undo",
"go: rejects a stale undo with a typed code and the words of what changed",
"go: rejects an unknown change as not_found and a repeated one as already_undone",
"go: refuses the undo under any other action or scope, and with no actor",
"go: does not preview the undo: it is applied against the revision the host just read"
]
},
"recovery": {
"kind": "shell",
"commands": [
[
"sh",
"scripts/addons/recovery.sh"
]
],
"cases": [
"unit: recovery: the owner's typed refusals keep their type and nothing else is invented",
"unit: recovery: the banner never reads an unknown state as ready",
"unit: recovery: upgrade progress follows the journaled phases",
"unit: recovery: the verification state is a word before it is a colour",
"unit: recovery: every refusal has words, and an unknown outcome keeps its own",
"unit: recovery: every locale carries the same recovery keys as English",
"unit: recovery: a restore needs a stopped add-on, the typed ID and, from another mode, an account",
"unit: recovery: a purge needs a scope and an add-on that is not running",
"unit: recovery: the client sends the operation as the confirmation header and types the refusals",
"go: backs up, publishes the package, migrates, checks health and publishes the generation in that order",
"go: undoes a failure at every journal phase before the publication and puts the old generation back on its own data",
"go: finishes an upgrade whose publication was made when a later step failed",
"go: applies one rule after a restart at any phase: unpublished is undone, published is finished",
"go: refuses a changed trusted identity and an older data format before it stops or writes anything",
"go: keeps the add-on unavailable in needs-recovery after a failed migration to a new format and retains the package and the recovery copy",
"go: restores the backup itself when a migration that keeps the format fails halfway",
"go: keeps a running add-on unavailable and recoverable when the backup cannot be verified at rollback",
"go: copies a WAL database consistently with a manifest, digests, restricted permissions and the owner state",
"go: holds admission and invalidates pending proposals for the add-on while it copies",
"go: reports a corrupt backup and refuses to use it",
"go: stops before copying when the storage is too small and leaves no partial backup",
"go: leaves no partial backup after a cancellation and starts the add-on again",
"go: starts the add-on again when the copy fails",
"go: keeps the only verified copy and the upgrade recovery copy under an explicit retention policy",
"go: never lets age or count remove the newest verified backup when retention is applied on demand",
"go: restores a local-owner backup to a named account through an explicit mapping",
"go: needs an administrator, the typed add-on ID, an explicit scope and an add-on that is not running",
"go: removes the data and its records but keeps the backups unless they are in the scope",
"go: touches no other add-on",
"go: finishes a purge that stopped after its journal was written",
"go: clears needs-recovery when the data it described is purged",
"go: refuses a backup when the policy cannot drain admitted work",
"go: refuses a backup of another add-on and touches neither data nor access",
"go: never lets a manual backup of half migrated data displace the pinned recovery copy",
"go: puts the data and the owner state back, warns about lost writes and keeps the replaced data as a recovery copy",
"go: counts the operations applied after the backup as lost writes",
"go: does not give back access that was taken away or whose account is gone",
"go: survives a restart that forgets the in-memory state: the revocation log is durable",
"go: refuses a running add-on, a stranger, an unknown backup and an invalid mapping without changing anything",
"go: refuses a backup of another trusted identity or of a newer data format",
"go: resumes or rolls back a restore that stopped at each phase, by one rule",
"go: holds the resources of one add-on and leaves another add-on alone",
"go: cancels admitted work and reports a drain that did not finish",
"go: restores grants through the account directory and the lowerings since the backup, never beyond them",
"go: keeps a bounded durable log of lowered access",
"go: keeps a revocation however many later lowerings of another person follow",
"go: restores the data but no access when the history may have lost a lowering",
"go: reads a store that is full of lowerings as one whose history may be cut",
"go: applies a lowering made after the export whatever time the backup is given",
"go: refuses a change that was authorized just before the hold began",
"go: cancels a pending proposal and leaves an executing one outcome-unknown after a restore",
"go: forgets the records of one add-on and no other",
"go: maps an owner on a restore to a local-owner store only when nothing named is in it",
"go: migrates the ownership of a stopped store with a backup and an explicit mapping and refuses a populated downgrade",
"go: records the current format of a new store and migrates nothing",
"go: migrates every database in its own transaction, records the version last and repeats as a no-op",
"go: leaves a database whose step fails exactly as it was and resumes on the next run",
"go: refuses data in a newer format, a downgrade and a version it has no path to, and writes nothing",
"go: makes a backup only for an administrator's own browser session and lists it",
"go: restores with warnings and does not give back a share that was revoked after the backup",
"go: restores only a backup of the add-on in the route and touches nothing otherwise",
"go: gives a forwarding frontend the same typed answers as the owner",
"go: purges only with the typed ID, a stopped add-on and an explicit scope, and touches nothing else",
"go: is never reachable by a model: no tool, no declared name and no route for an API key",
"go: upgrades an add-on with data through a backup and a migration and keeps its databases",
"go: undoes an upgrade whose package does not start and runs the old generation on its own data",
"go: hands retained data only to the same trusted source on a reinstall",
"go: documents every route and every emitted field in the Swagger spec, the instructions and the feature registry",
"recovery: an administrator backs up from the manage sheet and the backup is listed as verified",
"recovery: a person and a key cannot back up, restore or purge, and only the owner session of an administrator can",
"recovery: the restore dialog warns, asks for the typed ID and a restore does not give back a revoked share",
"recovery: a second backup, the sole recovery copy is kept and the keyboard reaches every action",
"recovery: the page shows a needs-recovery banner with restore and purge as the actions (status mocked)",
"recovery: a purge needs a scope, the typed ID and a stopped add-on, and removes the data and its shares"
]
},
"packaging": {
"kind": "shell",
"commands": [
[
"sh",
"scripts/addons/package_test.sh"
]
],
"cases": [
"go: installs unchanged PDF helpers and their license with a build-time fixture check",
"go: joins every enabled platform leg into one verified index",
"go: never creates a partial index when an enabled platform has no leg",
"go: refuses duplicate legs, local-check legs, other versions and extra platforms",
"go: refuses a merged layout that lost a platform after the merge",
"go: builds a deterministic platform layout with executable, ui and manifest layers",
"go: restores the validated executable mode on extraction",
"go: refuses a platform that the matrix has not enabled unless it is a local check",
"go: refuses an invalid version, an existing layout and an empty executable",
"go: rejects a package without its entrypoint",
"go: rejects a declared UI whose layer or files are missing",
"go: rejects a package without a required runtime library",
"go: rejects a manifest whose platform differs from the image",
"go: rejects an image config or annotation of another platform",
"go: rejects a manifest version that differs from the release version",
"go: rejects another artifact type",
"go: rejects unexpected layers, roles and layer media types",
"go: rejects an unexpected file in the executable layer",
"go: rejects a blob whose bytes differ from its digest",
"go: rejects a receipt that does not match the image",
"go: rejects invalid extraction permissions",
"go: rejects a UI file that is executable or outside the declared directory",
"go: rejects traversal paths, links and duplicates",
"go: rejects a UI that bundles its own React runtime",
"go: rejects an icon that is not an image of its type",
"go: rejects an invalid platform layout marker or index",
"go: moves development forward and leaves it alone for an older commit",
"go: accepts a diverged branch head and refuses one commit with two contents",
"go: moves latest only to a newer stable version",
"go: refuses reserved or foreign alias names and unpublished digests, leaving aliases unchanged",
"go: promotes a branch channel under its hashed name",
"go: treats a force-pushed branch as the new truth for a push to the same ref",
"go: blocks the alias for anything but a push to the channel's own ref",
"go: refuses development when its commit is unreachable, even for a push",
"go: fails on any git error that is not a plain not-ancestor answer",
"go: tells an unreachable commit from a plain not-ancestor",
"go: accepts the add-on namespace and refuses every other go-skynet repository",
"go: reads a YAML list and refuses JSON, unknown fields and a second document",
"go: refuses missing and backend repositories before any request",
"go: pushes platform digests then the index, and a retry is digest-identical",
"go: rejects overwriting an immutable version with different content",
"go: adopts published content only for the same version and commit",
"go: refuses reserved aliases and mismatched tags as immutable tags",
"go: publishes nothing from a partial or local-check layout",
"go: fails closed when no platform is enabled, the file is absent or empty",
"go: rejects enabled platforms without a native runner or check, duplicates and unknown fields",
"go: prints the enabled platforms with their native runners",
"go: renders digest-pinned entries with an explicit add-on signer identity",
"go: renders an entry for every first-party add-on from its own template",
"go: refuses missing inputs, backend repositories, bad channels and unknown placeholders",
"go: carries placeholders only: no fabricated URL, registry or namespace",
"go: never publishes from a pull request, whatever the ref",
"go: maps master alone to development and publishes the commit tag",
"go: never publishes from a branch push, whatever the branch is named",
"go: keeps reserved names out of the branch namespace",
"go: separates refs that normalize to the same label",
"go: bounds empty, Unicode and very long branch names",
"go: lets a tag push prepare the immutable version and never move latest",
"go: promotes latest only for a published, stable, non-draft release",
"go: rejects unknown events and a malformed commit",
"go: prints the decision as key=value lines",
"go: accepts the checked-in workflow",
"go: rejects pull_request_target",
"go: rejects secrets in a pull request validation job",
"go: rejects id-token write outside the publishing job",
"go: rejects a registry login or publish in an untrusted job",
"go: rejects publish that does not wait for every platform leg",
"go: rejects publish that can run after a failed leg",
"go: rejects publish that does not need validate",
"go: rejects a package leg that does not need validate",
"go: rejects a validate job that cannot stop the release",
"go: rejects a package or promote job that runs after a failed validate",
"go: keeps validate unprivileged on every event",
"go: rejects promotion that does not wait for signing",
"go: rejects alias promotion before signing",
"go: rejects an alias command inside the publishing job",
"go: rejects a literal latest tag",
"go: rejects backend registries and backend workflows",
"go: rejects a signer identity that is a pattern or the backend workflow",
"go: rejects signing by tag or without referrers and the new bundle format",
"go: rejects missing serialization per channel",
"go: rejects publication that is shared between add-ons",
"go: rejects a workflow that names one add-on by path or skips an add-on in the matrix",
"go: rejects a plan that does not refuse an add-on without an enabled platform",
"go: rejects a plan that does not fail closed on missing configuration",
"go: rejects a plan that does not exit 1 for an add-on without an enabled platform on a publishing event",
"go: rejects a plan that treats any matrix error as no legs",
"go: rejects a publish or promote matrix that stops the other add-ons on a failure",
"go: rejects a publish job that downloads the layouts of other add-ons",
"go: rejects a promote job that does not check the digest format",
"go: fails on a publishing event when an add-on has no enabled platform",
"go: publishes when every add-on has an enabled platform",
"go: gives an add-on without an enabled platform no legs on an event that publishes nothing",
"go: fails on a missing or malformed platform file on every event",
"go: rejects a checkout of the pull request head or a persisted token",
"go: rejects write permission at workflow level and a literal platform matrix",
"go: rejects a publishing job without an environment or a gate",
"go: does not trust the backend workflow identity in the documented verification",
"go: installs the package built by package.sh and starts its executable",
"go: is refused when the signature carries another workflow identity",
"go: is refused when the owner policy names the backend workflow",
"go: is refused when the pinned digest is not the published image",
"go: gives identical digests for two builds of the same inputs",
"go: refuses a platform the matrix does not enable and a missing executable of another platform",
"package.sh builds and verifies a local check layout",
"package.sh refuses a platform the matrix has not enabled",
"package.sh refuses an existing non-empty layout",
"package.sh requires its arguments",
"package.sh refuses an invalid version",
"package.sh builds and verifies the voice add-on for the host",
"package.sh refuses a foreign platform without an executable: tables",
"package.sh refuses a foreign platform without an executable: voice",
"package.sh refuses a foreign platform without an executable: face",
"package.sh refuses a foreign platform without an executable: fine-tuning",
"package.sh refuses a foreign platform without an executable: quantization",
"package.sh refuses a foreign platform without an executable: studio",
"package.sh refuses a foreign platform without an executable: talk",
"package.sh refuses a foreign platform without an executable: telegram",
"package.sh refuses a foreign platform without an executable: slack",
"package.sh refuses a foreign platform without an executable for every add-on",
"package.sh builds Tables with cgo and the pure Go add-ons without",
"matrix fails closed while no platform is enabled",
"matrix fails closed without a file",
"channel.sh: a pull request never publishes",
"channel.sh: master publishes development",
"channel.sh: a branch push never publishes, even a branch named latest",
"channel.sh: a tag push prepares the version and moves no alias",
"channel.sh: a published stable release promotes latest",
"channel.sh: a pre-release never promotes latest",
"channel.sh: a draft release fails",
"channel.sh: an unknown event fails",
"channel.sh: a tag that is not a version fails",
"workflow policy accepts the checked-in workflow",
"workflow policy rejects pull_request_target",
"workflow policy rejects a publish job that does not wait for every leg",
"workflow policy rejects a validate job that cannot stop the release",
"scripts never push, tag, sign or log in",
"packaging files never reference backend registries or workflows",
"go: adds the tool fields to an existing index from the repository manifests, and changes nothing else",
"go: caps the tool names at MaxEntryTools and keeps the full count",
"go: declares and packages a loadable, receipt-verified skill without shadows",
"go: enables a platform exactly when its native check is recorded",
"go: enables a platform exactly when its native check is recorded",
"go: enables a platform exactly when its native check is recorded",
"go: enables a platform exactly when its native check is recorded",
"go: enables a platform exactly when its native check is recorded",
"go: enables a platform exactly when its native check is recorded",
"go: enables a platform exactly when its native check is recorded",
"go: enables a platform exactly when its native check is recorded",
"go: enables a platform exactly when its native check is recorded",
"go: enables a platform exactly when its native check is recorded",
"go: gives promote an add-on matrix",
"go: gives publish an add-on matrix",
"go: hands the guest image digest of the sandbox-image job to the package leg",
"go: has a catalog template",
"go: has a catalog template",
"go: has a catalog template",
"go: has a catalog template",
"go: has a catalog template",
"go: has a catalog template",
"go: has a catalog template",
"go: has a catalog template",
"go: has a catalog template",
"go: has a catalog template",
"go: has consistent package files for face",
"go: has consistent package files for fine-tuning",
"go: has consistent package files for office",
"go: has consistent package files for quantization",
"go: has consistent package files for sandbox",
"go: has consistent package files for slack",
"go: has consistent package files for studio",
"go: has consistent package files for tables",
"go: has consistent package files for talk",
"go: has consistent package files for telegram",
"go: has consistent package files for voice",
"go: has consistent package files for web",
"go: has no hard-coded add-on path",
"go: lays the skills of the add-on in their own layer and verifies them with the install rules",
"go: lets only the release-index job write the contents of the repository",
"go: lists every release platform with its runner",
"go: lists every release platform with its runner",
"go: lists every release platform with its runner",
"go: lists every release platform with its runner",
"go: lists every release platform with its runner",
"go: lists every release platform with its runner",
"go: lists every release platform with its runner",
"go: lists every release platform with its runner",
"go: lists every release platform with its runner",
"go: lists every release platform with its runner",
"go: lists the add-ons in the validate matrix",
"go: lists the built-in skills an add-on replaces",
"go: lists the built-in tools an add-on replaces after its tools",
"go: loops the plan over the same list",
"go: publishes every add-on to the one documented repository, with its id as the tag prefix",
"go: refuses --from-manifest for a pinned channel or together with a merged layout",
"go: refuses to build when the skills folder and the manifest disagree, or a skill breaks a rule",
"go: rejects a missing skill, mismatched frontmatter, and scripts",
"go: rejects a repository rule that derives a repository for each add-on",
"go: renders the development channel as mutable entries: the moving tag, no digest",
"go: renders the development entries of every enabled platform from the manifest, without a package",
"go: reports the chat tools of the manifest on each entry and not the admin tools",
"go: ships a checked-in Tables matrix with at least one enabled platform",
"go: takes the package legs from the plan",
"package.sh passes SANDBOX_GUEST_IMAGE to the linker",
"package.sh refuses a foreign platform without an executable: office",
"package.sh refuses a foreign platform without an executable: sandbox",
"package.sh refuses a foreign platform without an executable: web",
"package.sh refuses a guest image that is not by digest",
"package.sh refuses a sandbox release build without SANDBOX_GUEST_IMAGE",
"package.sh stamps the sandbox executable with a guest image in a local check",
"go: packages all four document slots with the actual validator and no core fallback",
"go: proves every source block and local reference without Git or network"
]
},
"updates": {
"kind": "shell",
"commands": [
[
"sh",
"scripts/addons/updates.sh"
]
],
"cases": [
"unit: updates: a failed, unknown or unreadable check is never current",
"unit: updates: an upgrade is offered only for a candidate the owner confirmed, with a digest to pin",
"unit: updates: the owner's typed refusals keep their type and are final answers",
"unit: updates: the apps list marks an update beside the process state, never in place of it",
"unit: updates: times are shown as the reader's own and a bad time as nothing",
"unit: updates: the client sends check and upgrade as the administrator's own action and types the refusals",
"unit: updates: every locale carries the same update keys as English, and words for every state, reason and refusal",
"go: offers a digest-only change of the branch-fix-cache channel with an identical version label",
"go: offers a digest-only change of the development channel with an identical version label",
"go: offers a digest-only change of the latest channel with an identical version label",
"go: is up to date when the channel resolves to the installed digest",
"go: never switches the channel: another channel and other versions are not offered",
"go: selects the highest compatible greater version of the same major",
"go: does not cross a major version",
"go: does not move a stable install to a pre-release and orders pre-releases below their release",
"go: treats a lower version as nothing to offer",
"go: reports the same digest as up to date",
"go: reports a rewritten immutable version as an integrity error, never an update",
"go: never reports an update it cannot pin to a digest",
"go: offers the build the tag names now when it moved, pinned to its digest",
"go: is up to date when the tag still names the installed build",
"go: resolves the tag only on an explicit check, and the status read reuses that answer",
"go: reports a tag that cannot be resolved as check-failed, never as an update",
"go: resolves the tag again at execution, so the upgrade pins what the tag names then",
"go: names the host, SDK and data format ranges a candidate does not fit",
"go: refuses a candidate whose data format ends below the installed one",
"go: reports a platform that is not offered, and prefers the compatible version over a newer incompatible one",
"go: does not check the SDK range of a candidate that declares no UI",
"go: reports a failed library as check-failed with the last success, never as up to date",
"go: names an unavailable source credential and an unreachable library by class",
"go: reports an add-on the library no longer lists as check-failed",
"go: returns an error for an add-on that is not installed and for a canceled caller",
"go: answers a status read from the cache and never evaluates or fetches",
"go: serves a fresh answer from the cache and evaluates again when it is stale",
"go: marks a cached answer older than the time to live as stale",
"go: refreshes the library only on an explicit refresh and applies nothing",
"go: limits explicit refreshes to one per interval and says so",
"go: shares one check among concurrent callers",
"go: never lets an explicit refresh join a plain evaluation that is already in flight",
"go: keeps the work of a canceled caller from spoiling the answer of the others",
"go: bounds the cache and forgets the answer of a replaced package",
"go: redacts the library, channel and digests for a caller who is not an administrator",
"go: keeps the compatibility hint of an entry and refuses a malformed range",
"go: lists the releases of one add-on for every platform, from the cache, and refuses a failed library",
"go: names an unavailable credential reference as a credential failure inside the refresh failure",
"go: reports a digest-only change of a moving channel, applies nothing and offers the pinned upgrade",
"go: refuses a second operation ID for the same transition, in flight or done, and applies it once",
"go: runs concurrent requests with one operation ID once and gives each the same answer",
"go: serializes conflicting upgrades by the installed digest and refuses the loser without a record",
"go: refuses a candidate that is not the one the library resolves now",
"go: refuses an upgrade to the digest that is already installed",
"go: rechecks compatibility at execution and refuses an incompatible candidate",
"go: selects a newer immutable version and treats a rewritten version as an integrity error",
"go: keeps the last good generation when the candidate cannot be staged",
"go: never switches the library or channel, and a failed check is never up to date",
"go: lets an administrator refresh and everyone with the feature read a redacted status",
"go: shows the pending update in the apps list from the cache only",
"go: does not accept pins without an update checker or on another action",
"go: keeps the unpinned typed upgrade of an earlier release working",
"go: is offered when the tag moved, pinned to the build the tag names, and upgrades to exactly that build",
"go: refuses the upgrade when the tag moved again after the check, and installs nothing",
"go: gives every caller with the feature the same status from every frontend, redacted for non-administrators",
"go: checks only for an administrator's own browser session, and applies nothing",
"go: upgrades only to the checked candidate, with the same typed refusals from every frontend, and never twice",
"go: runs two concurrent upgrades from two frontends once: the same ID shares the answer, another ID is a conflict",
"go: refuses an incompatible candidate and a library that cannot be read, with a typed answer",
"go: reports a lost upgrade as an unknown outcome with its original operation, and a lost status read or check as plainly unavailable",
"go: keeps the update actions out of the tools and names every field of the status in the Swagger spec",
"updates: a library with nothing newer is up to date, and a member sees no update mark",
"updates: a moved channel with the same version label is an update, in the list and as a pending mark",
"updates: a member, a key and an outsider cannot check or upgrade",
"updates: the dialog names the library, versions and digests, a cancel sends nothing, and the upgrade backs up and keeps the data",
"updates: two requests for the same transition under different operations run it once",
"updates: a page that is behind cannot upgrade over a newer installed package",
"updates: a candidate this host cannot run shows its reason and has no upgrade",
"updates: an unreachable library is a failed check, never up to date, and says when it was last read",
"updates: on a narrow screen the check is reachable and runs from the keyboard",
"go: ends the checks in flight when it is closed and refuses new ones",
"go: always names the candidate digest of an update, so the upgrade has something to pin",
"go: keeps a stale cached notice readable while a plain check says the update is gone"
]
},
"tables-acceptance": {
"kind": "shell",
"commands": [
[
"sh",
"scripts/addons/tables_acceptance.sh"
]
],
"cases": [
"go: reports an update only on a check, shows a member no digest, refuses a key and applies one pinned candidate with the data and grants kept",
"go: refuses a change prepared on an old schema or data revision from two tabs of two people and applies nothing",
"go: replays an operation ID as one receipt from every node, conflicts on a different request and never applies twice or under a new ID",
"go: settles a revocation that races a confirmation: one outcome, applied at most once, and no work after the revocation",
"go: separates owner, editor, viewer, administrator and stranger across the browser routes, the REST routes and the chat tool consumer",
"go: derives the action of a proposal from the tool kind, so an editor cannot confirm a schema change as a write",
"go: serves the browser module to every account with the feature and to nobody else, from the owner and each frontend",
"go: fails every blocked consumer explicitly and never serves add-on tools to it",
"go: is the administrator's own action on every node and never a key's, a member's or a tool's",
"go: refuses a corrupt backup and a restore that is not allowed, and leaves the data as it was",
"go: restores a verified backup: the data goes back, the add-on starts again and access follows the current accounts",
"go: denies the open tabs of a disabled add-on everywhere and serves them again, with the same data, when it is enabled",
"go: keeps data and grants when the add-on is removed and installed again, and refuses what the old generation prepared",
"go: denies the next call of a paused key on every node and accepts it again when resumed",
"go: denies the browser, the key and the chat everywhere when the add-ons feature is withdrawn",
"go: lowers an editor to a viewer for the next call everywhere and drops the proposals the editor still held",
"go: refuses the session and the key of a disabled account on every node",
"go: ignores actor, forwarding and authority headers and fields on every node",
"go: denies authority, role and approval fields in the arguments of every consumer and creates nothing",
"go: applies a proposal only on the confirmation of the proposer's own tab, with its digest, exactly once",
"go: keeps every acknowledged change and applies no change twice when the Tables process is killed in the middle of a batch",
"go: keeps every acknowledged change and applies no change twice when the owner is killed in the middle of a batch and restarted",
"go: blocks every other write while a confirmation is unresolved, keeps reading, and accepts writes again only after the owner role resolves it",
"go: fails every response type closed with the same typed answer from both frontends, runs nothing there and serves everything again after the restart",
"go: exports a CSV through a frontend and serves the same bytes from every node to its requester only",
"go: stops the downloads of a person whose access to the database was revoked, on every node, and keeps the owner's",
"go: denies downloads while the add-on is disabled and serves a complete file again when it is enabled",
"go: answers the refusal as invalid_request with status 400 on every route and node and changes nothing",
"go: does not consume the operation ID of a refused change",
"go: denies an expired file identically from every node and leaves the data and the backups untouched",
"go: withdraws a transfer held in flight when the add-on is disabled and leaves no downloadable file",
"go: reports a change that committed and lost its answer as unknown, finds it by receipt and replays the same receipt once",
"tables-acceptance: a member opens the databases and a grid through each non-owner frontend and the module comes from the owner by digest",
"tables-acceptance: deep links keep the proxy path prefix on a non-owner frontend and survive a reload",
"tables-acceptance: the grid works by keyboard, at 400 pixels and in both themes on a non-owner frontend",
"tables-acceptance: the page says it is unavailable while the owner is gone and recovers on reload when it is back",
"manifest: the evidence manifest names the platform, the commands, the package digests and every case"
]
},
"library-sources": {
"kind": "shell",
"commands": [
[
"sh",
"scripts/addons/library_ui.sh"
]
],
"cases": [
"each page lists only its own kind, with a Default badge and no kind filter",
"adds a model source of your own, which has no Default badge and stays after a reload",
"turns a default off and removes it: it stays listed as removed, and restoring brings it back",
"shows the conflict message the store gives next to the source that clashes",
"turning it off hides the default galleries and shows the defaults as off, and on brings them back"
]
},
"host-admission": {
"kind": "ginkgo",
"commands": [
[
"go",
"test",
"-count=1",
"-p",
"2",
"-tags",
"auth",
"./core/services/addons/hostops",
"-ginkgo.json-report=../../../../.cache/addons/logs/host-admission.json"
]
],
"cases": [
"materializes / as the folder and adds the chat folder",
"refuses a mount outside the folder",
"refuses export and import outside the folder",
"works inside the folder with the agent's mode",
"imports into the folder of a writable agent, for the chat",
"lists no change outside the folder",
"reports a commit outside the view as a conflict",
"binds a read call that has no resource ID",
"stays user-wide for a call with no binding",
"keeps an unscoped chat on the whole home",
"fails closed when the chat of the call cannot be resolved",
"resolves an action without a binding by its chat",
"refuses what is malformed",
"refuses an unregistered operation under an allowed prefix",
"refuses everything for a broker without a feature check",
"needs no feature check for the local owner",
"does not let another add-on use the operation of a live request",
"drops the envelope when the request ends",
"stores the content and returns a ref, not a path",
"is idempotent and fine-tuning only",
"refuses an empty or oversized content",
"refuses a name with a directory",
"refuses an extension that is not a text dataset",
"refuses content that is not UTF-8",
"resolves only a reference the host issued to that user",
"bounds the issued references to 256",
"refuses a wrong credential",
"refuses a call without a live envelope",
"refuses an expired authority",
"does not let a read scope run an apply operation",
"checks the feature of the actor",
"runs the operation as the actor of the envelope",
"refuses an operation outside the allowed prefix",
"refuses an oversized body",
"runs an idempotent operation once per operation ID",
"materializes the folders of the user of the live request",
"refuses every operation when the host maps the actor to no user",
"never reaches the files of another user",
"refuses a directory outside the data directory of the add-on",
"builds the tree in the folder it opened when a folder above it is swapped for a link",
"commits the upper layer as the user of the request",
"commits for the chat of the request and names the paths it did not save in the add-on's terms",
"does not commit an upper layer that is a link or not a regular file",
"lets a read envelope materialize but not commit",
"takes the user from the request, never from the arguments",
"tells an administrator apart from anybody else",
"lists the changes after a revision",
"exports a file of the user and never one of another user",
"imports a file as the user of the request and refuses a link",
"names the change of an imported file after the write, not as an upload by the person",
"keeps both files when the file changed after the add-on read it",
"commits once for a repeated operation",
"gives an add-on outside the allowlist no workspace operation",
"export registers a model and returns only its name",
"export uses the highest step checkpoint",
"export of a job with no checkpoint is a conflict naming it",
"export refuses a bad name",
"export refuses an export format that is not listed",
"export of another user's job is not found",
"export runs once per operation ID",
"export refuses a returned path that is not a model name",
"import registers the quantized model and returns only its name",
"import of a job that is not completed is a conflict",
"model operations are apply, idempotent and admin only",
"export is refused for a feature-holding non-admin",
"export is allowed for an admin",
"import is refused for a feature-holding non-admin",
"import is allowed for an admin",
"lets the admin check decide in every mode",
"matches the supported vocabulary exactly to every real builtin registration",
"detects missing extra duplicate and case-changed operations with the parity oracle",
"uses registered exact names and literal nonempty grant prefixes without self grants",
"permits missing optional requests and bounds diagnostics to declaration names",
"keeps the binding with the envelope and gives it to the operation",
"refuses an operation ID that two requests with different bindings share",
"carries a binding in a context and ignores an incomplete one",
"runs with the incarnation credential alone, with no live request and no actor",
"refuses an absent or foreign credential",
"takes the add-on ID from the broker, not from the request",
"refuses an argument that names a user, an actor or an owner",
"refuses an op outside the prefix the host setting gives",
"does not turn a normal operation into an inbound one",
"refuses to register an inbound operation that names a feature",
"maps a refusal of the handler to 403",
"takes the chat from the envelope's resource and the user from its actor",
"refuses arguments that name a chat, a user or the policy, and unknown ones",
"refuses a call with no live operation, a lower scope, no chat or no chats feature",
"takes at most 500 audit lines and only done or block verdicts",
"start passes the same user key as the route",
"start refuses a local path as model or dataset",
"start refuses a backend that is not a fine-tuning backend",
"start names the missing fine-tuning engine, the default one included",
"start refuses a field that is not in the tool schema",
"get of another user's job is not found",
"list returns only the caller's jobs",
"a job result never carries a filesystem path",
"a second user's list does not show the first user's jobs",
"start refuses a local path as model",
"start refuses a backend that is not a quantization backend",
"start names the missing quantization engine, the default one included",
"list returns only the caller's jobs without a path",
"registers no operation for nil services",
"finetune.checkpoints needs its feature",
"finetune.get needs its feature",
"finetune.list needs its feature",
"finetune.start needs its feature",
"quantize.get needs its feature",
"quantize.list needs its feature",
"quantize.start needs its feature",
"must be a gallery or Hugging Face ID",
"refusal is a 400 naming the field",
"accepts Hugging Face and gallery IDs",
"accepts a dataset ref as dataset source",
"returns the next event within the wait",
"returns the snapshot when the wait ends with no event",
"caps the wait",
"reports done for a final status",
"does not find the progress of another user's job",
"stops once per operation",
"keeps the checkpoint only when asked",
"does not find the stop of another user's job",
"ends the wait when the context is cancelled",
"denies every correlated class before handlers and retains late denial",
"cannot overwrite an observation with a forged identity or duplicate operation",
"rejects mismatched authenticated incarnation and forged IDs without touching handlers",
"removes retired state on endpoint close",
"fails closed at the retained correlation bound without restricting ordinary operations",
"keeps authenticated pending inbound callbacks denied while another endpoint works",
"refuses an authorized decoded callback paused across endpoint Stop",
"stops without waiting for a handler that ignores cancellation"
],
"report": ".cache/addons/logs/host-admission.json"
}
}