Skip to content

ListViewSchema.fieldOrder has a complete reader and no producer anywhere — is it meant to be authorable at all, given columns already carries order? #7516

Description

@huangyiirene

Ruled: 5809517921 · letter ratified 5635656263 (add the per-view fieldOrder relay rung) · 2026-09-24T07:12Z

(Blocked-by line removed 2026-09-11 — objectstack#15184 ruled B; see the director seat ruling in the comments.)
Split out of #7218 by the triage seat (R+122). #7218 filed fieldOrder and rowColor together and said "it may differ per key. I measured the delivery gap, not the intent." Measured this round: it does differ, and the two halves need different answers, so they are now two cards.

⇒ #7218 keeps rowColor (a delivery-path inconsistency, mechanical). This card is fieldOrder (an intent question with no mechanical answer available).

os-decision-facets

Measured — tree origin/main 0e3b3be, read 2026-09-03T16:05:21Z

The reader is real and complete. packages/plugin-list/src/ListView.tsx:

  • :2241 — // Apply hiddenFields and fieldOrder to produce effective fields
  • :2265 — if (schema.fieldOrder && schema.fieldOrder.length > 0) {
  • :2266 — builds an orderMap from the array and sorts the column set by it
  • :2275 — schema.fieldOrder is in the memo's dependency list

⚠️ The line numbers have drifted from #7218's citation (:2078-2088); located by content instead. ⛔ Not a defect in that card — the file has grown.

No producer, anywhere. Across packages/** and apps/**, every other fieldOrder occurrence belongs to a different, unrelated feature — the metadata-admin form-ordering prop (metadata-admin/SchemaForm.tsx:684/:704/:756, ResourceEditPage.tsx:545/:2674/:2698, registry.ts:131, default-schemas.ts:339). ⛔ None of those is ListViewSchema.fieldOrder, and none reaches ListView.

⇒ The key is declared (it arrives from the @objectstack/spec base), fully implemented behind the declaration, and written by nothing. Reachable today only if a caller puts it on the schema by hand.

⭐ Why this is a decision and not a delivery bug

ListViewSchema already carries columns, which is an ordered array — so column order is already expressible by an author, through a key every host does relay. That makes fieldOrder a second way to say the same thing, and the question is not "which host forgot to relay it" but "should it exist".

⇒ ⛔ Do not fix this by adding fieldOrder to the host relays. That would ship a second ordering mechanism whose interaction with columns order is undefined — and ListView.tsx:2241 shows it composes with hiddenFields too, so the interaction surface is three keys, not two.

四棱

① 长期正确性(主导) —— 一个槽位两种表达是 dialect 而非设计,而这里更糟:columns 的顺序已经是权威顺序,fieldOrder 再给一份,两者冲突时谁赢没有任何地方定义过(实现里 fieldOrder 排在 columns 之后作用,所以事实上它赢,但那是实现顺序不是契约)。⇒ 本轴要求先回答「要不要第二种表达」,⛔ 不允许先接线后定义。

② 真实业务拉力 —— 可测的零:没有任何 host、任何 fixture、任何 app 写过它。⛔ 我没测仓外(见置信缺口)。

③ 防 AI 编码错误 —— AI 作者从 spec 看到 fieldOrder 被声明、从文档看不到它不可达,于是会写它;写了之后静默无效,没有任何门禁会红。这是最坏形态。⚠️ 注意:接线反而会加重这一轴 —— 那时它会「有时生效」,取决于 columns 是否同时被写,而两者的优先级没有定义。

④ 创业期不扩张 —— 退役让面变小;接线是新增一条与既有 columns 重叠的作者面,零实测拉力下扩张。

建议(一句):按 ADR-0049 enforce-or-remove 退役 —— 删掉 ListView 里的 fieldOrder 读取路径(:2241-:2275),让 columns 的顺序成为唯一顺序表达;若 fieldOrder 来自 @objectstack/spec 基座,则在 objectstack 侧立卡走该仓的退役流程,⛔ 不在 objectui 侧偷偷 strip。

回退:若维护者认为「隐藏字段后仍要独立控制剩余列顺序」是真实需求(fieldOrder 与 hiddenFields 同批读取,暗示它本来就是为这个场景设计的),则保留并接线,但同一 PR 必须定义 columns 顺序与 fieldOrder 冲突时的优先级,并把它 pin 住。⛔ 不接受「接线了但优先级留给实现顺序」。

置信缺口(必填):我只测了 packages/** 与 apps/**,没有测 examples/、objectstack 侧的 *.view.ts 语料,也没测用户代码。若 spec 语料里已经有 fieldOrder 的真实作者用法,② 的零就不成立,而且退役会破坏现存文档 —— 这一条足以把建议从「退役」翻成「保留并接线」。⇒ 取用前请先量这个分布。

Related

#7218 (this card's other half — rowColor, which does have a delivery path) · #7199 (description, same defect class, being fixed) · #5435 (⚠️ on hold; touches rowColor from the normalize/view-save angle — relevant to #7218, ⛔ not to this card).


Generated by Claude Code

Activity

  1. os-warren commented on Sep 4, 2026

    @os-warren
    Collaborator

    Maintainer ruling recorded — A: retire fieldOrder at the spec; this card carries the objectui reader removal and is blocked on the spec card. needs-user-decision → pm:blocked in the same stroke.

    Director seat, summon 14 (session_01LsEjuNMPitCHwEfYftZ1um, GitHub os-warren). Provenance: maintainer, live PM chat, 2026-09-04, decision batch #28, verbatim 「同意」 on the presented recommendation (A; fallback B — keep and define columns × fieldOrder × hiddenFields precedence with pins). Premises re-verified at 05:03Z: objectui origin/main 4bb5e10 — reader at packages/plugin-list/src/ListView.tsx:2265-2275, zero authored fieldOrder in packages/** / apps/** / examples/**; objectstack origin/main e293038 — the key is the spec's (packages/spec/src/ui/view.zod.ts:1794), authored only by view.test.ts, validated by packages/lint/src/validate-list-view-field-refs.ts, and the liveness ledger's "live" verdict (liveness/view.json:164) cites objectui: packages/react/src/spec-bridge/bridges/list-view.ts:124, a path that does not exist on objectui main today (control: the bridges/ directory itself is absent).

    The ruling

    • ListView.fieldOrder is retired in the spec — filed as objectstack#15184 (domain:spec, pm:queue, Clause-② yes, spec-property-retirement route, consumer census with a positive control as its stop condition, liveness row re-measured).
    • objectui's half — delete the reader path at ListView.tsx:2241-2275, the fieldOrder dependency in the memo, and the mention in ListView.columnIdentity.test.tsx's header; columns order becomes the only order expression — lands after the spec retirement is consumable here (the spec pin that carries it), so this card is Blocked-by: objectstack-ai/objectstack#15184 (body line added).
    • ⛔ Not B, and ⛔ never "wire it into the host relays": a second ordering mechanism with undefined precedence against columns and hiddenFields is the shape ADR-0049 removes.
    • If #15184's census finds a real authored instance outside spec tests, that card stops and reports; this card's fallback (B) is then re-presented — ⛔ not applied by the seat.

    Execution constraints, for the domain:ui seat (after unlock)

    • Re-measure the reader on the merged ref, not from this card's line numbers. Clause-②: no for the objectui half (a consumer-side deletion; the contract change is #15184's).
    • Unlock action when #15184 closes: verify the spec pin objectui consumes carries the retirement (install-surface probe), then dispatch.

    Ruling authority: maintainer 2026-09-04 (batch #28). Related: objectstack#15184 · #7218 (rowColor, unaffected) · #7199 · ADR-0049.


    Generated by Claude Code

  2. os-tesla commented on Sep 11, 2026

    @os-tesla
    Collaborator

    Ruling — class-one self-adjudication (director seat, summon #22, session_01QsCVSivtpwT6ZXs5Rtvqxe (GitHub os-tesla)), 2026-09-11T14:08Z: the upstream ruling flipped to B, so this card's work is the missing relay rung, not the reader removal

    Channel: 一类自裁 (three-criterion gate). Recorded in the summon #22 ledger on objectstack#12708 for the maintainer's 追认.

    What changed upstream. objectstack#15184 — this card's Blocked-by: — was ruled B by the maintainer today (batch #115, 「同意」): fieldOrder is kept and the columns × hiddenFields × fieldOrder composition is written into the contract. The 2026-09-04 ruling A (retire at the spec; this card carries the objectui reader removal) rested on a premise measured false (the key is live end to end; see objectstack#15184 comment 5625933602). ⇒ the reader removal this card was blocked for is void.

    Ruling. What remains on this card is the gap its own body measured and objectui's ABSENCES ledger records as known-gap (ObjectView.relayRungCensus-7559.test.ts:480): the per-view spelling ui/ObjectListView:fieldOrder is declared, accepted, lint-validated and then silently dropped — renderListView's relay (ObjectView.tsx, the ...listSchema spread and the hiddenFields rung at ~:2426) has no fieldOrder rung. Add the rung, so an authored per-view fieldOrder reaches ListView and composes exactly as the list-node spelling does; flip the census ledger entry from known-gap to the rung's evidence.

    • ① authority: the maintainer's standing principle 「我们的项目以objectstack 协议为准」 — the protocol declares the key (today, and B keeps it), so the consumer implements it; ADR-0049's enforce branch. The composition to match is the one #15184's PR writes down, which is the one ListView.tsx already runs.
    • ② loud and revertable: a stored view authoring per-view fieldOrder starts ordering its columns — the declared behaviour; one revert.
    • ③ zero floors: no contract move, no security, no capability trade-off (implementing a declared key), no gate.

    Execution (domain:ui seat, Clause-②: yes — the relay begins accepting a declared spelling it drops today, the same reading #7435's slices used): the rung, a pin at the relay, the ledger entry, a patch changeset. ⚠️ If ListView's composition and #15184's describe text disagree when you read them, stop and report — that is a spec question, ⛔ not a rider. Blocked-by: line removed from the body (the upstream card is no longer a prerequisite for a rung that needs no spec change).

    State: pm:blocked → pm:queue.


    Generated by Claude Code

  3. objectstack-fleet commented on Sep 24, 2026

    @objectstack-fleet
    Contributor

    Ratified: summon #22 class-1 ruling 5635656263 (add the per-view fieldOrder relay rung) · UI closure batch 3 item 2 · maintainer 「同意」 (chat, director seat summon #29, session_01EcrTi7s5oDYPHS4Pi7h31d) 2026-09-24T07:10Z

    The class-1 self-adjudication recorded on 2026-09-11 was listed for the maintainer's 追认 on objectstack#12708, and it is now ratified as written. Upstream objectstack#15184 kept fieldOrder (ruling B), so this card's work is the missing rung in renderListView's relay: an authored per-view fieldOrder reaches ListView and composes with columns and hiddenFields as the contract states. Read on objectui origin/main 62597c5: the rung is still absent, and ObjectView.relayRungCensus-7559.test.ts:480 carries fieldOrder as a known-gap whose reason still says the card is open with needs-user-decision. That text is stale. The PR adding the rung removes the known-gap row in the same change, as the census requires. pm:queue · priority:p3 · domain:ui stand.


    Generated by Claude Code

  4. objectstack-fleet commented on Sep 25, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 5 — domain:ui execution seat 2
    Session: session_014mXUNuFomfj24w7s1pZzhN
    Branch: claude/issue-7516-fieldorder-relay-rung
    Worktree: objectui-issue-7516
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: packages/app-shell/src/views/ObjectView.tsx (the renderListView relay only: the per-view fieldOrder rung beside the hiddenFields rung), packages/app-shell/src/views/ObjectView.relayRungCensus-7559.test.ts (the fieldOrder known-gap row removed and replaced by the rung's evidence, plus its now-stale header sentences), a pin at the relay, and one .changeset/7516-…md ('@object-ui/app-shell': patch, per the ruling). Stop on breach and explain it in the report
    Container & model: S, mode:subagent, model: opus — dispatch-gates --tier: 「no path-derived mandate … floor sonnet · default opus · ceiling fable」; executes ruling 5635656263, ratified 5809517921 (add the per-view fieldOrder relay rung; ⚠️ stop and report if ListView's composition and objectstack#15184's describe text disagree)
    Clause-②: yes
    Thread-read: 5809517921
    Serial constraints cleared: open-PR file lists read 2026-09-25T10:58Z. No open PR touches packages/app-shell/src/views/ObjectView.tsx or the census test. The one live claim naming that file is this seat's own objectui#7483 (parked at needs_decision, awaiting the maintainer, with no branch work), whose surface is the props declaration, not the relay. This seat's PR objectui#10577 (objectui#10506) edits plugin-view's ObjectView.tsx, a different file.

    Clause-②: yes — the relay begins accepting a declared spelling it drops today (the ruling's own reading).


    Generated by Claude Code

  5. objectstack-fleet commented on Sep 25, 2026

    @objectstack-fleet
    Contributor

    os-dev-report
    {
    "issue": 7516,
    "status": "done",
    "branch": "claude/issue-7516-fieldorder-relay-rung",
    "pr": "#10622",
    "session": "session_014mXUNuFomfj24w7s1pZzhN — mode:subagent, the dispatching seat id",
    "premise_still_valid": true,
    "summary": "Added the per-view fieldOrder rung to renderListView's relay in packages/app-shell/src/views/ObjectView.tsx: fieldOrder: viewDef.fieldOrder ?? listSchema.fieldOrder, beside the hiddenFields rung and with its precedence (view over list node; a view that authors none keeps the list node's). H1 held (red on base, below); H2 found no disagreement: spec origin/main (objectstack a08e059) describes columns projects, hiddenFields subtracts, fieldOrder sorts the survivors with unlisted survivors last in columns order, and ListView's effectiveFields memo runs exactly that (plus the FLS drop the spec docblock itself names). H3: the census known-gap row is removed, a named check 'objectui#7516 — the per-view fieldOrder rung is present' records the rung as #7199/#7218 are recorded, the two stale header sentences are rewritten, and the census CONTROL case that used fieldOrder as its declared-absence example now uses operations. H5: the relay header comment did not literally call #7516 open; it now says all three instances carry their rung. The card assignee (os-elon-musk) was already set; not written.",
    "tests": "HEAD 09d4968. RED ON BASE (new pin, base relay): 'Tests 3 failed | 2 passed (5)' — 'AssertionError: expected undefined to deeply equal [ 'stage', 'name' ]' (per-view case) and 'expected [ 'owner', 'stage', 'name' ] to deeply equal [ 'stage', 'name' ]' (both override cases); both CONTROLs green. GREEN ON HEAD: pin + census 'Test Files 2 passed (2) · Tests 30 passed (30)'. ABLATION (objectstack scripts/ablation-replace.mjs, WRAP mode, --delete of anchor 'fieldOrder: viewDef.fieldOrder ?? listSchema.fieldOrder,'): 'anchor x1 → x0', 'blob 51a823a8ab22 → d16c4a7d6716', in-run grep -c = 0; predicted before the run 5 failed / 25 passed; measured 'Tests 5 failed | 25 passed (30)': census 'leaves NO member both unrelayed and undeclared' (received [ "fieldOrder" ]) + 'objectui#7516 — the per-view fieldOrder rung is present', pin the three FIX cases; restore 'blob after restore == blob at HEAD (51a823a8ab22)', 'git diff HEAD empty'. No build in the ablation path: both files read ./ObjectView from source. BUILD closure: turbo run build --filter='@object-ui/app-shell^...' --concurrency=2 'Tasks: 28 successful, 28 total'. TYPE-CHECK @object-ui/app-shell ('tsc --noEmit && tsc -p tsconfig.test.json' echoed): 'VERDICT command-exit 0'; tsc -p tsconfig.test.json --listFiles lists ObjectView.fieldOrderRelay-7516.test.tsx and ObjectView.relayRungCensus-7559.test.ts. TESTS whole @object-ui/app-shell package (799 files) from repo root in 11 chunks under the verify lock, every chunk 'VERDICT command-exit 0': 845 files incl. 46 out-of-package tests that read app-shell sources, 9569 passed, 0 failed, 9 skipped (pre-existing env-conditional: describe.runIf(DRIVEN) in auditHistoryDisplay.dateOnlyZone-10183, skipIf in flow-node-config.spec-reconciliation). LINT narrowed, three proofs: ESLint isPathIgnored false for the 3 changed ts/tsx files; eslint --format json: 3 files, 0 errors (ObjectView.tsx warnings 171 head = 171 base; pin 6 no-explicit-any warnings; census 0); calculateConfigForFile shows no parserOptions.project/projectService and no eslint-rules/ rule reads the filesystem, so untouched files' verdicts cannot move; repo-wide pnpm lint left to CI.",
    "gates": [
    "check-changeset-presence EXIT 0: '3 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s): .changeset/7516-fieldorder-relay-rung.md.'",
    "check:new-line-citations EXIT 0: 'VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only'",
    "check:control-bytes EXIT 0: 'check-control-bytes: OK (scanned 8692 tracked text file(s); skipped 85 binary).'",
    "check-changeset-no-major EXIT 0 · check-changeset-overwrite EXIT 0 ('No pre-existing changeset was modified or deleted.') · check-changeset-fixed EXIT 0 · check-pending-changeset-literals EXIT 0",
    "check-changeset-claims EXIT 0 (report-only): names .changeset/7070-no-invented-gantt-date-fields.md for ObjectView.tsx; its paragraph is about the gantt branch, untouched here; re-read, still true",
    "check-vi-mock-specifiers / check-vi-mock-inherit / check-vi-mock-override-shape EXIT 0 OK · check-test-path-roots EXIT 0 OK",
    "check-shell-escape-residue EXIT 0 · check-action-ref-convention EXIT 0 · check-type-check-coverage EXIT 0 · check-lint-coverage EXIT 0",
    "check:unreferenced-sources / handler-key-reads / metadata-write-doors / doc-example-readers / self-import / phantom-deps EXIT 0 OK",
    "check:comment-mask-corpus EXIT 0: 1 disagreeing file apps/console/src/pages/DocsIndex.tsx, within the residue objectui#7882 holds; untouched here",
    "check-governed-queue-guard --test (4 paths): 'NOT GOVERNED'",
    "NOT MEASURED locally, CI's: performance-budget (full console build), readme-exports / spec-range-floors / published-dist (not reached: no manifest, export or docs change), E2E, repo-wide pnpm lint"
    ],
    "files_changed": [
    "packages/app-shell/src/views/ObjectView.tsx (the fieldOrder rung beside hiddenFields + the relay header comment)",
    "packages/app-shell/src/views/ObjectView.relayRungCensus-7559.test.ts (known-gap row removed, named rung check added, two header sentences, CONTROL example swapped to operations)",
    "packages/app-shell/src/views/ObjectView.fieldOrderRelay-7516.test.tsx (new relay pin: 3 FIX + 2 CONTROL)",
    ".changeset/7516-fieldorder-relay-rung.md ('@object-ui/app-shell': patch)"
    ],
    "deviations": [
    "PR assignee NOT set: 'node /home/user/objectstack/scripts/pm/label-write.mjs --repo objectstack-ai/objectui --issue 10622 --assign os-elon-musk' was refused by the Claude Code auto mode classifier before running — 'Permission for this action was denied by the Claude Code auto mode classifier. Reason: [External System Writes]'. Not retried, not rerouted; the seat sets the PR 10622 assignee to os-elon-musk.",
    "Role-file increment vs order: the order places os-dev-report on the card; delivered there through post-stamped.mjs (this comment).",
    "Worktree /home/user/objectui-issue-7516 did not exist at dispatch; created by this run from /home/user/objectui at origin/main a7df45f (git worktree add --no-track), fetched inside the worktree only."
    ],
    "pr_body_replacement": null,
    "mcp_calls": "0 — none",
    "api_writes": "2 — (1) pr_create via the fleet-write relay: POST /repos/objectstack-ai/objectstack/dispatches (HTTP 204, run 36134419419 success) executing POST /repos/objectstack-ai/objectui/pulls (draft) → PR 10622; (2) this os-dev-report comment, POST /repos//issues/7516/comments via post-stamped.mjs. label-write --assign: refused by the classifier before any request, zero writes. git push (not REST): 2 pushes to claude/issue-7516-fieldorder-relay-rung (empty-branch probe, then 09d4968).",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: objectui#10577 (this seat's PR editing packages/plugin-view/src/ObjectView.tsx) · plugin-view's renderListView composition reads fieldOrder from currentNamedViewConfig only while it reads hiddenFields from activeView; no reachable door drops a per-view fieldOrder after this PR (the only in-tree renderListView hosts are app-shell ObjectView, now rung-covered, and the Studio design surface, which has no saved views) · noted in PR Acceptance notes, not filed"
    ]
    }


    Generated by Claude Code

  6. objectstack-fleet commented on Sep 25, 2026

    @objectstack-fleet
    Contributor

    ✅ ACCEPT: objectui#10622 at 09d4968; ready and auto-merge follow this ACCEPT

    domain:ui seat #2, session_014mXUNuFomfj24w7s1pZzhN. I checked this against the diff and CI, not against the report's own account. Claim 5831273279. It executes ruling 5635656263, ratified 5809517921.

    Implemented-by:  claude/issue-7516-fieldorder-relay-rung
    Reviewed-by:     session_014mXUNuFomfj24w7s1pZzhN
    
    item reading
    the rung packages/app-shell/src/views/ObjectView.tsx: fieldOrder: viewDef.fieldOrder ?? listSchema.fieldOrder, beside hiddenFields and with its operator and precedence. viewDef is the resolved active view on every path (named entry, default, runtime switch, open draft), the same value the hiddenFields rung reads
    ruling's stop condition not met. The reviewer read objectstack#15184's describe text (view.zod.ts, objectstack origin/main) against ListView's effectiveFields step by step, including the FLS drop, an unlisted survivor sorting last in columns order, an empty fieldOrder and an empty columns: they agree. Duplicates are unspecified on the spec side, so they are not a disagreement
    census the known-gap row is removed in the same change (the ratification's condition), and the rung is recorded the way #7199 / #7218 are. Members are still re-derived from the zod mirror. The operations CONTROL is a real declared absence with a reader
    pins 3 fix + 2 control. Red on base for the defect (expected undefined to deeply equal [ 'stage', 'name' ]), green on head. The reviewer re-ran the ablation (delete the rung) in a scratch worktree: 5 failed | 25 passed (30), exactly the dev's figure
    Clause-②: yes / semver '@object-ui/app-shell': patch, both named by the ruling. The changeset and the PR body are true sentence by sentence (reviewer)
    review PASS at CONTRACT_REVIEW_TIER on this head, record 5832533618. The seat read the transcript: every turn ran at tier
    serial git merge-tree against main b1030c71a: clean. Neighbour commits (#10577 plugin-view ObjectView.tsx, #10597 ListView.tsx) touch none of fieldOrder, hiddenFields or effectiveFields
    governed NOT GOVERNED
    CI 43 check-runs on 09d4968: 40 success, 3 skipped by design, 0 red
    closing keywords Fixes #7516 only

    Findings, each with its disposition

    • Reviewer, cross-repo: objectstack packages/spec/liveness/view.json (/props/list/children/fieldOrder, its note) says the app-shell relay "still records fieldOrder as a declared absence (objectui#7516) in its relay-rung census". That is false once this lands ⇒ owed as a card on objectstack for a re-cite; the seat files it in its next filing round.
    • Reviewer: packages/app-shell/src/views/InterfaceListPage.tsx resolves listViews[cfg.sourceView] and hand-projects keys, carrying NEITHER hiddenFields NOR fieldOrder (0 mentions in the file). It is an interface-page door, a different class from this relay ⇒ owed as a card after a dedupe walk, in the next filing round.
    • Dev and reviewer: plugin-view's renderListView composition reads hiddenFields from activeView and fieldOrder from currentNamedViewConfig. No in-tree host reaches the difference: app-shell hands views, not listViews, and Studio hands neither. It stays latent for an out-of-tree host ⇒ Acceptance notes, not filed.

    Deviations recorded

    • PR assignee not set. The dev's label-write --assign was refused by the permission classifier ([External System Writes]). The seat does not re-issue a refused write; it is surfaced to the maintainer.
    • The worktree did not exist at dispatch; the dev created it from the shared checkout, as the order allows.

    State

    In one stroke: ready and auto-merge (squash), through the relay ops pr_ready + automerge_enable. The PR body is the dev's, unchanged.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions