This repository was archived by the owner on Oct 26, 2026. It is now read-only.
Repository navigation
Commit 8b1f066
refactor(types,components): retire the unimplemented async export-job path (objectui#10247) (#10264)
Fixes #10247
Clause-②: no
## What this does
Retires the async export-job path on the objectui side, per ruling
letter A on objectstack#17158 (director seat, batch #221 item 2;
maintainer: 「同意」). The path is deleted, not kept alive with local copies
of the spec's types. objectstack#17158 is the upstream this unblocks; it
stays open and lands after this.
- `@object-ui/components`: deletes `src/hooks/use-export-job.ts`
(`useExportJob`, `UseExportJobOptions`, `UseExportJobReturn`) and
`src/custom/export-progress-dialog.tsx` (`ExportProgressDialog`,
`ExportProgressDialogProps`), with their barrel lines in `src/index.ts`
(the two hook export statements) and `src/custom/index.ts` (one line,
see the surface note below).
- `@object-ui/types`: `src/data.ts` loses the optional `DataSource`
members `createExportJob`, `getExportJobProgress`, `cancelExportJob` and
`getExportJobDownloadUrl`; the types `ExportJobStatus`,
`ExportJobFormat`, `CreateExportJobRequest`, `CreateExportJobResult` and
`ExportJobProgressInfo`; and the spec imports behind them
(`ExportJobStatus` and `ExportFormat` from `@objectstack/spec/api`,
`CreateExportJobInput` and `CreateExportJobResult` from
`@objectstack/spec/contracts`). `src/index.ts` drops the five
re-exports. There was no zod mirror. The surviving `exportDownload`
docblock no longer contrasts itself with the removed family.
- Tests: the `ExportProgressDialog` case and its `job` fixture leave
`displayLocale-9909.test.tsx`; the DebugPanel case stays. In
`packages/types`, the three export-job rows in
`page-nav-misc-spec-parity.test.ts` and the export-status covers row in
`spec-derived-unions.test.ts` go with their types. The rows that pin
surviving exports stay: `ImportRowResult` (`action` required),
`ImportWriteMode`, `ImportJobStatus` and `ValidationError`.
- `docs/ARCHITECTURE.md`: the compiled `MinimalDataSource` snippet's
comment no longer lists an export job family among the optional
`DataSource` members; it names `exportDownload` and the import-job
family (round 2).
- `.changeset/10247-retire-async-export-job-path.md`: `minor` for
`@object-ui/types` and `@object-ui/components` (the repo's no-major
convention), opening with a **BREAKING** banner. Out-of-repo
implementers are NOT MEASURED, and the changeset says so.
All four `DataSource` members go, not only the two the card names. The
census pattern matches the `ExportJob` substring, so a zero requires
`cancelExportJob` and `getExportJobDownloadUrl` to leave as well. They
belong to the same family and `useExportJob` was their only reader.
## Surface note: one line outside the claimed file surface
`packages/components/src/custom/index.ts` is not in the claim's file
surface. It holds the only barrel line for the deleted dialog (`export *
from './export-progress-dialog'`), so the component the card names
cannot be deleted without it and still compile. The claim's surface was
derived from the census, and the census pattern matches `ExportJob`
tokens, not a module path, so it could not see this line. Before editing
I re-read the fence over REST: 0 of the 12 open PRs touch that file. The
release PR, objectui#5400, was paged in full: 1732 files, none under
`src/`. The hunk is that one line.
Round 2: the seat accepted this line and widened the surface by one
comment line in `docs/ARCHITECTURE.md` (contract review `5816362049`).
## Premise checks
- **Census, re-run.** At base `d7de5348` (origin/main had moved on from
`6f96fca9` by the time the worktree was cut) it names the same 8 files
the seat listed. The two `packages/types` spec-parity hits pinned the
removed types, so their rows went. No assertion on a surviving export
was removed.
- **No `DataSource` implements the family.** The population is every
non-markdown file under `packages/`, `apps/` and `examples/` that writes
`implements DataSource`, `: DataSource =`, `as DataSource` or `satisfies
DataSource`: 78 files at `d7de5348`. It covers the five implementing
classes (`ApiDataSource` and `ValueDataSource` in core,
`ObjectStackAdapter`, `MockDataSource` in runner, and the
`RestDataSource` example) plus the test doubles. Files naming any of the
four members: 1, `packages/types/src/data.ts`, which is the declaration.
Lit control on the same population, the sync sibling `exportDownload`: 3
files (the `ObjectStackAdapter`, a `ListView` test double, the
declaration).
- **i18n.** The dialog and the hook made no translation calls (0 hits
for `t(` / `useTranslation` / `useObjectTranslation` /
`createSafeTranslation` in either file at base; the same pattern hits
`RecordTitleChip.tsx`, `character-count.tsx` and others in the same
directory). No key became orphaned and no locale file moves.
## Census with a lit control
`git grep -l -E 'ExportJob|createExportJob|getExportJobProgress' REF --
packages apps ':!**/CHANGELOG.md'`
| ref | files |
|:--|:--|
| base `d7de5348` | 8 |
| main `4ab4f1ba` without this branch | 8 |
| merged head `70770e74` (round 2, `origin/main` merged in, no rebase) |
0 |
| control at `70770e74`, same roots and pathspec,
`ImportJobStatus\|exportDownload` | 17 |
**Ablation** (`scripts/ablation-replace.mjs` from the objectstack
checkout, wrap mode, fix committed first, trap `git checkout HEAD --
ABS_PATH`). I re-planted `ExportJobStatus,` into the
`packages/types/src/index.ts` re-export block (anchor 1 to 0, blob
`0807e274` to `8794e110`). The census went red: 1 file,
`packages/types/src/index.ts`. The restore was proven: blob after
restore equals HEAD `0807e274`, and `git diff HEAD` is empty. The first
attempt was a no-op that the tool refused, because the replacement still
contained its anchor. The tool restored the file (blob equals HEAD) and
the census did not run, so that attempt is not a measurement.
## Verification, all at HEAD `f618634c`
- `pnpm turbo run type-check --filter=@object-ui/types
--filter=@object-ui/components`: 10/10 tasks, exit 0. The test tsconfigs
compile both parity tests and `displayLocale-9909.test.tsx`, counted
with `--listFiles`. The first run caught a leftover `void` of the
removed pin (TS2552), which the second commit fixes.
- Consumers: `pnpm turbo run type-check` for `@object-ui/core`,
`@object-ui/data-objectstack`, `@object-ui/runner`,
`@object-ui/plugin-grid` and `@object-ui/plugin-list` (the in-repo
`DataSource` implementers and the sync export path): 21/21 tasks, exit
0.
- Reverse type probe against the rebuilt `dist` (a throwaway file in
`plugin-grid`, deleted by trap): TS2724 for `ExportJobStatus`, TS2305
for `CreateExportJobRequest`, `useExportJob` and `ExportProgressDialog`,
and TS2551 for `ds.createExportJob`. The control names
`ImportJobStatus`, `ExportDownloadRequest`, `useIsMobile` and
`ds.exportDownload` compiled.
- From the repo root: `pnpm exec vitest run packages/types/` gave 213
files / 4916 tests passed. `pnpm exec vitest run packages/components/`
gave 287 files / 2783 tests passed. The three touched test files, run
verbosely, gave 3 files / 61 tests passed.
- **The sync export still works** (grid CSV/Excel path): `plugin-grid`
`exportGate.test.tsx`, `exportServer.test.tsx` and
`ObjectGrid.exportOptionsKeys.test.ts`; `data-objectstack`
`exportDownload.test.ts`; `plugin-list`
`ListView.exportMatchesView.test.tsx`; `core` `export-filename.test.ts`.
Result: 6 files / 55 tests passed.
- Dist pins: `OBJECTUI_DIST_PINS=1 pnpm exec vitest run --project dist`
gave 2 files / 8 tests passed.
- Gates, all exit 0: `check:control-bytes`, `check:new-line-citations`
(0 new), `check-changeset-presence.mjs`, `changeset:check` (fixed group,
no major), `check:i18n-keys`, `check:i18n-drift` (0 en values changed),
`check:i18n-dead-keys`, `check:pending-changeset-literals`,
`check:changeset-claims`, `check:spec-symbols`,
`check:unreferenced-sources`, `check:unused-deps`, `check:phantom-deps`,
`check:side-effects-array`, `check:esm-specifiers`, `check:self-import`,
`check:test-path-roots`, `check:component-surface-parity` (report-only),
and `check-governed-queue-guard --test` (NOT GOVERNED, 10 paths).
- `check:changeset-claims` pointed at four pending changesets that name
a touched file (5213, 6051, 9309, i18nlabel-inverted-pin-5612). I read
each paragraph against this diff and all four still hold: none cites a
removed row or name.
- Lint, narrowed: `eslint --format json` on the 7 changed ts/tsx files
from their package directories (both packages lint with `eslint .` under
the root flat config) found 7 files, 0 errors. The 27 warnings are all
pre-existing `no-explicit-any` in `data.ts`, the same count as base
`data.ts`. `--print-config` resolves a config for all 7 files with empty
`parserOptions` (no `project` / `projectService`), and no enabled rule
reads other files, so linting is not type-aware and this diff cannot
move an untouched file's verdict. The only importers of the two deleted
modules were in the linted set.
## Round 2 verification, all at HEAD `70770e74`
- The changeset now states the real sequence: `@objectstack/spec` still
exports the export-job contracts and `IExportService`, and
objectstack#17158 (ruling A) retires them after this lands. The 「Why」
paragraph was re-tensed to match, and the import clause now names
`@object-ui/types` / `@object-ui/components`.
- `type-check` for types, components, core, data-objectstack, runner,
plugin-grid and plugin-list: 23/23 tasks, exit 0.
- From the repo root: types + components renderers/ui/notifications gave
332 files / 6050 tests passed; components `__tests__` gave 170 files (1
skipped) / 1656 tests (7 skipped). Sync export: 6 files / 55 passed.
Dist pins: 2 / 8.
- `check:doc-snippets`: 672 of 672 blocks judged, 0 failed.
`check:readme-exports`: exit 0, 544 of 544 self-imports judged, all
real. The remaining gates exit 0.
## NOT MEASURED
- Type-check of the remaining consumers (app-shell, console, fields and
the other plugins): not run locally. The census reads zero over
`packages/` and `apps/`, so no file there spells a removed name. CI's
Type Check runs all of them.
- Out-of-repo `DataSource` implementers and importers: not measurable
from here.
## Acceptance notes
- The repo-root `ROADMAP.md` still names `ExportJobStatus` /
`CreateExportJobRequest` in two table rows and in an unchecked item to
integrate them for async streaming exports. It is outside the census
roots and outside the claimed surface, so it is left as it is. Once
objectstack#17158 lands, the protocol no longer carries what that item
would integrate. Not filed.
- The published `CHANGELOG.md` files keep their historical mentions. The
census excludes them by design.
- `origin/main` `4ab4f1ba` was merged into the branch as merge commit
`70770e74` (no rebase). The census on the merged head is 0.
- `docs/ARCHITECTURE.md` (Custom Data Source Interface, the compiled
`MinimalDataSource` snippet): its comment listed the import/export job
family among `DataSource`'s optional members. It now names
`exportDownload` and the import-job family, which is what `DataSource`
still declares: `createImportJob`, `getImportJobProgress`,
`getImportJobResults`, `listImportJobs`, `cancelImportJob` and
`undoImportJob`, all optional. It is one comment line; the seat widened
the surface for it.
<sub>Body refreshed by `domain:ui` seat #1 with the round-2 corrections
the dev named · 2026-09-24T16:01Z</sub>
---
_Generated by [Claude
Code](https://claude.ai/code/session_01BA3nKVUwKQJf8DBxrSVtNC)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 5ea623e commit 8b1f066
11 files changed
Lines changed: 72 additions & 698 deletions
File tree
- .changeset
- docs
- packages
- components/src
- __tests__
- custom
- hooks
- types/src
- __tests__
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
288 | 288 | | |
289 | 289 | | |
290 | 290 | | |
291 | | - | |
| 291 | + | |
292 | 292 | | |
293 | 293 | | |
294 | 294 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
11 | | - | |
| 10 | + | |
| 11 | + | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
18 | 21 | | |
19 | 22 | | |
20 | 23 | | |
| |||
23 | 26 | | |
24 | 27 | | |
25 | 28 | | |
26 | | - | |
27 | 29 | | |
28 | | - | |
29 | 30 | | |
30 | 31 | | |
31 | 32 | | |
| |||
48 | 49 | | |
49 | 50 | | |
50 | 51 | | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | 52 | | |
64 | 53 | | |
65 | 54 | | |
| |||
83 | 72 | | |
84 | 73 | | |
85 | 74 | | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | 75 | | |
93 | 76 | | |
94 | 77 | | |
| |||
101 | 84 | | |
102 | 85 | | |
103 | 86 | | |
104 | | - | |
| 87 | + | |
105 | 88 | | |
106 | 89 | | |
107 | 90 | | |
| |||
This file was deleted.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
28 | | - | |
0 commit comments