Commit a51fa0c
feat(core)!: retire the bare-string
Fixes #4356
Clause-②: yes — published runtime behaviour is removed (the bare-string
lift, and the exported `resetDashboardFilterWarnings` if it retires with
its memo), per the execution parameters in `5511028727`.
The claim's "if" resolved to **stays**: the memo survives (it now
dedupes the dropped-member warning, see "The audible-skip question"), so
`resetDashboardFilterWarnings` keeps its job and its export; the
changeset names no removed export.
Final head `a890654027a69911412efbcb146e326da8476256`. Commits on this
branch since the branch point `733fd5ac6`: `bc4ea976e` (the retirement),
`98623a24d` (rework round 1: W1–W3), `e0647486b` (patch round 2: W5),
the two merges of `origin/main` (`1daf7edf7` at `29c76e573`, `a1058f90e`
at `2eaf5be27`), and `a89065402` (W4, the dated note). Implemented in
session `session_012UwY3ahMixEFkfTUxMVkYm`.
## What changed
Phase 2 of objectui#4356 — the runtime bare-string
`globalFilters[].options` lift retires.
- `packages/core/src/utils/dashboard-filters.ts` — in
`normalizeFilterOptions`, the non-object arm no longer pushes `{ value:
String(o), label: String(o) }`. A member that is not an object (string,
number, boolean) yields NO option: a shorthand-only filter resolves with
no `options`, a mixed array keeps only its object members. The nullish /
value-less skips are unchanged. The Phase 1 deprecation warning
(`warnShorthandOptions`, whose text said "Still lifted here") is
deleted; a dev-mode, once-per-filter `warnDroppedShorthandOptions` names
the filter, the dropped members and the rewrite, and promises no lift.
The `DashboardFilterDef.options` JSDoc, the `normalizeFilterOptions`
docblock, the memo docblock and the `resetDashboardFilterWarnings`
docblock stop describing a lift. No lift, alias, fallback or migration
is added anywhere.
- `packages/core/src/utils/__tests__/dashboard-filters.test.ts` — every
lift-pinning test is flipped to pin the new contract (red-first, quoted
under Tests): `normalizes options: spec {value,label} objects AND
bare-string shorthand` became `normalizes spec {value,label} objects,
and DROPS a bare-string member rather than lifting it`; the `[#4356]`
describe is `retired: dropped, not lifted` — a shorthand-only filter
yields no `options`; a mixed array keeps only its object members; a
number and a boolean are dropped too; warn ONCE across renders while
dropping on every render; a different filter warns separately; canonical
`{ value, label }` options and an `I18nLabel` map are untouched and
silent; `resetDashboardFilterWarnings` re-arms the memo. The stale Phase
1 header above the block is removed (W3).
- `content/docs/guide/dashboard-filters.md` — the "Deprecated: … still
lifted by the runtime" callout became false and now reads "Not
accepted": refused at publish, no longer lifted, a bare-string member
yields no option, rewrite `"X"` as `{ "value": "X", "label": "X" }`. No
fenced block changed.
- `packages/types/src/zod/complex.zod.ts` — the JSDoc of the exported
`GlobalFilterSchema` said the runtime "still LIFTS a stored bare-string
option on read"; that sentence ships in `@object-ui/types`' emitted
declarations and is corrected in place. Outside the claim's original
surface; accepted by the seat's addendum, see "Deviations".
- `packages/plugin-dashboard/README.md` (W1, ships in that package's
`files`) — the `globalFilters` example's `options` comment no longer
says a stored bare string "is still lifted at runtime, and warns"; it
says NOT accepted, the runtime no longer lifts it (objectui#4356), a
bare member yields no option, a dev-mode warning names it, rewrite each
X as `{ "value": X, "label": X }`.
- Three test docblocks state the retirement instead of the lift (W2):
`packages/types/src/__tests__/dashboard-global-filters-spec-binding.test.ts`,
`packages/types/src/__tests__/report-chart-query-spec-parity.test.ts`
(its header docblock only — nothing near objectui#10916's
`JoinedReportBlock` pin, which PR #10934 rewrote and this branch has
merged),
`packages/plugin-dashboard/src/__tests__/DashboardRenderer.filters.test.tsx`.
A fourth (W5),
`packages/plugin-dashboard/src/__tests__/DashboardFilterBar.i18nLabel.test.tsx`,
no longer says the shorthand "is deprecated and now warns" nor names the
renamed lift pin; it names the current DROP pin. No assertion moved in
any of the four.
- `.changeset/retire-options-shorthand-lift-4356.md` — `@object-ui/core:
minor`, opening with the ruled wording: "bare-string
`globalFilters[].options` is no longer lifted; use `{ value, label }`
objects, the spec's form". Never `major` (AGENTS.md §9 version policy:
the break is stated in the body, the bump stays `minor`);
`check-changeset-no-major` exit 0.
- `.changeset/7759-dashboard-header-global-filters-spec.md` (W4) — a
dated note appended, nothing else touched. That pending entry says "The
runtime is unchanged too: `@object-ui/core` still converts a STORED
bare-string option into a pair when it reads the document, and logs a
deprecation warning. That conversion keeps its own retirement schedule
(objectstack#7917)." — a sentence this PR makes false in the same
release. The note (PR #10891 form, dated 2026-09-29) says which
sentences no longer hold and what ships. Authorised by the maintainer's
ruling of 2026-09-29, option 「Allow the appended note (Recommended)」,
recorded on the card as `5883360525`; the option reads, verbatim: "You
allow developers to append dated correction notes to pending .changeset
files (appended only, no existing line or frontmatter edited). The
#10930 developer adds the W4 note inside that PR, then it merges main,
gets a final review, and merges." Measured: 16 insertions, 0 deletions;
frontmatter md5 `ac1bfd0472c0d0b981d923c32d435f18` before and after;
whole-file md5 `94edd5855709afe137f9184c630f298c` →
`5c8f0508bed5ed6f5b76254bb74d622d`; 0 angle-bracket characters; `diff`
against `origin/main` shows only the appended block.
Untouched on purpose:
`examples/schema-catalog/test/plugin-dashboard-global-filters-spec.test.ts`
(the `GlobalFilterSchema` catalog guardrail from PR #4601 — the positive
control; its docblock narrates history and spec facts only, and stays
true); the assertions of the two `packages/types` tests that pin the
SPEC's refusal of `options: ['EMEA']` (rejection pins, not lift pins);
`@objectstack/spec`; `content/docs/releases/**`; `skills/**` (no file
there becomes false — measured below).
## Rulings executed
- objectstack-ai/objectstack#7917, maintainer 2026-08-12, verbatim 「7917
②」 — the spec stays strict; the runtime bare-string lift retires.
- Maintainer, 2026-09-02, verbatim 「objectstack#7917 不考虑现有数据」 (director
release `5511028727` on objectui#4356) — Phase 2 on release cadence
alone; no live-tenant survey, no migration entry.
- Maintainer direct dispatch to the `domain:spec @ objectui` seat,
verbatim 「这个你也接管继续
#4356」.
- Maintainer, 2026-09-29, 「Allow the appended note (Recommended)」 (card
comment `5883360525`) — authorises the W4 append in exactly the form
landed here.
## The audible-skip question — governing text found
The dispatch asked whether any governing text requires the post-removal
skip to be audible. What was read, verbatim:
- objectstack `AGENTS.md`, "Degradation log levels — `warn` vs `error`":
"**Functional degradation → `warn` / `info`.** A screen is missing, a
trigger is not armed, a capability is not enabled … The system is
*visibly* smaller than it should be, and the next person to use the
missing thing finds out." and "**prefer failing to falling back**, and
when you must fall back, say what was lost." — A `select` filter whose
members were all bare strings now renders with an empty option list
(`DashboardFilterBar`: `const authored = def.options?.length ?
def.options : (dynamicOptions ?? [])`): visibly smaller, functional,
`warn`-level — and "say what was lost" is the operative sentence.
- objectstack `docs/adr/0078-no-silently-inert-metadata.md`, §4
"Loud-not-silent at the runtime seam": "Where the runtime *skips* an
inert instance … it emits a **dev-mode diagnostic** at registration
rather than swallowing it silently. This is the only layer that is
**authoring-tool-agnostic**". The ADR's completeness gate (§1) is about
Zod-VALID instances and a bare string is Zod-invalid, but §4 is exactly
the case here: a STORED dashboard is the one document no author-time
gate re-reads.
- objectui `AGENTS.md`: no clause on audibility; #0.1 (contract-first,
no lenient fallback) is honoured — a diagnostic is not a fallback, and
nothing is lifted.
- The module's own convention, same file: `buildFilterCondition` —
"anything else → skipped with a console warning, never silently
downgraded"; `buildWidgetScopedFilter` skips an unknown default field
"with a console warning instead of emitting a query".
Conclusion: yes, at `warn`, dev-mode, deduped — the smallest audible
path consistent with the ruling. Implemented as
`warnDroppedShorthandOptions`: same `isDev()` gate and memo key as Phase
1 (no per-render flood), new sentence (DROPPED, "no longer lifted", the
rewrite), no lift. Consequence: the memo and therefore
`resetDashboardFilterWarnings` stay. The contract review (`5866198610`)
judged this RIGHT; dev-only rather than always-on is the same review's
answer for this PR.
## Measurements against the dispatch's mechanism assumptions
1. Lift live on `origin/main` `733fd5ac6` — confirmed: the `else` arm
pushed `{ value: String(o), label: String(o) }` and called
`warnShorthandOptions` for EVERY non-nullish primitive. Pinned now in
`drops EVERY non-object member — a number and a boolean, not only a
string`.
2. `resetDashboardFilterWarnings` — `git grep` repo-wide: importers are
`dashboard-filters.test.ts` only (plus a `packages/core/CHANGELOG.md`
paragraph); it clears only `warnedShorthandOptions`. The inference "with
the memo gone it has no job" is falsified by (4): the memo does not go.
It stays, with a docblock saying why.
3. Fixture recount, repo-wide over every file containing `globalFilters`
(tests included; positive control: the same matcher found the callout it
was meant to find): lift-pinning bare-string members existed only in
`dashboard-filters.test.ts` — six members across five tests (the
dispatch's list lacked the bare `'lost'` of the mixed-array test; the
director's "three" and the dispatch's "five" were both stale). All six
retired or flipped. The two `packages/types` occurrences pin the spec's
REFUSAL and keep their assertions.
4. Skip audibility — see the section above.
5. Teaching sites — swept at the final head with `git grep -n -i -E
'lift' -- ':!**/CHANGELOG.md' ':!content/docs/releases/**'
':!pnpm-lock.yaml' | grep -i -E 'shorthand|bare[- ]string|4356'` over
the whole tracked tree (a superset of every package's `files[]`,
`content/docs`, `skills/`, `examples/`): 20 hits on `bc4ea976e` with
`packages/plugin-dashboard/README.md`'s "still lifted at runtime" line
as the found positive control; 18 on `a89065402` — every hit either
states the retirement (this PR's changeset, source, docs and test text)
or is the unrelated `data`-array shorthand in `plugin-grid` /
`plugin-map`. The first-round sweep's `option|filter` post-filter is
what hid the README line (W1) and the `i18nLabel` comment (W5); the
rework sweep has no post-filter. When the sweep runs on a ref, the ref
prefix is stripped before the second grep — this branch's name contains
both "shorthand" and "lift". Three other sites author `options: ['…']`
on `select` FIELDS (form / object field schemas:
`content/docs/guide/expressions.md`,
`content/docs/guide/schema-playground.md`,
`skills/objectui/guides/project-setup.md`) — a different contract, out
of this card, untouched; the governed `skills/**` file does not become
false.
6. Release — `packages/core/package.json` is `17.6.0`;
`.changeset/config.json` has `@object-ui/core` in the `fixed` group; a
`minor` changeset makes the next release ≥ 17.7.0; release PR #5400 is
open (not touched).
7. Pending changesets — swept on the merged tree (2326 pending entries)
with `git grep -n -i -E 'normalizeFilterOptions|bare[-
]string|shorthand|lift' -- '.changeset/*.md'` filtered to option /
`globalFilters` / 4356 / 7917 context: exactly ONE pending sentence this
PR makes false, the `7759` paragraph quoted above (W4). Its earlier
sentence "the bare-string option shorthand (`options: ['EMEA']`) is
refused with `invalid_type`" stays true. Every other hit is a different
contract (export-options bare array, object-map / gantt `data` arrays,
kanban `columns`, picklist / field `options`, widget shorthand). The
nine entries the `changeset-claim-re-read` comment `5865883972` lists
were re-read: none says anything about the options lift; all still true.
## Merges of `main`
- `1daf7edf7` — `origin/main` `29c76e573` (PR #10934, objectui#10916).
No conflicts; `report-chart-query-spec-parity.test.ts` auto-merged
(disjoint hunks); both sides verified — my header-docblock correction
present, PR #10934's pin text byte-for-byte as `main` has it.
- `a1058f90e` — `origin/main` `2eaf5be27` (70 commits, among them PR
#10914's citation edits in `dashboard-filters.ts` and three
`complex.zod.ts` commits). No conflicts; after the merge the files
differing from `origin/main` are exactly this PR's ten, and `git diff
origin/main` on `complex.zod.ts` and on the parity test is exactly this
PR's docblock hunks.
No rebase, no amend, no force-push at any point; every push was a plain
`git push`.
## Tests
Red-first (at `bc4ea976e`, the new pins against the UNTOUCHED source,
`pnpm exec vitest run
packages/core/src/utils/__tests__/dashboard-filters.test.ts`, exit 1):
```text
× normalizes spec {value,label} objects, and DROPS a bare-string member rather than lifting it (objectui#4356)
× DROPS a bare string: a shorthand-only filter resolves with no `options`, and says so
× keeps ONLY the object members of a MIXED array, and names only the dropped ones
× drops EVERY non-object member — a number and a boolean, not only a string
× warns ONCE per offending filter across repeated renders, and drops on every one of them
AssertionError: expected [ …(2) ] to be undefined
AssertionError: expected [ Array(2) ] to deeply equal [ { value: 'won', label: 'Won' } ]
AssertionError: expected [ { value: '42', label: '42' }, …(2) ] to deeply equal [ { value: 'gold', label: 'Gold' } ]
Test Files 1 failed (1)
Tests 5 failed | 44 passed (49)
```
The three that stayed green on the old code are the ones the block
labels as non-discriminating (different-filter memo, canonical silence,
memo reset). Green after the source change, same command: `Tests 49
passed (49)`.
Final head `a89065402`, one `pnpm exec vitest run` from the repo root
under the shared verify lock over `packages/core/` plus the two
`packages/types` global-filter tests and the two `plugin-dashboard`
dashboard-filter tests this PR touched: `Test Files 188 passed (188)` ·
`Tests 3725 passed | 27 skipped (3752)`, exit 0. The changeset script
tests (`check-changeset-{presence,no-major,fixed,overwrite,claims}`,
`check-pending-changeset-literals`, `changeset-polarity-census`): `Test
Files 7 passed (7)` · `Tests 292 passed (292)`, exit 0.
Consumer sweep at `bc4ea976e` (`resolveDashboardFilterDefs` consumers
re-derived by `git grep`: `core`, `types`, `plugin-dashboard`,
`plugin-designer`, `app-shell`, `examples/schema-catalog`), exit 0:
`packages/core` 182 files / 3643 tests; `packages/plugin-dashboard` 147
/ 1346 (6 pre-existing skips); `packages/types` 3 / 58;
`packages/plugin-designer` (`DashboardDesignPage.presetAlias`) 1 / 4;
`packages/app-shell` (`DashboardWidgetInspector.test.tsx`) 1 / 19;
`examples/schema-catalog` (the guardrail) 1 / 9 — totals `335 passed
(335)` · `5073 passed | 6 skipped (5079)`. No consumer fixture asserted
the old lift. The code has not changed since that head (every later
commit is prose or a merge), and the final-head run above re-covers
`core`, `types` and the touched `plugin-dashboard` tests.
## Gates on the final head `a89065402` (hand-derived from root
`package.json` and `.github/workflows/`; exit codes captured before any
pipe)
| gate | exit | note |
|---|---|---|
| `pnpm --filter '@object-ui/core^...' build` then `pnpm --filter
@object-ui/core build` | 0 / 0 | dependency closure first, so the
type-checks read rebuilt declarations |
| `pnpm --filter @object-ui/core type-check` · `pnpm --filter
@object-ui/types type-check` | 0 / 0 | |
| `pnpm --filter @object-ui/core lint` · `pnpm --filter @object-ui/types
lint` | 0 / 0 | 0 errors; the warnings are pre-existing
`no-explicit-any` — on the touched files the `as any` counts equal the
base (2 / 10 / 0), unchanged since `bc4ea976e` |
| vitest `packages/core/` + the four touched dashboard-filter tests
(under the lock) | 0 | 188 files, 3725 passed, 27 skipped |
| vitest changeset script tests ×7 | 0 | 292 passed |
| `node scripts/check-changeset-presence.mjs` | 0 | 11 files changed vs
merge-base `2eaf5be27`, 7 published source files of 3 released packages,
1 changeset added |
| `node scripts/check-changeset-no-major.mjs` ·
`check-changeset-fixed.mjs` · `check-changeset-claims.mjs` ·
`check-changeset-overwrite.mjs` | 0 ×4 | claims and overwrite are
report-only; the W4 append is overwrite's documented "correcting a
declaration on purpose" case |
| `pnpm check:pending-changeset-literals` | 0 | "No test source names a
pending changeset" |
| `node scripts/check-control-bytes.mjs` | 0 | 9331 tracked text files |
| `node scripts/check-new-cross-file-line-citations.mjs` | 0 | 0 new
citations (the W4 note cites by quoted sentence) |
| `node scripts/check-governed-queue-guard.mjs --test` (every touched
path) | 0 | NOT GOVERNED |
| `pnpm check:doc-fences` · `check:doc-types` · `check:doc-example-ids`
· `check:spec-symbols` · `node scripts/check-doc-links.mjs` ·
`check:test-path-roots` · `check:vi-mock-specifiers` ·
`check:phantom-deps` | 0 ×8 | measured at `bc4ea976e` / `98623a24d`; the
files they read have not changed since |
| `pnpm check:doc-snippets` · `pnpm check:readme-exports` | 2 / 1 | NOT
MEASURED locally — both `PRECONDITION NOT MET` (unbuilt packages); CI's
Doc Snippet Type Check and README Exports are the readings. The docs
hunk changes no fenced block; the README hunk is a JSON comment with no
import binding |
Not run locally, CI-owned: repo-wide `pnpm lint`, `pnpm test`, `pnpm
type-check` (the public type face is unchanged — no export added or
removed, no signature changed; emitted declarations differ in JSDoc text
only), `pnpm check`, the i18n gates, `plugin-dashboard`'s own type-check
(comment-only hunks in two test files).
## Deviations
- `packages/types/src/zod/complex.zod.ts` was outside claim
`5865368364`'s original file surface; edited under the bounded
in-place-fix exemption (same defect class; mechanical; no other open PR
on the file; inside core's type-checked closure) and accepted by the
seat's addendum `5865980488`. The later addenda `5866223135`,
`5866346457`, `5866480991` added the W1–W5 files and the `7759`
changeset.
- The first-round teaching sweep under-reported (W1, W5) because of its
`option|filter` post-filter; corrected above.
- The W4 append was first refused by the auto-mode classifier ("Modify
Shared Resources", record `5866443287`), held and not re-routed; it
landed only after the maintainer's 2026-09-29 ruling.
## Acceptance notes
- `warnDroppedShorthandOptions` is dev-only, exactly as the Phase 1
warning was; the module's other skip warnings are not dev-gated.
Always-on is a one-line product decision the review left to the
maintainer; not this PR's.
- Field-level `select` schemas teaching `options: ['…']` are a different
contract and were not judged here — observation only, not filed.
- `packages/core/CHANGELOG.md` and
`packages/plugin-dashboard/CHANGELOG.md` narrate the lift as history;
published record, not re-addressed (the CHANGELOG clause under AGENTS.md
#11: never re-address a paragraph in a published CHANGELOG).
- PR #10914 (objectui#10803 batch 6) has landed on `main` and is merged
into this branch; no other open PR touches this PR's files.
---
_Generated by [Claude
Code](https://claude.ai/code/session_012UwY3ahMixEFkfTUxMVkYm)_
---------
Co-authored-by: Claude <noreply@anthropic.com>globalFilters[].options lift (objectui#4356) (#10930)1 parent 49f7672 commit a51fa0c
11 files changed
Lines changed: 237 additions & 171 deletions
File tree
- .changeset
- content/docs/guide
- packages
- core/src/utils
- __tests__
- plugin-dashboard
- src/__tests__
- types/src
- __tests__
- zod
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
50 | 50 | | |
51 | 51 | | |
52 | 52 | | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
180 | 180 | | |
181 | 181 | | |
182 | 182 | | |
183 | | - | |
184 | | - | |
185 | | - | |
186 | | - | |
187 | | - | |
188 | | - | |
189 | | - | |
190 | | - | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
191 | 190 | | |
192 | 191 | | |
193 | 192 | | |
| |||
Lines changed: 92 additions & 68 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
38 | 38 | | |
39 | 39 | | |
40 | 40 | | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
| |||
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
55 | | - | |
| 55 | + | |
56 | 56 | | |
57 | 57 | | |
58 | 58 | | |
| |||
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
| 66 | + | |
70 | 67 | | |
71 | 68 | | |
72 | 69 | | |
| |||
630 | 627 | | |
631 | 628 | | |
632 | 629 | | |
633 | | - | |
| 630 | + | |
634 | 631 | | |
635 | 632 | | |
636 | | - | |
637 | | - | |
638 | | - | |
639 | | - | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
| 637 | + | |
640 | 638 | | |
641 | 639 | | |
642 | | - | |
643 | | - | |
644 | | - | |
645 | | - | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
646 | 650 | | |
647 | 651 | | |
648 | 652 | | |
649 | | - | |
650 | | - | |
651 | | - | |
652 | | - | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
653 | 656 | | |
654 | | - | |
| 657 | + | |
655 | 658 | | |
656 | 659 | | |
657 | 660 | | |
| |||
665 | 668 | | |
666 | 669 | | |
667 | 670 | | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
668 | 674 | | |
669 | 675 | | |
670 | 676 | | |
671 | 677 | | |
672 | | - | |
| 678 | + | |
673 | 679 | | |
674 | 680 | | |
675 | 681 | | |
676 | 682 | | |
677 | | - | |
678 | | - | |
679 | | - | |
680 | | - | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
681 | 706 | | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
682 | 713 | | |
683 | | - | |
684 | | - | |
685 | | - | |
686 | | - | |
687 | | - | |
688 | | - | |
689 | | - | |
690 | | - | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
691 | 725 | | |
692 | 726 | | |
693 | | - | |
| 727 | + | |
694 | 728 | | |
695 | 729 | | |
696 | 730 | | |
697 | 731 | | |
698 | 732 | | |
699 | 733 | | |
700 | | - | |
701 | | - | |
702 | | - | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
703 | 737 | | |
704 | | - | |
705 | | - | |
706 | | - | |
707 | | - | |
708 | | - | |
709 | | - | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
710 | 743 | | |
711 | 744 | | |
712 | 745 | | |
| |||
716 | 749 | | |
717 | 750 | | |
718 | 751 | | |
719 | | - | |
720 | | - | |
721 | | - | |
722 | | - | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
723 | 756 | | |
724 | 757 | | |
725 | | - | |
| 758 | + | |
726 | 759 | | |
727 | 760 | | |
728 | 761 | | |
| |||
733 | 766 | | |
734 | 767 | | |
735 | 768 | | |
736 | | - | |
| 769 | + | |
737 | 770 | | |
738 | 771 | | |
739 | 772 | | |
740 | 773 | | |
741 | 774 | | |
742 | 775 | | |
743 | 776 | | |
744 | | - | |
745 | | - | |
746 | | - | |
747 | | - | |
748 | | - | |
749 | | - | |
750 | | - | |
751 | | - | |
752 | | - | |
753 | | - | |
754 | | - | |
755 | | - | |
756 | | - | |
757 | | - | |
758 | | - | |
| 777 | + | |
| 778 | + | |
| 779 | + | |
| 780 | + | |
| 781 | + | |
| 782 | + | |
759 | 783 | | |
760 | 784 | | |
0 commit comments