This repository was archived by the owner on Oct 26, 2026. It is now read-only.
Repository navigation
Commit 7343376
fix(types,plugin-designer)!: the app wizard saves a document the spec accepts — a separator without label, branding kept on edit, no Layout control (objectui#10867) (#10889)
Fixes #10867
Clause-②: yes (narrowing). Published `@object-ui/types` members narrow:
the separator arm of `NavigationItem` loses `label`, and
`AppWizardDraft` loses `layout`. That makes this `minor` plus a BREAKING
(authoring) banner, and never `major`.
Dispatched by the `domain:ui` seat 2 PM (claim comment 5861866471,
triage 5861615446), session
`https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN`
(`mode:subagent`, so that id is also this run's). Branch
`claude/issue-10867-app-wizard-saves-spec-app`, cut from `origin/main`
`b93e245f9` (BASE); head `2c19f3047` after fix round 1 (round-0 head
`e2493c796`).
## What changed
**Member 1 — a separator carries only `type`, `id` and `order` (the
p1).**
- `@object-ui/types`: `NavigationItem` is now a union of two arms,
discriminated by `type`. `NavigationEntryItem` is the former interface
with `type` narrowed to every spec nav type except `'separator'`, and it
keeps its required `label`. `NavigationSeparatorItem` admits `type`,
`id` and `order`, the spec separator's keys, and every other entry key
is `?: never` on it. Those `never` keys are derived from
`NavigationEntryItem`, so a key added there is refused on the separator
without an edit. Both arms are exported from the package root.
`menuItemToNavigationItem` maps a legacy separator to `{ id, type:
'separator' }` and drops its label.
- `spec-derived-unions.test.ts`: the blocker-3 pin
(`_specSeparatorStillHasNoLabel`) is lifted. It is replaced by three
agreement pins. `_separatorAdmitsTheSpecKeys` and
`_separatorAdmitsTheSpecInputKeys` say the separator arm admits exactly
the spec separator's keys at the output and input tiers.
`_localSeparatorIsSpecValid` says the value types of the keys the arm
admits are ones the spec's separator accepts at both tiers. `extends`
ignores extra keys, so the key agreement is carried by the first two:
the third alone passes a labelled arm, and it is vacuous on BASE.
"Admits" means a key whose type is not `never`. The two remaining
blockers (`visible: boolean`, and `pinned` / `defaultOpen`) are
unchanged, and so is the umbrella verdict.
- `@object-ui/types` zod mirror (fix round 1): `NavigationItemSchema`'s
refinement has an explicit separator branch, and it used to return
early, so `objectui validate` passed a separator `label` that the save
door refuses with 422. That branch now refuses every key the spec's
separator does not declare, each at its own path, with a message that
names the key and the fix ("a separator carries only `type`, `id` and
`order`; drop `label`"). The allowed set is read off the spec, not
restated: the spec does not export `SeparatorNavItemSchema`, so it is
taken from the separator arm of the spec `AppSchema`'s own `navigation`
union. That schema already crosses the mirror's import boundary, so the
objectui#8317 population is unchanged. The read throws if the arm is
ever missing, instead of silently allowing everything.
- `@object-ui/plugin-designer`: `AppCreationWizard`'s "Add separator"
and `NavigationDesigner`'s two add paths (now one `newNavItem` helper)
write `{ id, type }`. `NavigationDesigner` no longer writes a `label`
onto a new separator, and its label, icon and visibility patchers skip
one.
- The union makes code that writes an entry-only key onto an unnarrowed
item fail to compile, and each such site now narrows first. None of
these edits changes what renders for valid data.
- `@object-ui/layout`: `resolveNavItemLabel` answers `''` for every
separator. A stored separator carrying a non-empty `label`, which
`menuItemToNavigationItem` produced before this change, used to resolve
to that label. No renderer asks it for a separator's label. The mobile
bottom nav's leaf list, which already skipped separators, is typed as
entries. `collectPinnedItems` tests the type before `pinned`.
- `@object-ui/app-shell`: `useNavPins` registers a favorite only for an
entry and leaves a separator as it is. The Studio sidebar's navigation
walk passes a separator through unchanged.
- Test fixtures that spread an item and add `visible` or
`requiredPermissions` are typed as `NavigationEntryItem`. These are in
layout's `AppSchemaRenderer` and `resolveHref` tests and app-shell's
`UnifiedSidebar.derivedAreaVisibility` test.
**Member 2 — an edit keeps the stored branding.** `EditAppPage` now
merges `branding` one level down, by the objectui#10842 rule. It keeps
every stored key the spec's `AppBrandingSchema` declares, read from
`AppBrandingSchema.shape`, and the wizard's values win for the keys it
maintains. A stored `accentColor` survives the save. A stored key the
spec does not declare is still left out.
**Member 3 — the Layout control is gone.** `AppWizardDraft.layout` is
removed. The Basic Info step's Layout fieldset is removed, with its
three icons and the draft default. `EditAppPage` no longer pre-fills
`layout`. The step description now reads "Name, title, and icon". The
four `appDesigner` layout keys are removed from
`DESIGNER_DEFAULT_TRANSLATIONS` and from all ten locale packs, and
`appDesigner.stepBasicDesc` is retranslated in all ten.
**Text that the change made false:**
- the `app.ts` module header and the `NavigationArea` docblock;
- the `wizardDraftToAppSchema` docblock;
- the `@object-ui/types:NavigationItem` and
`@object-ui/types:NavigationItemSchema` ledger reasons in
`scripts/check-spec-symbol-derivation.mjs` (the second now counts four
divergences, not five);
- the mirror's own `NavigationAreaSchema` docblock, which listed a
separator `label` among the keys only the spec refuses;
- the "separator label" row in `navigation-spec-parity.test.ts`: the
faces now agree, so it left the divergence list and is asserted as an
agreement (both refuse it);
- the ROADMAP line for the wizard's Basic Info step.
**Changesets.**
- New `.changeset/10867-app-wizard-saves-spec-app.md`:
`@object-ui/types` and `@object-ui/i18n` minor (removing published pack
keys is a narrowing), and `@object-ui/plugin-designer`,
`@object-ui/layout` and `@object-ui/app-shell` patch, with the
`Clause-②: yes` line. The BREAKING (authoring) banner names every
consequence, and each was checked against the code at TypeScript 6.0.3
by a throwaway probe:
- a read of `label` into a `string` slot fails (TS2322);
- a spread of an entry-only key fails (TS2322);
- `interface … extends NavigationItem` fails (TS2312);
- an augmentation of `NavigationItem` fails (TS2300);
- `objectui validate` refuses a separator `label`;
- `t()` on a removed key renders the raw key unless the call passes a
`defaultValue`. The provider-less fallback is the defaults table, then
`defaultValue`, then the key, and i18next is configured with
`returnNull: false` and no missing-key parser.
- Dated notes in the objectui#10533 form on two pending entries.
- `10842-wizard-app-declared-keys.md`, titled "the wizard has no layout
choice": its "the wizard's layout choice is not saved" has no choice
left. Frontmatter md5 `5b8e68791c8bc51ef72179570fd15a1c` before and
after.
- `3162-types-ledger-batch8-verdicts.md`: its "three semantic blockers"
count. Frontmatter md5 `2ee28f1e1b449ccc2dd97fdcc6c2bc1f` before and
after.
**Fixture triage:**
- The `layout` key was dropped from the `AppWizardDraft` fixtures in
`app-creation-types`, `app-declared-keys-10842` and
`app-logo-one-spelling-10827`. These are spelling fixes: the key was
there only because the type required it.
- The vacuous `'layout' in schema` assertion in `app-creation-types`
"should handle draft with empty navigation" was removed.
- `navigation-model`'s "should convert a separator" pinned the removed
`label: ''` branch, so it was replaced by an exact-shape assertion.
- The `label: ''` was dropped from separator fixtures in
`navigation-model`, layout's `AppSchemaRenderer.test` and app-shell's
`phase1-page-blocks.render.test`.
## H1 to H3 (measured on BASE `b93e245f9`, installed `@objectstack/spec`
17.4.0)
**H1 — reproduced.** A probe run through `wizardDraftToAppSchema`, then
the spec's `AppSchema.safeParse`:
- a draft with one object entry plus the separator the wizard wrote, `{
id, type: 'separator', label: '' }`, gave
`[{"code":"unrecognized_keys","path":"navigation.1","keys":["label"]}]`;
- control, the same draft without the separator: parses green;
- control, the same separator without `label`: parses green;
- `menuItemToNavigationItem({ type: 'separator', label: 'Section' })`
gave `{"id":"migrated_0","type":"separator","label":"Section"}`.
The new DOM pin gives the same reading through the real wizard and
`CreateAppPage` on the base source: "the saved document parses green
through the spec `AppSchema`" fails with `unrecognized_keys` `["label"]`
at `navigation.1`.
**H2 — reproduced.** The new pin "a stored `accentColor` survives the
edit round trip" drives the real wizard through `EditAppPage`. On the
base source it fails: the saved `branding` is `{ favicon, logo,
primaryColor }`, and `"accentColor": "#f59e0b"` is missing.
**H3 — census** (`git grep` over packages, apps, docs, examples, skills
and content). Each hit goes or is corrected:
- **`AppWizardDraft.layout` and the draft default:**
- the member in `app.ts` — removed;
- `DEFAULT_DRAFT.layout` in `AppCreationWizard` — removed;
- `EditAppPage`'s `layout: appToEdit.layout || 'sidebar'` pre-fill —
removed;
- four draft fixtures — the key dropped (see the triage above).
- **The step's UI:** the Layout fieldset (`app-layout-*` test ids,
`draft.layout` reads and writes) and its three icon imports — removed.
- **The step's strings:**
- `appDesigner.layout`, `layoutSidebar`, `layoutHeader` and
`layoutEmpty` in `DESIGNER_DEFAULT_TRANSLATIONS` and in ten locale packs
— removed;
- `appDesigner.stepBasicDesc` ("Name, title, and layout") in eleven
places — corrected.
- **Docs:** the ROADMAP Basic Info line — corrected.
`content/docs/guide/console.md` and `console-architecture.md` describe
the wizard's four steps and never the Layout control, so they are
unchanged.
- **Not this member:** the `layout: 'sidebar'` hits in
`content/docs/core/app-schema.mdx`,
`content/docs/guide/schema-overview.md`, the runner tests and the
`AppComponentSchema` fixtures are `AppComponentSchema.layout`, the
renderer node's own layout strategy. They are untouched, and the
changeset says so.
## Pins and ablation
New pins:
-
`packages/types/src/__tests__/app-wizard-separator-layout-10867.test.ts`:
vitest halves, and `@ts-expect-error` / `satisfies` halves run under
`tsc -p tsconfig.test.json`.
-
`packages/plugin-designer/src/__tests__/AppWizard.specDocument-10867.test.tsx`:
drives the real `AppCreationWizard` through `CreateAppPage` and
`EditAppPage` and reads what reaches `saveItem`.
- The `spec-derived-unions.test.ts` agreement pins.
- Fix round 1:
`packages/types/src/__tests__/nav-separator-mirror-refusal-10867.test.ts`.
`safeValidateSchema`, the strict authoring face
(`StrictAnyComponentSchema`) and the mirror itself each refuse a
separator `label`, each at its own path; the mirror also refuses `icon`
and `pinned` on a separator. Controls: a bare `{ id, type: 'separator'
}` (and one with `order`) is accepted by both faces and the spec, the
spec refuses the same `label`, and an entry keeps its `label`.
- Fix round 1: a new `EditAppPage` row, "a logo the author clears saves
as cleared, not as the stored value". It is a guard, not a red-on-BASE
pin: green on BASE and on HEAD, it fails if a later tidy-up drops empty
strings from the merge.
**Red on BASE.** Run from a committed tree: the source files were
checked out at BASE, the new pins kept, and everything was restored from
`HEAD` under a trap. The restore was proven by blob hash equal to HEAD
and an empty `git diff HEAD`.
- vitest `Tests 8 failed | 6 passed (14)`. The 8 failures are every
non-control row:
- `menuItemToNavigationItem`;
- the two create-with-separator rows;
- the three branding rows;
- the two Layout rows.
- The 6 passes are the controls and compile-only rows.
- `tsc -p tsconfig.test.json` in `packages/types` gives the new pins':
- TS2741 ×2 (a bare separator is missing `label`);
- TS2578 ×2 (unused `@ts-expect-error` for a labelled separator and for
a draft with `layout`);
- TS1360 ×3 (the no-`layout` `satisfies` and the two separator-agreement
pins).
**Red before the mirror fix (round 1).** From the committed round-1
head, only `app.zod.ts` was checked out at the round-0 head `e2493c796`,
under a trap; the restore was proven blob == HEAD and `git diff HEAD`
empty. The new mirror pins plus `navigation-spec-parity` gave vitest
`Tests 4 failed | 17 passed (21)`. The 4 failures are the refusal rows
and the new agreement row; the controls passed.
**Green on HEAD.** Round 0, at `e2493c796`: `Test Files 284 passed
(284)`, `Tests 5676 passed (5676)`. Round 1, at `2c19f3047`: see Gates.
The `packages/types` `tsc -p tsconfig.test.json` has 0 errors at both
heads.
**Ablation: the separator branch is reverted, and only the separator
rows redden.** Three anchored mutations went through
`ablation-replace.mjs`, each proven landed and restored by blob hash:
- the `NavigationItem` alias gives its separator arm a required `label`
again;
- `menuItemToNavigationItem` writes `label` again;
- the wizard's add-separator writes `label: ''` again.
Result:
- vitest `Tests 3 failed | 11 passed (14)`. The failures are
`menuItemToNavigationItem`, "the saved document parses green" and "the
saved separator carries only `type` and `id`". The branding and Layout
rows stay green.
- `tsc -p tsconfig.test.json`: 5 errors, all on separator lines. TS2322
×2 (bare separators), TS2578 ×1 (labelled separator) and TS1360 ×2 (the
two agreement pins). The Layout type pin stays green.
- Restore: `blob == HEAD` and `git diff HEAD` empty for both files.
**Cross-package reverse check.** The downstream type-checks resolve
`@object-ui/types` through its rebuilt `dist`. Their first runs went red
only on sites the new union refuses: layout 3, plugin-designer 4,
app-shell 3 in source plus 4 in tests. They were green after narrowing.
That red could only come from the rebuilt declaration.
## Gates
Fix round 1, at `2c19f3047`, all under the verify lock:
- vitest `packages/types/`, `packages/plugin-designer/` and
`packages/i18n/`: `Test Files 356 passed (356)`, `Tests 6861 passed
(6861)`.
- vitest over the 18 app-shell navigation, pins and sidebar files,
`examples/schema-catalog/test/`, the two cli `validate` suites and the
three spec-symbol script suites: `Test Files 57 passed (57)`, `Tests
2487 passed (2487)`.
- **Arm-list consumer sweep** for the mirror change. Every test that
imports `NavigationItemSchema` or the app zod mirror, or runs
`safeValidateSchema` / `StrictAnyComponentSchema` over an app or
navigation document, was found by `git grep` and run with per-file
verdicts: 34 files, 1251 tests, 0 failed. They include
`zod-mirror-parity` 37/37, `navigation-spec-parity` 15/15,
`imported-defaults-8317` 124/124, `nav-target-exclusivity-8563` 15/15,
`navigation-model` 28/28, `zod-lazy-getter-identity-7918` 31/31,
`page-nav-misc-spec-parity` 44/44, `handler-keys-json-refusal-6124`
336/336, the two app-shell studio-design nav suites 22/22 and 3/3, cli
`validate-root-path-line` 6/6 and the catalog
`tree-view-nodes-mirror-6939` 22/22.
- `tsc -p packages/types/tsconfig.test.json`: 0 errors.
`@object-ui/types` `type-check`: 0 `error TS`.
`@object-ui/plugin-designer` `type-check`, after rebuilding its closure:
clean.
- Changeset gates:
- `check-changeset-presence` ✅;
- `changeset:check` ✅ (no `major`);
- `check:changeset-claims` (report-only) lists 15 pending entries naming
a touched file; the six new ones (4895, 6335, 7113, 7735, 7918 and 8871)
were read, and none claims anything a separator refusal falsifies;
- `check-changeset-overwrite` (report-only): the two dated-note edits;
- `check:pending-changeset-literals` ✅.
- Other gates: `check:control-bytes` OK, `check:new-line-citations` 0
new, `check:spec-symbols` ✅, the three i18n gates ✅,
`type-check:coverage` ✅.
- Round 1 changed no exported type and no layout, app-shell or console
source, so the round-0 downstream type-checks below still describe this
head.
Round 0, at `e2493c796` unless noted:
- `pnpm exec vitest run packages/types/ packages/plugin-designer/`:
`Test Files 284 passed (284)`, `Tests 5676 passed (5676)`.
- `pnpm --filter` `@object-ui/types`, `@object-ui/layout`,
`@object-ui/plugin-designer` and `@object-ui/app-shell` `run type-check`
(each `tsc --noEmit && tsc -p tsconfig.test.json`; types also runs
`tsconfig.examples.json`): verify-lock `VERDICT command-exit 0`.
- `@object-ui/console` `type-check` after rebuilding its dependency
closure: exit 0, 0 `error TS`.
- vitest `packages/layout/` and `packages/plugin-designer/` (after the
narrowing): `Tests 436 passed (436)`.
- vitest `packages/i18n/`, app-shell `defaults-maps-mirror-en-pack`,
`phase1-page-blocks.render` and layout `AppSchemaRenderer`, plus the
`check-spec-symbol-derivation`,
`spec-symbol-ledger-anchor-liveness-9537` and
`spec-symbol-ledger-types-7265` script suites: `Tests 1354 passed
(1354)`.
- 17 app-shell files covering pins, favorites, the sidebar and nav
fixtures: `Tests 160 passed (160)`.
- Changeset gates:
- `check-changeset-presence` ✅ (5 released packages, 1 changeset);
- `changeset:check` ✅ (no `major`);
- `check:changeset-claims` (report-only): 9 pending entries name a
touched file, and each was read — none is falsified;
- `check-changeset-overwrite` (report-only): lists the two dated-note
edits;
- `check:pending-changeset-literals` ✅.
- i18n gates: `check:i18n-keys` ✅, `check:i18n-drift` ✅ ("Every changed
en value was followed by all nine translation packs"),
`check:i18n-designer-parity` ✅.
- Other gates:
- `check:spec-symbols` ✅;
- `check:control-bytes` OK;
- `check:new-line-citations`: `VERDICT new-cross-file-line-citations: 0
new citation(s)`;
- `type-check:coverage` ✅ (43/43);
- `check:test-path-roots` OK;
- `check:vi-mock-specifiers`, `check:vi-mock-inherit` and
`check:vi-mock-override-shape` OK;
- `check:metadata-write-doors` OK;
- `check:unreferenced-sources` OK;
- `check:handler-key-reads` OK.
- ESLint on the 34 changed `.ts` / `.tsx` / `.mjs` files (repo config,
inline config honoured): 0 errors and 47 warnings. Each warned file
carries the same warning count at BASE, measured by linting the BASE
blob through `--stdin`, so no warning is new. The repo-wide `pnpm lint`
is CI's.
- NOT MEASURED:
- the full app-shell suite, because it runs past the foreground cap;
declared to CI;
- `check:readme-exports` for the unbuilt `@object-ui/cli` and
`@object-ui/plugin-ai` READMEs, which are untouched here. Its judged
population read 548 self-imports and 0 fabricated.
- Scheduling: two light runs (the red-on-BASE pair) went outside the
verify lock. The lock was held for more than 20 minutes by a sibling's
full app-shell suite, and this is declared as a narrowing. Every build,
suite and type-check above ran under the lock.
## Serial
- Open PRs read at 2026-09-28T03:3xZ: #10888, #10886, #10884, #10852,
#10780, #10777, #10714 and #10278, plus the release PR. None of their
file lists intersects this diff.
- `origin/main` has moved to `b2683a2c0` since BASE. `git merge-tree
--write-tree` against it is clean. Of the files main moved, only `en.ts`
overlaps, on other keys. No file main moved mentions `NavigationItem`,
`AppWizardDraft` or the removed keys.
## Acceptance notes
- **The zod twin, corrected in fix round 1.** Round 0 read the claim's
"if the mirror carries the separator branch" as not met, because the
mirror is one flat object. The contract review measured that the
refinement does have an explicit separator branch, so the condition
held, and the mirror now refuses what the TypeScript face refuses (see
What changed).
- **Boundary note, not taken: pre-17 tombstones.** Dropping the spec's
tombstone keys from `EditAppPage`'s kept set would make the save succeed
silently and lose the author's value. The spec's current loud refusal
carries a prescription, so this is left as it is.
- **Boundary note, not taken: `BrandingConfig.fontFamily`.**
`BrandingEditor` reads and writes it, and removing it is not a cheap
change inside these files.
- **`AppComponentSchema.layout` is untouched.** It is a different
member, the renderer node's layout strategy.
- **An edit through the wizard drops stored navigation** (found while
pinning member 2; not fixed here; the seat is filing it as its own card,
and the review confirmed this PR does not make it worse). Leaving the
Objects step regenerates `navigation` from the selected objects
unconditionally. In edit mode that replaces the stored tree, so
separators, groups, URL entries and dashboards are lost on every save.
Measured with a throwaway probe through `EditAppPage` and the real
wizard: a stored `[object, separator, group with a dashboard child,
url]` saved as `[object]` only.
---
_Generated by [Claude
Code](https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent c30c8dd commit 7343376
40 files changed
Lines changed: 718 additions & 220 deletions
File tree
- .changeset
- packages
- app-shell/src
- hooks
- layout
- __tests__
- views/__tests__
- i18n/src/locales
- layout/src
- __tests__
- plugin-designer/src
- __tests__
- hooks
- pages
- types/src
- __tests__
- zod
- scripts
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 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 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
673 | 673 | | |
674 | 674 | | |
675 | 675 | | |
676 | | - | |
| 676 | + | |
677 | 677 | | |
678 | 678 | | |
679 | 679 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
64 | | - | |
| 64 | + | |
| 65 | + | |
65 | 66 | | |
66 | 67 | | |
67 | 68 | | |
| |||
108 | 109 | | |
109 | 110 | | |
110 | 111 | | |
| 112 | + | |
| 113 | + | |
111 | 114 | | |
112 | 115 | | |
113 | 116 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
410 | 410 | | |
411 | 411 | | |
412 | 412 | | |
413 | | - | |
| 413 | + | |
414 | 414 | | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
415 | 418 | | |
416 | 419 | | |
417 | 420 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
| 24 | + | |
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| |||
117 | 117 | | |
118 | 118 | | |
119 | 119 | | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
120 | 125 | | |
121 | 126 | | |
122 | 127 | | |
123 | | - | |
| 128 | + | |
124 | 129 | | |
125 | 130 | | |
126 | 131 | | |
127 | 132 | | |
128 | 133 | | |
129 | | - | |
| 134 | + | |
130 | 135 | | |
131 | 136 | | |
132 | 137 | | |
| |||
137 | 142 | | |
138 | 143 | | |
139 | 144 | | |
140 | | - | |
| 145 | + | |
141 | 146 | | |
142 | 147 | | |
143 | 148 | | |
| |||
183 | 188 | | |
184 | 189 | | |
185 | 190 | | |
186 | | - | |
| 191 | + | |
187 | 192 | | |
188 | 193 | | |
189 | 194 | | |
| |||
217 | 222 | | |
218 | 223 | | |
219 | 224 | | |
220 | | - | |
| 225 | + | |
221 | 226 | | |
222 | 227 | | |
223 | 228 | | |
| |||
245 | 250 | | |
246 | 251 | | |
247 | 252 | | |
248 | | - | |
| 253 | + | |
249 | 254 | | |
250 | 255 | | |
251 | 256 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
107 | 107 | | |
108 | 108 | | |
109 | 109 | | |
110 | | - | |
| 110 | + | |
111 | 111 | | |
112 | 112 | | |
113 | 113 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1327 | 1327 | | |
1328 | 1328 | | |
1329 | 1329 | | |
1330 | | - | |
1331 | | - | |
1332 | | - | |
1333 | | - | |
1334 | 1330 | | |
1335 | 1331 | | |
1336 | 1332 | | |
| |||
1365 | 1361 | | |
1366 | 1362 | | |
1367 | 1363 | | |
1368 | | - | |
| 1364 | + | |
1369 | 1365 | | |
1370 | 1366 | | |
1371 | 1367 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1307 | 1307 | | |
1308 | 1308 | | |
1309 | 1309 | | |
1310 | | - | |
1311 | | - | |
1312 | | - | |
1313 | | - | |
1314 | 1310 | | |
1315 | 1311 | | |
1316 | 1312 | | |
| |||
1345 | 1341 | | |
1346 | 1342 | | |
1347 | 1343 | | |
1348 | | - | |
| 1344 | + | |
1349 | 1345 | | |
1350 | 1346 | | |
1351 | 1347 | | |
| |||
0 commit comments