1.1.1 — Narrowed store key helper input types
repositoryStoreKey, branchStoreKey, and blobStoreKey now accept narrower
input shapes rather than the full GitHub entity types. Callers passing complete
entity objects continue to work unchanged, but explicit type annotations
referencing the old parameter types must be updated.
repositoryStoreKey
// Before
repositoryStoreKey(repository: GitHubRepository)
// After
repositoryStoreKey(repository: { owner: string; name: string })
branchStoreKey
// Before
branchStoreKey(branch: GitHubBranch)
// After
branchStoreKey(branch: Pick<GitHubBranch, 'owner' | 'repo' | 'name'>)
blobStoreKey
// Before
blobStoreKey(blob: GitHubBlob)
// After
blobStoreKey(blob: Pick<GitHubBlob, 'owner' | 'repo' | 'path' | 'sha'>)
1.2.1 — Request-scoped actor resolution
GET /user, GET /user/memberships/orgs, and Query.viewer no longer fall
back to the first seeded user when no actor header is present. They now return
HTTP 401 with Authentication required for unauthenticated requests.
| Scenario | Before 1.2.1 | After 1.2.1 |
|---|---|---|
| No actor header sent | First seeded user returned | 401 {"message":"Authentication required"} |
x-simulacat-user: <login> sent |
Named user returned (unchanged) | Named user returned (unchanged) |
x-simulacat-actor: user:<login> sent |
Not supported | Named user returned |
Set x-simulacat-actor: user:<login> (or a legacy alias) on every request that
must exercise /user, /user/memberships/orgs, or viewer.
For REST authenticated-user routes, both GET /user and
GET /user/memberships/orgs require x-simulacat-actor: user:<login> or a
legacy user alias. Without an actor that resolves to a seeded user, these
routes return HTTP 401 with {"message":"Authentication required"}.