Skip to content

Commit 32900fd

Browse files
committed
Merge origin/main into claude/issue-24287-hono-stream-string-verbatim
Claude-Session: https://claude.ai/code/session_01SYEJqDL3NXxrJRBVqaMu9T Co-authored-by: Claude <noreply@anthropic.com>
2 parents 856019a + 30da04f commit 32900fd

13 files changed

Lines changed: 630 additions & 143 deletions
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
'@objectstack/service-settings': patch
3+
---
4+
5+
The settings routes' identity door resolves through `@objectstack/core`'s `resolveRequestExecutionContext`, the one request-to-`ExecutionContext` composition
6+
7+
Clause-②: no
8+
9+
- `SettingsServicePlugin` resolves the caller of every `/api/settings` route by calling `resolveRequestExecutionContext` with this door's differences as named parameters: `anonymous: 'fail-closed'`, `authGate: 'resolved'`, `credentials: 'api-key-and-session'`, `sessionApi: 'optional'`, `session: 'request'`, its own way to reach the `tenancy` service, `localization: 'withhold'`, no request locale, `accessToken: 'withhold'`, and no OAuth provenance or admission channel. The engine and auth-service lookups, the header normalisation, the tenancy wiring, the projection to `SettingsContext` and the fail-closed `catch` stay at the door.
10+
- The answers are the ones the door gave before: an anonymous caller, an unrecognised cookie, a failed session read and a refused API key get `401 UNAUTHENTICATED`; a session or an API key owner the authentication policy holds gets `403` with its code and message; an unreadable permission store or tenancy service gets `503 SERVICE_UNAVAILABLE`; and an API key its own lifecycle refuses gets its `403` and code. A one-off probe of 29 fault wirings through the listing route read the same answer on both sides of the change.
11+
- Nothing to do for a consumer: no export, route, configuration key or response shape changed.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
'@objectstack/spec': patch
3+
---
4+
5+
The liveness ledger's `form.sharing` and `formViews` rows quote the code that reads their keys as it now reads
6+
7+
Clause-②: no (only the two rows' evidence text changes and both statuses stay `live`: `ViewSchema` accepts `form.sharing` and `formViews` exactly as before, and no state count moves)
8+
9+
- `liveness/view.json`, row `form.sharing`: the evidence quoted a `slugMatchesPublicLink(sharing.publicLink, slug)` call that no longer exists. It now cites `packages/rest/src/form-routes.ts#findPublicFormView`, which loops over `anonymousFormIntakeCandidates(view)`, and the two rules in `packages/spec/src/ui/anonymous-form-intake.ts` it reads: `anonymousFormIntakeCandidates`, which hands each form's `sharing` to the slug rule, and `anonymousFormIntakeSlug`, which reads all three keys (`enabled`, `allowAnonymous` and `publicLink`). The `resolveFormBySlug` clause now says where `publicFormGrant` is set: in the submit door, for the match that `resolveFormBySlug` returns.
10+
- `liveness/view.json`, row `formViews`: the evidence quoted `const formViews = view.formViews`, which no longer exists. It now quotes the line of `anonymousFormIntakeCandidates` that makes every `formViews` entry a candidate.
11+
- The verdicts, the notes and every other row are unchanged.

‎examples/app-showcase/e2e/detail-shapes.spec.ts‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,16 @@ test('grouped: fieldGroup sections render and Money starts collapsed', async ({
111111

112112
// objectui#2577: fieldGroups[].icon renders as a real (Lucide svg) icon in
113113
// the section header — not as literal icon-name text.
114+
// A collapsible section's header is a disclosure button named by its title
115+
// (objectui#12625); the icon sits beside the title span inside it, and the
116+
// chevron in a SIBLING element. So the svg is looked up under whatever
117+
// element directly holds the title span: a bare `button svg` would also
118+
// match the chevron and stay green with no icon at all.
114119
await expect(
115-
page.locator('div:has(> span:text-is("Money")) svg').first(),
120+
page
121+
.getByRole('button', { name: 'Money' })
122+
.locator('*:has(> span:text-is("Money")) svg')
123+
.first(),
116124
'Money header icon svg',
117125
).toBeVisible();
118126
await expect(page.getByText('banknote', { exact: true })).toHaveCount(0);

‎packages/core/src/security/authz-store-unavailable.test.ts‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,12 +182,13 @@ const TRANSPORT_LEDGER: Record<string, 'guarded' | 'propagates'> = {
182182
// The one request-to-ExecutionContext composition (ruling record 6227928430,
183183
// letter A). It catches nothing around the resolver: every door that calls
184184
// it — the runtime dispatcher's `resolve-execution-context.ts` first, REST's
185-
// `rest-server.ts` second, whose fail-closed `catch` re-raises the outage —
186-
// receives the outage and answers it at its own net.
185+
// `rest-server.ts` second and the settings door's
186+
// `settings-service-plugin.ts` third, each of the last two through a
187+
// fail-closed `catch` that re-raises the outage — receives the outage and
188+
// answers it at its own net.
187189
'packages/core/src/security/request-execution-context.ts': 'propagates',
188190
'packages/mcp/src/plugin.ts': 'propagates',
189191
'packages/services/service-datasource/src/admin-routes.ts': 'guarded',
190-
'packages/services/service-settings/src/settings-service-plugin.ts': 'guarded',
191192
'packages/services/service-storage/src/storage-service-plugin.ts': 'guarded',
192193
'packages/plugins/plugin-sharing/src/sharing-plugin.ts': 'guarded',
193194
'packages/plugins/plugin-hono-server/src/current-user-endpoints.ts': 'guarded',

‎packages/runtime/package.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
"@objectstack/service-job": "workspace:*",
7070
"@objectstack/service-messaging": "workspace:*",
7171
"@objectstack/service-package": "workspace:*",
72+
"@objectstack/service-settings": "workspace:*",
7273
"typescript": "^6.0.3",
7374
"vitest": "^4.1.11"
7475
},

0 commit comments

Comments
 (0)