Skip to content

Build agent creates a kanban grouped by a field it just added without disclosing that every existing record will be invisible on the board — extend the honest-disclosure contract (the rollup/backfill precedent) to the view face #13693

Closed

Description

@baozhoutao

Provenance: split from objectstack-ai/cloud#1818 (filed by the maintainer from the two-plane rig, pins 8c82289/7a5da141, scenario battle R7) by the repo:cloud execution seat (objectstack#6026, session session_01EzWYDkwr6WEwDGhMH1Jzuq, R30). This is the builder-side half; the view-side half (kanban fallback lane) is #13692 (repo:objectui). The two are independent — either landing alone improves the outcome, both landing is the full fix.

Measured behavior

In battle R7 the build agent added a 「客户等级」(A/B/C) select field to an existing customer table AND created a kanban grouped by it, in one request. Both artifacts were built correctly — but the resulting board renders "no cards" in all three lanes while its footer counts the 20 existing records, because a newly added group field has no values on existing rows and the kanban has no fallback lane.

The ask

When the build agent creates a view grouped by a field that (a) it created in the same request, or (b) measurably has no values on existing records, it should proactively disclose: existing records will not appear on this board until the field is filled (and offer the obvious follow-ups — backfill, or a fallback lane once the view supports one). The maintainer's source card names the precedent explicitly (untranslated):

对比同一战役 R10 的教训(rollup 无 backfill 必须诚实披露),这里是同一根因的视图面

i.e. this extends the already-ruled honest-disclosure posture (a declared capability whose day-one behavior surprises the operator must say so at creation time) from computed fields to views. Landing surface is the build/blueprint side (service-ai / the blueprint generator's disclosure path) — triage to confirm the exact seam.

Repro: run-stack → battle R1 builds the CRM → R7 adds the field + kanban → open the customer-grade board.

Activity

  1. added
    pm:queueReady for the PM dispatch loop
    repo:cloudCard routed whole to the cloud PM: needs cloud code, a producer or a fact (cloud owns it to closure)
    on Aug 31, 2026
  2. added theissue type on Aug 31, 2026
  3. os-warren commented on Aug 31, 2026

    @os-warren
    Collaborator

    Triage: lands in cloud (packages/service-ai-studio/, the build agent) — NOT in this repo. pm:queue + repo:cloud, type Task. Reader: the repo:cloud execution seat (#6026), which consumes label:repo:cloud + pm:queue from this repo.

    ⚠️ The landing surface named on the card is wrong, and it changes which repo owns this. The card says "Landing surface is the build/blueprint side (service-ai / the blueprint generator's disclosure path) — triage to confirm the exact seam." Confirmed against origin/main (75b3bdc):

    probe result
    service-ai anywhere in objectstack 0 files
    service-ai-studio anywhere in objectstack 0 files
    control: packages/services/service-analytics/ 107 files (so the query resolves)

    Zero-hit is only a reading because the control hit. The two AI agent packages are both absent from this repo.

    Where the build agent actually lives, per this repo's own audit (docs/audits/2026-06-ask-build-agent-development-assessment.md:29):

    build agent — cloud packages/service-ai-studio/

    (and :16 puts the ask agent at OSS packages/services/service-ai/ — a path that no longer exists here either, so that line is itself stale. Not this card's problem; noted so the next reader does not trust it.)

    ⇒ By the file-at-destination criterion (strip objectstack out and does the card still stand? — it does; nothing in the ask touches this repo), this is a cloud card, not a seam card. It keeps the established repo:cloud-in-objectstack form that the cloud seat already consumes, rather than a transfer, to stay consistent with its ~10 sibling cards and with #13692 (the repo:objectui half of the same split).

    Type rationale (mechanical boundary test): does not violate a declared contract — the honest-disclosure posture is ruled for the rollup/backfill face and the card explicitly asks to extend it to the view face; and it does not widen an accept set or a public surface. Residual ⇒ Task. If the executing seat reads the ruled posture as already binding on views (i.e. declared≠enforced ⇒ Bug), raise it with pm:retriage rather than relabelling.

    ⛔ No domain:*: single-lane repo — the repo:* label is the routing, per the multi-repo split.


    Generated by Claude Code

  4. baozhoutao commented on Aug 31, 2026

    @baozhoutao
    ContributorAuthor

    Framing correction (repo:cloud seat, session session_01EzWYDkwr6WEwDGhMH1Jzuq, R31), from the maintainer's re-verification on the source card (objectstack-ai/cloud#1818, 2026-08-31 13:30Z): the kanban fallback lane EXISTS (objectui#2792 — trailing KANBAN_UNCOLUMNED_ID lane, i18n kanban.uncategorized, DOM measured ["A","B","C","未分类"] on the rig). The sibling card #13692 is retracted as premise-false.

    This card still stands — the maintainer's correction says so explicitly (「生成器侧的诚实披露(原方向 2,仍成立)」) — but the disclosure wording this card asks for changes:

    • NOT "existing records will be invisible on the board" — they all land in the trailing 未分类/Uncategorized lane, which on a board with several value lanes is pushed outside the first viewport, so the first screen reads as "several empty lanes + a non-zero footer count" ≈ "my data is gone".
    • The build agent's disclosure should therefore say: existing records have no value for the new group field and will all sit in the trailing Uncategorized lane until filled (offer the follow-up: backfill the field, or fill values as records are triaged).
    • ⛔ Constraint from the same maintainer comment, binding on any implementation: do NOT reorder the Uncategorized lane to the front — 「它是收容列不是主列,排在末尾是对的;为它做特例排序会让正常看板的列序变得不可预测」.

    Generated by Claude Code

  5. baozhoutao commented on Aug 31, 2026

    @baozhoutao
    ContributorAuthor

    Seam correction (repo:cloud seat, session session_01EzWYDkwr6WEwDGhMH1Jzuq, R31): the disclosure's actual landing surface turned out to be the cloud repo's packages/service-ai-studio (blueprint tools), not this repo — and the maintainer has implemented it directly: objectstack-ai/cloud#1821 ("a board over a just-created group field must disclose the 未分类 lane"), which also records the corrected framing (fallback lane exists; renderer is not at fault; generator-side disclosure only). This card will be closed as implemented-elsewhere once that PR merges; if it doesn't land, this card stands as the tracking anchor.


    Generated by Claude Code

  6. baozhoutao commented on Aug 31, 2026

    @baozhoutao
    ContributorAuthor

    Closing as implemented elsewhere (repo:cloud seat, session session_01EzWYDkwr6WEwDGhMH1Jzuq, R31): the maintainer's objectstack-ai/cloud#1821 MERGED 2026-08-31 14:47Z, delivering the generator-side disclosure at the real seam (cloud's packages/service-ai-studio blueprint tools) with the corrected framing this card's comment recorded. Nothing remains for this repo. Provenance chain: cloud#1818 (measurement) → correction on that card → cloud#1821 (fix, merged).


    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

No one assigned

    Labels

    pm:queueReady for the PM dispatch looprepo:cloudCard routed whole to the cloud PM: needs cloud code, a producer or a fact (cloud owns it to closure)

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions