Skip to content

docs(auth): compile every README snippet against the shipped surface - #8189

Merged
baozhoutao merged 1 commit into
mainfrom
claude/issue-5174-doc-snippets-batch28-auth
Sep 7, 2026
Merged

docs(auth): compile every README snippet against the shipped surface#8189
baozhoutao merged 1 commit into
mainfrom
claude/issue-5174-doc-snippets-batch28-auth

Conversation

@baozhoutao

Copy link
Copy Markdown
Contributor

Part of #5174 (batch 28: packages/auth/README.md)

Burns down the packages/auth/README.md row of UNGATED_DOCS in scripts/check-doc-snippet-types.mjs. The page's ten tsx fences now compile in the gate's covered tier instead of being ledgered.

Census — two readings

Both taken with the gate's own exported analyzer (analyze / compileSnippets), the target forced into the compiled tier and every other ledger row left ungated. No hand-written regex.

Reading 1 — ledger-literal, on the base

17 diagnostics, matching the ledger row exactly: 1 parse + 15 undefined-name + TS2741 x1.

Fence (base line) Diagnostics By code
27 Quick Start 2 TS2741 authUrl missing on the AuthProvider element; TS2304 LoginPage
62 AuthProvider 4 TS2304 AuthProvider x2, authClient, App
72 useAuth 1 TS2304 useAuth
102 AuthGuard 4 TS2304 AuthGuard x2, LoginForm, ProtectedContent
112 forms 1 PARSE TS2657 "JSX expressions must have one parent element"
122 UserMenu 1 TS2304 UserMenu
131 createAuthenticatedFetch 2 TS2304 createAuthenticatedFetch x2
332 preview usage 1 TS2304 Dashboard
368 PreviewBanner 0 clean already
379 detecting preview 1 TS2304 useAuth
total 17 parse TS2657 x1, TS2304 x15, TS2741 x1

The ledger's canned wording for the parse diagnostic is wrong on this page: it says "blocks fenced ts that are bare object literals or elided bodies". This page has no ts fence and no object-literal fence. The single parse failure is three sibling JSX elements written as one expression (fence 112). Moot now that the row is deleted, recorded because the wording is shared with other rows.

Reading 2 — after imports and stand-ins, in memory

Only the missing import lines plus declare stand-ins for names the page never defines were added, and fence 112 was given a JSX parent so its parse failure stopped hiding the element checks behind it. Nothing about any prop was touched.

Fence Diagnostics after imports
27 1 — TS2741 authUrl missing
62 1 — TS2741 authUrl missing
72, 102, 112, 122, 131, 332, 368, 379 0
total 2

This is the reading the ledger-or-repair decision was made on. The real type debt is 2, not 1: fence 62's AuthProvider tag was unresolved, and an unresolved JSX tag name short-circuits the prop check on its own element, so it hid a second TS2741 behind its TS2304 — the same mechanism batch 27 measured and wrote into the worklist. The other 15 diagnostics were import shape, not defects.

Reading it the other way round: the ledger row's 17 overstated the page's real debt (15 of the 17 were missing imports) while its TS2741x1 understated the type debt by exactly one. Both halves of a mixed row are unreliable, in opposite directions.

Measured, not assumed: fence 112's parse failure hid no prop defect. With a parent element added and nothing else changed, the fence reads zero — onSuccess is a real prop on all three form components.

Per-fence decision

Every fence got a typed binding; no fragment marker was added anywhere on this page (0 before, 0 after), and no type was loosened.

Fence Decision
27 Quick Start Repaired. authUrl added beside client; LoginPage typed as declare const LoginPage: () = a ReactNode returner; the URL hoisted to a const so the client's baseURL and the prop are visibly the same string rather than two copies.
62 AuthProvider Continuation fence: own import line, declare const authClient: AuthClient (the exported type), declare const App stand-in, authUrl added. Prose above it now states that authUrl is required and client optional.
72 useAuth Continuation fence: own import line.
102 AuthGuard Continuation fence: own import line plus a ProtectedContent stand-in.
112 forms Repaired parse failure: the three elements are now separate statements. Own import line plus a navigate stand-in typed (to: string) = void.
122 UserMenu Continuation fence: own import line.
131 createAuthenticatedFetch Continuation fence: own import line.
332 preview usage Continuation fence: Dashboard stand-in. Its previewMode object literal was already clean.
368 PreviewBanner Untouched — it compiled on the base and still does.
379 detecting preview Continuation fence: own import line.

Stand-in spelling is the one already established on this corpus (packages/app-shell/README.md:59): import type { ReactNode } from 'react' plus a declare const.

