Repository navigation
Commit 1354e7b
Fixes #21772
Clause-②: no
This moves the bundled Console's objectui pin from `2e818d0b51ec`
(#21710) to objectui `main` as of the write time,
`9dfaca654311cddd81714153c4f82c241d7cdc54`, which is past `c096f03`. The
Console now carries objectui#11611 (the `ref:dataset` spec-form widget),
objectui#11614 (the grid widget's camelCase keys) and objectui#11619
(the record chrome's picture). Those are the three merges #21714, #21768
and #21765 wait on.
⛔ This is not a release act. Version PR #21352 is untouched, and no tag,
publish or Release was made. The card's "release first" hold is lifted
by the maintainer's order recorded in the claim:
「浏览器测试已经在运行,还有很多问题在处理,服务端开发不应该被阻塞」.
## Range
- objectui `git ls-remote origin refs/heads/main` read
`9dfaca654311cddd81714153c4f82c241d7cdc54` at 2026-10-05T00:51:29Z, just
before the bump, and the same sha again before this PR was opened.
- `git merge-base --is-ancestor` exits 0 against `9dfaca654311` for all
three carried merges: `b508ac50d9` (objectui#11611), `2abec3a96c`
(objectui#11614) and `c096f03279` (objectui#11619). The objectui clone
is shallow, but exit 0 proves itself there.
- `2e818d0b51ec..9dfaca654311` has 17 commits and 0 merges.
- objectui declared 24 changesets over the range, and all 24 release.
There are 0 release-nothing changesets and 0 commits without a
changeset. None declares `major`. Four carry the author's breaking
annotation, and the highest declared level is `minor`, so the console
changeset is `minor`. These counts come from `scripts/objectui-range.mjs
--from 2e818d0b51ec --to 9dfaca654311 --json` and from the bump's own
digest. They were measured, not copied from the card.
- Four commit subjects carry `!`. `git log --format='%h %s'
2e818d0b5..9dfaca654 | grep -E '^[0-9a-f]+ [a-z]+(\([^)]*\))?!:'` gives
`9db9ff3f9`, `8b14aecbd`, `2abec3a96` and `b403bb36f`.
| objectui commit | landing | changesets | declared disposition |
|---|---|---|---|
| `9dfaca654` | objectui#11615: the default `simple` form draws a
self-describing inline section entry; `ObjectFormSection.fields` gains
the form view's `{ field }` arm | 1, minor, **BREAKING** (for TypeScript
readers) | releasing; declared breaking, answered below |
| `15f67025b` | objectui#11345: the inline grid's default columns derive
through the spec rule `deriveInlineGridColumns` | 1, patch | releasing |
| `4c127cdef` | objectui#11613: `record:related_list` stops requiring
`columns` | 1, minor | releasing; moves the manifest |
| `c096f0327` | objectui#11383 (PR objectui#11619): the record chrome
draws the record's picture from the object's `imageField` | 1, minor |
releasing; smoke below; unlocks #21765 |
| `6e9090c26` | objectui#11336: an object document's served listViews
count as served views | 1, patch | releasing |
| `9db9ff3f9` `!` | objectui#11266: a form view's `subforms[].columns`
entry is the spec's `InlineGridColumnSchema`, by reference | 1, minor,
**BREAKING** | releasing; declared breaking, answered below |
| `7c9a6b194` | objectui#11340: the docs portal renders the book
resolver's answer | 1, patch | releasing |
| `8b14aecbd` `!` | objectui#11608: `PartialSchema` is retired from
`@object-ui/types` | 1, minor, **BREAKING** | releasing; declared
breaking, answered below |
| `2abec3a96` `!` | objectui#11610 (PR objectui#11614): the grid
widget's eight field-level keys are camelCase; the snake_case spellings
are refused by name | 1, minor, **BREAKING** | releasing; declared
breaking, answered below; unlocks #21768 |
| `b403bb36f` `!` | objectui#8347: `BaseSchema` loses its index
signature | 1, minor (`Clause-②: yes (narrowing)`, no BREAKING word) |
releasing; declared breaking by its `!`, answered below |
| `fd060f076` | objectui#11605: bound registrations stop requiring
`objectName`, and a node with neither shows a no-object hint | 8, minor
| releasing; moves the manifest |
| `b508ac50d` | objectui#11601 (PR objectui#11611): the `ref:dataset`
spec-form widget, fed by the report inspector's dataset catalog | 1,
minor | releasing; unlocks #21714 |
| `d2e859936` | objectui#11002: the console asks `GET /usage/storage`
only when the runtime serves `features.storageUsage` | 1, minor |
releasing; smoke below |
| `b92329c89` | objectui#11591: the Organization flows page copy | 1,
patch | releasing |
| `902ebab63` | objectui#11569: `record:line_items` stops requiring
`childObject` | 1, minor | releasing; moves the manifest |
| `278d2444e` | objectui#11546: a node click on a read-only flow canvas
opens the inspector read-only | 1, patch | releasing |
| `b61c116b2` | objectui#11577: `record:details` read mode keeps a
textarea's line breaks | 1, patch | releasing |
## Declared-breaking changes, and how this repo answers each
The ADR-0087 disposition is `not-required (no-migration-prescription)`.
It replaces the bump's `adr-0087: TODO` placeholder in
`.changeset/console-9dfaca654311.md`, and it covers all five entries
below. `check-adr-0087-registration --base origin/main` gives "1
declared-breaking changeset(s), each carrying an ADR-0087 disposition".
`check-changeset-no-major --base origin/main` gives "This diff
introduces no `major` bump".
1. **objectui#11610 / PR objectui#11614 (`2abec3a96`): the grid widget's
eight keys.** `min_rows`, `max_rows`, `allow_add`, `allow_delete`,
`allow_reorder`, `total_field`, `add_label` and `sort_field` become
`minRows` … `sortField`. objectui has no dual read: its zod faces refuse
a snake_case key by name, and its `GridField` draws an inline alert
instead of the grid.
- **This repo, today.** `@objectstack/spec`'s runtime form field
(`buildObjectFormRuntimeField`, `packages/spec/src/ui/component.zod.ts`)
already refuses the eight snake_case keys by name, with guidance that
names objectui#11610. The camelCase keys are not declared there yet.
- **The interim, stated plainly.** Between this PR and #21768, an
ObjectStack-authored `grid` form field can spell the keys neither way.
Measured on this head's built spec: `object-form` with `customFields: [{
name: 'items', type: 'grid', min_rows: 1 }]` is refused with
`unrecognized_keys` at `customFields.0` and the grid-key guidance. The
same field with `minRows: 1` is refused with `unrecognized_keys` at
`customFields.0`, as an undeclared key. So a `grid` field takes its
`columns` and the widget's own defaults. The refusal's prescription says
these keys "come in once the widget reads a camelCase spelling". At this
pin the widget does, and #21768 declares the keys and retargets that
prescription.
- **Nothing here carries the retired spelling.** `git grep` over
`examples/` and `packages/` finds no authored snake_case grid key. The
only hits are the spec's own refusal list and its pin test, migration
prose, and one historical note about objectui's internal master-detail
adapter.
2. **objectui#11615 (`9dfaca654`): the `simple` form's inline section
entries.** For TypeScript readers of `ObjectFormSection.fields`, the
type gains the spec's `FormFieldInput` arm. No code in this repo imports
`@object-ui/types`; the only `@object-ui/*` import is
`scripts/gen-sdui-manifest-node.mjs` reading `@object-ui/core` from the
built tree. The behaviour change is that the default `simple` form now
draws an inline `{ name, … }` entry, as the other five form types
already did. The showcase's `object-form` nodes are `wizard`, `drawer`
and `modal` forms whose sections list field names, so none of them draws
differently.
3. **objectui#11266 (`9db9ff3f9`): `subforms[].columns`.** objectui's
validator now judges a column by `@objectstack/spec`'s own
`InlineGridColumnSchema`. This repo has enforced that closed shape since
#20927. objectui's verdict now matches `os validate`, and the
ObjectStack accept set does not move.
4. **objectui#11608 (`8b14aecbd`): `PartialSchema`.** It leaves
`@object-ui/types`. Nothing in this repo names it (`git grep
PartialSchema`: 0).
5. **objectui#8347 (`b403bb36f`): `BaseSchema` loses its index
signature.** This narrows the TypeScript face of objectui's node types,
and nothing here compiles against them. objectui's zod faces keep their
accept sets for every key except `visibleWhen`. That key widens to the
`{ dialect, source }` envelope this repo's own parse writes.
## The three cards this unblocks
- **#21714**: objectui#11601's `ref:dataset` widget (PR objectui#11611,
`b508ac50d`) is now in the pinned build, so `report.form.ts`'s
joined-block `dataset` row can declare `widget: 'ref:dataset'`.
- **#21768**: objectui#11610's camelCase keys (PR objectui#11614,
`2abec3a96`) are now what the pinned widget reads, so the spec's runtime
form field can declare them.
- **#21765**: objectui#11383's record picture (PR objectui#11619,
`c096f0327`) is now in the pinned build, so `object.imageField`'s
liveness row can move to `live`. The smoke below observes that read in
the browser. The reader is
`packages/components/src/renderers/layout/containers.tsx`, in the
`page:header` record chrome.
## What changed here
- **`.objectui-sha` and `.changeset/console-9dfaca654311.md`.**
`scripts/bump-objectui.sh 9dfaca654311cddd81714153c4f82c241d7cdc54
--no-commit` wrote both, with `OBJECTUI_ROOT` set to the container's
objectui clone after `git fetch origin main`. The range walked
completely without a deepen, and the level was auto-set to `minor`.
- **`sdui.manifest.json` and `scripts/sdui-manifest.record.json`.**
`node scripts/gen-sdui-manifest-node.mjs` regenerated them over the tree
that `pnpm objectui:build` built at the pin. There are 107 components at
both pins, and the sha256 moves from `0ead67c1111d…` to `6f921896ffac…`.
**This time the manifest moves**:
- Eleven inputs lose `required: true` and gain a description. Nine are
`objectName`, on `object-grid`, `list-view`, `object-form`,
`embeddable-form`, `object-master-detail-form`, `object-kanban`,
`object-metric`, `object-chart` and `object-pivot` (objectui#11605). The
other two are `record:related_list` `columns` (objectui#11613) and
`record:line_items` `childObject` (objectui#11569).
- `object-master-detail-form`'s `fields` description is rewritten for
objectui#11615's inline entries.
- Where the spec has a `ComponentPropsMap` row, these inputs are already
optional there. Measured on the built spec: `object-grid`,
`object-form`, `object-kanban`, `object-metric` and
`object-master-detail-form` `objectName`, `record:related_list`
`columns` and `record:line_items` `childObject`. So the manifest now
agrees with the spec rows. The JSX page compile reads the manifest, and
it stops refusing a node whose `dataSource` binding names the object.
- The record moves its pin and `modulesRoot`. objectui's workspace
version stays 17.7.0.
- **`packages/sdui-parser/objectui-lockstep.json`.** `pnpm
gen:sdui-lockstep` re-recorded it against
`OBJECTUI_ROOT=.cache/objectui-9dfaca654311`. It records 214 grammar
lines (blob `0131f27cf86d`), 25 codes and containment predicate
`76c18fb95d1f`. All are unchanged, and objectui's `packages/sdui-parser`
has no diff over the range, so no port is owed.
- **The 54 asserting pin citations in `packages/spec/src`.** They were
re-measured at the new pin, not restamped:
- Each asserting record's anchors were resolved in objectui at
`2e818d0b5`, mapped through `git diff -U0 2e818d0b5 9dfaca654`, and
re-read at the new pin. Each record gains a dated 2026-10-05 hop
sentence and keeps its earlier history.
- In every cited file that changed, the cited lines moved with their
text byte-identical:
- objectui#8347 re-worded docblocks in `ObjectGrid.tsx`,
`ObjectTree.tsx`, `ObjectGantt.tsx`, `ObjectCalendar.tsx`,
`SchemaRenderer.tsx`, `plugin-view/src/ObjectView.tsx`,
`plugin-map/src/index.tsx` and `plugin-gantt/src/index.tsx`.
- In `ObjectKanban.tsx`, objectui#8347 added a private
`GateBoundKanbanSchema` read type, so its fetch, navigation reads and
spread moved +30.
- objectui#11605 touched `plugin-kanban/src/index.tsx`,
`plugin-dashboard/src/index.tsx` and `ElementDataSourceGate.tsx`. The
`object-metric` icon input moved `281` → `299` and is still `{ name:
'icon', type: 'string' }`.
- objectui#11619 moved the `page:tabs` and `page:accordion` icon anchors
in `containers.tsx` by +3.
- objectui#11615, objectui#11266 and objectui#8347 moved
`ObjectKanbanSchema.limit`, `ObjectMapConfigSchema` and
`LIST_VIEW_LOCAL_OVERRIDES` in `objectql.ts` and `objectql.zod.ts`.
- objectui#11605 added `view.noObject` to the `en`, `zh` and `de` locale
packs. Their cited `calendar.configRequired` strings did not change or
move.
- One cited line changed content. `ObjectKanban.tsx:10`, the type
import, gained `SortConfig` beside the `ObjectKanbanSchema` the record
cites.
- Two counts were re-taken by their records' own methods, and both read
the same: the `keyboardNavigation` hit lines (15, against the
`schema.editable` control's 3) and the `ElementDataSourceGate`
occurrences in five `src/index.tsx` shells (0, 3, 3, 3 and 4).
- The three quoted anchors in `ui/view.zod.ts`'s map record redded at
this pin, and each was re-read and re-pointed: `case 'map':` moved
`2299` → `2300`, `ObjectMapConfigSchema` `2370` → `2388`, and
`LIST_VIEW_LOCAL_OVERRIDES` `1419` → `1437`.
- **The six migration entries' corpus counts** were re-taken with `git
grep -o -F`. That method first reproduced every `2e818d0b5` number: 7579
files, `objectstack` 17227, `@objectstack/spec` 7134, `timeout` 1351,
`useState` 2477, `TTL` 182, `tenant` 1317 and `Span` 505.
- The new numbers are 7632 files, 17313, 7186, 1360, 2477, 182, 1318 and
508. The other controls read `RuntimeConfig` 276 → 293, `resourceLimits`
2 → 2, `window` 4175 → 4193, `period` 238, `interval` 195 and `metrics`
374 → 401.
- Every zero is still zero: 98 tokens were checked, the export lists of
the three cited spec files plus every named key. The only non-zero
tokens are the expected `Span` (508) and `SpanSchema` (57). The three
new `Span` hits are `colSpan` in objectui's
`object-form-section-field-entry-11615.test.ts`. Both `resourceLimits`
hits are still prose in `packages/app-shell`.
- `packages/spec/src/migrations/registry.ts` was regenerated with
`gen:migration-registry`.
- **`.changeset/objectui-pin-citations-9dfaca654311.md`** is a
`@objectstack/spec` patch, because the `FormField.span` describe and six
migration descriptions name the pin.
`content/docs/references/ui/view.mdx` was regenerated by
`check:generated --fix`.
No example, test or gate needed adapting, and no code changed outside
generated records, citations and changesets.
## Console build and canaries
`build-console.sh` ran locally under the verify lock, after `turbo run
build --filter=@objectstack/client...`, the same two steps the `Console
Pin Gate` job runs. Exit 0, 9m02s on a shared four-core box. The build
log reports:
- "Bundle canary 'import/jobs' present".
- "Single-zod canary: exactly one zod version literal
{major:4,minor:6,patch:5}".
- "Console bundle carries THIS tree's @objectstack/spec, and only it".
- "@objectstack/console dist ready (64192 KB) from
objectui@9dfaca654311".
`check:console-sha` and `check:console-injection` exit 0 against that
dist.
## Browser smoke: `examples/app-showcase` with the Console built at
`9dfaca654311`
The server ran `pnpm dev -- --fresh --ui --no-watch --compile -p 41877`
with `OS_PORT=41877`, on its own ephemeral DB with the seeded admin.
Headless Chromium (`/opt/pw-browsers/chromium`) drove it, signing in
through the console's own login form, with console messages, page errors
and every 4xx/5xx response captured. Only the PIDs this run started were
stopped.
**No showcase object declares `imageField`, so the record picture needs
one to exist.** `git grep imageField examples` gives 0 hits. To exercise
objectui#11619's read, the smoke made a temporary local edit:
- It added `imageField: 'f_image'` to `showcase_field_zoo`, through
`node scripts/ablation-replace.mjs --hold`.
- It compiled and booted the server.
- It restored the file at once with `--restore`. The tool reports the
blob back to HEAD's `4130858b8f8b` and `git diff HEAD` empty, and `git
status --porcelain` is empty.
- After the run, the showcase `dist/` was restored from turbo's cache
for the clean source: sha256 `cc1034dd9d23…`, as before the smoke. The
stray runtime bundle of the edited compile was deleted.
Nothing of the edit is in this diff. A real `sys_file` was uploaded
through `/api/v1/storage/upload/presigned` → `PUT` → `/upload/complete`
(a 64×64 red PNG) and written to "Specimen — Full"'s `f_image`.
| record page | `[data-record-picture]` | image |
|---|---|---|
| Field Zoo "Specimen — Full" (`f_image` set) | 1, beside the title in
the record header, `rounded-md` (an `image` field, not `avatar`) |
`src="/api/v1/storage/files/b1f4e384-…"`, `alt=""`, loaded,
`naturalWidth` 64 |
| Field Zoo "Specimen — Minimal" (`f_image` empty) | 0 | none, as
objectui#11619 specifies for an empty value |
**Verdict:** at this pin the record header draws the record's picture
from the object's `imageField`, drawing the stored file through
`/api/v1/storage/files/:id`, and draws nothing when the value is empty.
`showcase_task`'s record page is the custom `task-detail` page, which
has no `page:header`, so it draws no record chrome to put a picture in.
That page was smoked too: it renders its path bar, highlights and
sections with 0 page errors.
**Console messages across the run:** 0 page errors. The only failed
loads are a 401 on `GET /api/v1/auth/get-session` (the pre-login probe)
and a 404 for `/favicon.ico`. There is no `/api/v1/usage/storage` 404.
#21625's and #21710's smokes both recorded one, and objectui#11002
(`d2e859936`) stopped the request on a runtime that does not serve it.
## Gates and tests (head `4b9519ea23`)
- `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack
--commands` derived 127 commands from the 22-path diff, and all were run
at `4b9519ea23`. `--ran` reports "127 derived, 127 run, 0 NOT-MEASURED,
0 UNRUN", with every exit code recorded.
- Two exited 3 (`PREREQUISITE NOT MET`) on the first pass:
`check:skill-examples` (no `client-react` dist) and
`check:dual-build-cjs-loads` (no dist for 34 packages).
- Both exited 0 after `turbo run build --filter=!@objectstack/docs` (71
of 72 tasks were cache hits), and those are the codes recorded.
- Also exit 0:
- `check:objectui-pin-citations --verify-anchors` with objectui at the
pin: 54 asserting citations match `9dfaca654`, and 7 anchor content
assertions are verified.
- `check:objectui-bump` (20 assertions across 5 cases),
`check:sdui-lockstep`, `check-sdui-manifest`, `check:console-sha`,
`check:console-injection`, `check:migration-registry`.
- `@objectstack/spec check:generated`: all 15 artifacts current after
the `--fix`.
- `pnpm --filter @objectstack/spec exec vitest run` (both projects,
`local` and `repo`): 668 files, 19259 passed, 1 todo. `pnpm --filter
@objectstack/spec typecheck`: exit 0.
- `@objectstack/sdui-parser` test (14 files, 225 passed) and typecheck:
exit 0.
- These suites read the regenerated manifest:
- `@objectstack/lint` test: 119 files, 5627 passed. It declares
`sdui.manifest.json` as a test input.
- `@objectstack/metadata-protocol`
`src/protocol.runtime-authoring-gate.test.ts`: 70 passed.
- `@objectstack/cli` unit tier `src/utils/sdui-manifest.test.ts` and
`test/validate-build-gate-parity.test.ts`: 2 files, 79 passed.
- `test/jsx-gate-manifest-notice.e2e.test.ts` belongs to neither CLI
tier; it runs nightly, so it is NOT MEASURED here and is left to CI.
- `eslint --no-inline-config --format json` on the 15 changed TS files:
15 files, 0 errors and 0 warnings. The lint population is
`**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}` (`eslint.config.mjs:971`). The
config enables no type-aware linting (`:327-328`), so this diff cannot
move a verdict on an untouched file. Repo-wide `pnpm lint` is left to
CI.
## Acceptance notes
- `main` moved two commits past this branch's base (#21783, #21780).
Neither touches a path this diff touches, so no merge was made. The
merge queue rebuilds on the current `main`.
- Anchors in records that cite no asserting sha are outside the
pin-citation gate's population and were not re-measured. Several point
into files that changed here: `containers.tsx` anchors in
`ui/component.zod.ts` docblocks with no sha, and `component.test.ts`'s
`plugin-dashboard/src/index.tsx:204` (the `ObjectMetricPropsSchema icon
liveness` test, already reading an unrelated line at `ab1879721595`, as
#21710 noted).
- After this pin, the spec's snake_case grid-key prescription ("these
come in once the widget reads a camelCase spelling") describes a
condition that now holds. #21768 retargets it when it declares the
camelCase keys. It is left as is here, because the pin bump changes no
accept set.
- Writes: one draft PR through the relay and the report comment. No
label, no PR assignee, no ready flag and no auto-merge were written,
because this dispatch's write budget names none of them.
---
_Generated by [Claude
Code](https://claude.ai/code/session_016tKoy8NJa35Yih1FdzrVmn)_
---------
Co-authored-by: Claude <noreply@anthropic.com>
1 parent 0a34803 commit 1354e7b
22 files changed
Lines changed: 567 additions & 193 deletions
File tree
- .changeset
- content/docs/references/ui
- packages
- sdui-parser
- spec/src
- data
- kernel
- migrations
- entries/semantic
- ui
- scripts
| 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 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 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 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
213 | 213 | | |
214 | 214 | | |
215 | 215 | | |
216 | | - | |
| 216 | + | |
217 | 217 | | |
218 | 218 | | |
219 | 219 | | |
| |||
343 | 343 | | |
344 | 344 | | |
345 | 345 | | |
346 | | - | |
| 346 | + | |
347 | 347 | | |
348 | 348 | | |
349 | 349 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
10 | | - | |
| 9 | + | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
| 24 | + | |
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| |||
Lines changed: 11 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
64 | | - | |
65 | | - | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
66 | 75 | | |
67 | 76 | | |
68 | 77 | | |
| |||
0 commit comments