The TS2741 decision — README defect, repaired

Decided against the exported type, as ruled.

  • AuthProviderPropspackages/auth/src/AuthProvider.tsx:119extends AuthProviderOptions, adding children, enabled?, previewMode?: PreviewModeOptions.
  • AuthProviderOptionspackages/auth/src/types.ts:513 — declares authUrl: string (required, line 515), client?: AuthClient (optional, line 517), onAuthStateChange?, redirectTo?.

So the dispatch's framing (that the type refuses one of client / authUrl) does not hold: both are members. The type refuses nothing the page passed; it requires something the page omitted. The Quick Start and the AuthProvider example passed client alone, and authUrl is required.

Verdict: README defect, branch A — repaired to the shipped surface. The page used to teach that client alone configures the provider. Every call site in this repository writes both, including the published skill guide skills/objectui/guides/auth-permissions.md:29 and :328, skills/objectui/guides/testing.md:201, the component's own three JSDoc examples (AuthProvider.tsx:144, :151, :157), and 20-plus tests under packages/auth/src/__tests__/. The README was the only place teaching the one-prop form.

Separate observation, offered as a finding proposal rather than filed (the runtime read is cited, per the dispatch's rule that a type/runtime divergence found by this batch belongs in the PR body and the PM opens its card):

authUrl is required by the type but dead at runtime whenever client is supplied. The only read is AuthProvider.tsx:171externalClient ?? createAuthClient({ baseURL: authUrl }) — and authUrl appears nowhere else in the component (greps at :163, :171, :172 only). A caller who already has a client must still pass a URL that is never used. Contract-first would express this as a discriminated union (client XOR authUrl) so a declaration cannot promise a value the runtime ignores. Out of scope here twice over: it is a packages/auth/src/** change this batch may not make, and the README compiles correctly without it. No card filed by me.

Ruling 4 — key surface

The bound does not bite anywhere on this page. No binding here is BaseSchema-derived, so objectui#7927's hand-classification does not apply and the table collapses to the compiler's own verdict, per fence:

Fence Binding Who judges keys
27, 62, 332 AuthProviderProps (AuthProvider.tsx:119) extending AuthProviderOptions (types.ts:513) The compiler. Neither interface carries an index signature, and JSX attributes are excess-property-checked, so an undeclared prop is a diagnostic rather than a silent pass.
332 previewMode value PreviewModeOptions (types.ts:411) The compiler. No index signature; the literal is contextually typed, so its four keys (simulatedRole, simulatedUserName, readOnly, bannerMessage) are excess-checked. All four are declared (:415, :417, :419, :423).
102, 112, 122, 368 AuthGuardProps, LoginFormProps / RegisterFormProps / ForgotPasswordFormProps, UserMenuProps, PreviewBannerProps The compiler, same reason.
72, 131, 379 No props object — a hook destructure and two function calls Not a key question.

A2 confirmed for both types named in the dispatch: AuthProviderProps and PreviewModeOptions are plain props interfaces with no index signature.

Consistency check done while here: the useAuth table (9 rows) and the PreviewModeOptions table (6 rows) both match their declarations exactly, and fence 72 destructures all 9 names with zero diagnostics.

Ledger decision

The page reads zero after the repairs, so its UNGATED_DOCS entry is deleted, not rewritten. The gate diff is exactly those two lines and nothing else.

Counters on the head, from the gate's own summary:

base 153d43237 head 7293545be
documents scanned 229 229
covered 219 220
ungated rows 10 9
blocks to compile 587 597
declared fragments 158 158

The 10 new compiled blocks are exactly this page's 10 fences. No pin enumerates this row: scripts/__tests__/check-doc-snippet-types.test.ts pins only the root README.md row (:600, :601), so no test file needed editing.

Strictness region

The region from the Fence scanning banner to EOF, 83711 bytes, the ledger sitting above it:

sha256
base 153d43237 2749d53ae3a8df033a53b8d7a354fa7e22ee2d1a17f6ad0c3d61122e904e084b
head 7293545be 2749d53ae3a8df033a53b8d7a354fa7e22ee2d1a17f6ad0c3d61122e904e084b

Byte-identical, and identical to the PR #8158 baseline.

Positive control

Run against the committed tree, under a trap with absolute paths.

  • Clean first: git diff HEAD -- packages/auth/README.md 0 bytes; disk blob equals the HEAD blob 8e7c95fd2ec32b9aa07443d9f556880e3c1b6bbf.
  • Injection: authUrl={authUrl} to authUrl={123} in the Quick Start fence. Landing proved by anchor counts (anchor 1 to 0, injected text 0 to 1) plus the blob move to d705be3ed1fef0345b4e1f0ddb88dc342b472c85 — not by an editor's exit code.
  • Gate under injection: exit 1, naming the file and the line: [semantic] packages/auth/README.md:39:19 TS2322: Type 'number' is not assignable to type 'string'.
  • Restore proved by state: git diff HEAD -- path 0 bytes AND disk blob back to 8e7c95fd2ec32b9aa07443d9f556880e3c1b6bbf (the HEAD blob), git status --porcelain empty.

Gates

All pinned to head 7293545be on a clean tree. Exit codes captured by redirect-then-capture, never through a pipe.

Gate Exit
pnpm check:doc-snippets 0 — every covered snippet compiles; page in the compiled tier
pnpm exec vitest run scripts/__tests__/check-doc-snippet-types.test.ts scripts/__tests__/check-doc-fence-languages.test.ts 0 (123 tests)
pnpm exec vitest run scripts/__tests__/ (whole directory) 0 (115 files, 3415 tests)
pnpm check:doc-types 0
pnpm check:readme-exports 0 (516 self-imports judged, 0 fabricated)
pnpm check:doc-fences 0
pnpm type-check:scripts 0
pnpm lint:root 0 (32 pre-existing warnings, 0 errors)
pnpm check:control-bytes 0
grep -naP control-byte self-scan, both changed paths 1 (no match — clean)
node scripts/check-changeset-presence.mjs 0 — no changeset owed (0 of 2 files are published source or a moved manifest contract)
node scripts/check-governed-queue-guard.mjs --test (both paths) 0 — NOT GOVERNED
pnpm check:entry-guard 0
turbo build closure (--build-filter, --concurrency=2) 0 (35 tasks)

Re-derived against the actual diff (a markdown page plus one scripts/*.mjs), beyond the dispatched list — all 0: check-doc-component-types.mjs, check-doc-expression-carriage.mjs, check-doc-links.mjs, check-doc-snippet-types.mjs --emit-census, check-shell-escape-residue.mjs, check-lint-coverage.mjs, check-type-check-coverage.mjs, check:doc-example-readers, check:esm-specifiers, check:node-esm-load.

One note on the last of those. pnpm check:node-esm-load first exited 1, and the reason was environmental, not this diff: turbo shares one cache across every worktree of a checkout, so six packages replayed artifacts built in /home/user/objectui-issue-5174-b27 (batch 27's worktree) and the gate correctly refused to grade another tree's output. Re-run with --force-build, as the gate's own message instructs, it exits 0 with 37 of 37 gradable entries built by this tree. Worth knowing for any batch that runs it next to a sibling worktree.

Live E2E (informational) is red on every branch today for an upstream reason (#7990 / objectstack#16186) and is not this PR's.


Generated by Claude Code

Burns down the `packages/auth/README.md` row of `UNGATED_DOCS` in
`scripts/check-doc-snippet-types.mjs`: the page's ten `tsx` fences now
compile in the gate's covered tier instead of being ledgered.

Census on the base, with the gate's own analyzer, matched the ledger row
exactly (17 = 1 parse + 15 TS2304 + 1 TS2741). Re-measured after adding
only the missing import lines and `declare` stand-ins, the real debt is
2 TS2741, both the same defect: `AuthProviderOptions.authUrl` is
required and the Quick Start omitted it. The second one was hidden --
an unresolved `AuthProvider` tag suppresses the prop check on its own
element.

- Every continuation fence gets its own import line and typed bindings
  (`declare const X: () => ReactNode`) for the names it uses.
- The three-form fence parsed as one JSX expression (TS2657); the
  elements are now separate statements. Measured: it hid no prop defect.
- `authUrl` added beside `client` in the two `AuthProvider` examples --
  the spelling every call site in this repository already writes,
  including `skills/objectui/guides/auth-permissions.md`.
- No type was widened, no fragment marker added, no `src/` file touched.

Part of #5174 (batch 28)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
@github-actions github-actions Bot added documentation Improvements or additions to documentation package: auth labels Sep 6, 2026
@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 50 chunks) 3189.7 KB 3191.4 KB
Main entry chunk (gzip) 143.9 KB 350 KB
Entry file index-o56M4bnE.js
Status PASS

The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it.


📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 15.67KB 5.75KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.06KB 3.86KB
auth (ActiveOrganizationStorage.js) 25.05KB 9.16KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.18KB 10.59KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.65KB 2.22KB
auth (SocialSignInButtons.js) 9.61KB 3.89KB
auth (UserMenu.js) 3.41KB 1.23KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.21KB 10.80KB
auth (createAuthenticatedFetch.js) 8.46KB 3.43KB
auth (index.js) 3.19KB 1.44KB
auth (invitation-status.js) 1.22KB 0.70KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 5.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 5.13KB 2.35KB
collaboration (CommentThread.js) 26.08KB 7.56KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 498.05KB 113.95KB
core (index.js) 6.96KB 2.79KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 187.85KB 52.13KB
fields (index.js) 243.04KB 61.36KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 1.22KB 0.64KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 6.57KB 2.76KB
i18n (index.js) 3.65KB 1.47KB
i18n (pickLocalized.js) 7.62KB 3.26KB
i18n (provider.js) 26.89KB 9.04KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 38.84KB 10.94KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.75KB
mobile (index.js) 1.99KB 0.87KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 2.53KB 0.85KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 4.39KB 1.66KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 11.71KB 4.29KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.24KB 2.16KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 5.12KB 1.74KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 15.16KB 3.68KB
plugin-calendar (index.js) 47.29KB 13.18KB
plugin-charts (index.js) 70.62KB 19.71KB
plugin-chatbot (index.js) 193.54KB 46.04KB
plugin-dashboard (index.js) 131.41KB 34.43KB
plugin-designer (index.js) 211.51KB 43.01KB
plugin-detail (index.js) 247.68KB 63.49KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 131.01KB 32.32KB
plugin-gantt (index.js) 167.16KB 40.99KB
plugin-grid (index.js) 208.58KB 56.63KB
plugin-kanban (index.js) 52.46KB 14.57KB
plugin-list (index.js) 113.34KB 27.72KB
plugin-map (index.js) 20.49KB 6.83KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.42KB 11.92KB
plugin-timeline (index.js) 30.10KB 8.74KB
plugin-tree (index.js) 9.33KB 3.25KB
plugin-view (index.js) 84.48KB 20.81KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.66KB 3.50KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 81.07KB 26.86KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 2.32KB 1.24KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.55KB 2.45KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 20.57KB 5.88KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 13.64KB 4.59KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 1.00KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 2.74KB 1.41KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (expression.js) 0.20KB 0.18KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 4.74KB 2.25KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 4.73KB 2.28KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 5.05KB 1.93KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

Copy link
Copy Markdown
Contributor Author

Standing down on Live E2E (informational) for this PR — domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, 2026-09-06T23:41Z.

That check is informational (not in the main ruleset's required contexts) and is red on the base branch for an upstream reason anchored on objectui#7990 / objectstack#16186; this PR touches one package README and one ledger row in a gate script, neither of which the Live E2E suite exercises. No re-run is requested. Every required check is judged on its own conclusion; this PR flips to ready only when all of them read completed / success on 7293545be.


Generated by Claude Code

Copy link
Copy Markdown
Contributor Author

Armed — domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, R46.

  • CI on 7293545be converged all green at 23:49:58Z (29 checks; Live E2E (informational) excluded per the standing-down note above).
  • Ready for review at 23:50:07Z; post-flip Governed Surface Queue Guard completed/success at 23:50:26Z.
  • Auto-merge SQUASH enabled; added_to_merge_queue on the REST timeline at 23:50:32Z (read 23:50:38Z).

Landing stroke follows the merge: content probe on re-fetched origin/main (authUrl={authUrl} in packages/auth/README.md and the ledger row's absence, with a control), LANDED here and on objectui#5174 (which stays open, Part of), then the batch-29 claim (packages/providers/README.md).


Generated by Claude Code

Merged via the queue into main with commit 158d75b Sep 7, 2026
31 of 32 checks passed
@baozhoutao
baozhoutao deleted the claude/issue-5174-doc-snippets-batch28-auth branch September 7, 2026 00:06

Copy link
Copy Markdown
Contributor Author

LANDED — domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, R46.

Merged at 2026-09-07T00:06:00Z as 158d75bb3 (squash). Content probe on re-fetched origin/main at 00:06Z: authUrl={authUrl} at packages/auth/README.md:39; the 'packages/auth/README.md' row is absent from UNGATED_DOCS (0 hits) while the control row 'packages/providers/README.md' is present (1 hit); the ledger reads 9 rows; the strictness region still hashes to 2749d53ae3a8df033a53b8d7a354fa7e22ee2d1a17f6ad0c3d61122e904e084b.

Batch 29 (packages/providers/README.md) is claimed on objectui#5174 next; the card stays open (Part of).


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation package: auth

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants