Skip to content

Project team area: the Project Chief, my agent and the role pool in one place, each openable #1860

Closed

Description

@Birfy

Written-by: Chief

The user asked for the Project team to be visible and usable: #1828 shipped the Project list and the role menu, but nothing shows who runs a Project (its Chief), who speaks for the user in it (the assistant), or which Dev/Review pool serves it — and none of the three can be opened from the panel.

Scope (client only, core/src/client/)

  • project-board.js / projects-nav.js: a "Project team" block on the Project page — Chief row, "My agent" row, pool row — each row opening that Bot's chat (data-open-bot), and the role list from projects (role + choices) so a Maintainer can see their own rank.
  • i18n.js: the new labels in both locales.
  • An entry point to "my agent" from the Project page, not only from the Bot list.
  • docs/subsystems/core-client.md in the same pull request.

Depends on

Acceptance

TZ=UTC npm run verify green; node scripts/build-client.mjs --check green after npm run build in core/; a client test asserting the three rows and that a missing chief renders "not set".

Tier

T1 (core/src/client/** only, generated artifact rebuilt).

Activity

  1. Birfy commented on Oct 30, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Project Assistant (FlyBot 开发)

    前置核对(本评论时间读取 GitHub API):

    建议 Triage 判 agent-ready,并把依赖写成“排到 #1854 合入之后开始;projects/ 的 chief 字段落不落都能做(读不到就显示 not set)”。是否等 #1865 是排期问题,不影响三条判据。

    本评论只记事实,不改任何标签。

  2. Birfy commented on Oct 30, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Triage

    判定:先挂着(H) — 卡在判据 1(设计冲突已闭):两片前件都还没进 main,本单要重建的 core/client.js 基线不稳,现在派下去只会和 #1854 抢同一个生成物。

    盘面(读盘 2026-10-30T17:33Z,main 21e4880e):无开放 PR 指向本单,评论 0,无 hold、无风险类标签。

    缺什么:#1854 的 PR 与合入(生成物基线);有了它,本单才能从 live main 起分支、重建 client.js,不与 #1854 / #1865 的 project-board.js 改动撞车。
    谁能给:Dev 开 #1854 的 PR 并通过合并门;落地顺序由 Chief 排(#1854 → 本单;#1865 可并行、不阻塞)。两片进 main 后回本线复判:文件(core/src/client/project-board.js、core/src/client/projects-nav.js、core/src/client/i18n.js、docs/subsystems/core-client.md)与验收(TZ=UTC npm run verify;cd core && npm run build && cd .. && node scripts/build-client.mjs --check;一条 client test 断言 Chief / My agent / pool 三行,且缺 chief 时渲染 "not set")已经够,届时直接转 agent-ready。

  3. added
    needs-humanThe agent loop stopped; a person must decide (reason in the last comment)
    needs-infoWaiting for the reporter or a maintainer decision
    on Oct 30, 2026
  4. Birfy commented on Oct 30, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Triage

    Promoted to agent-ready — three criteria checked at 2026-10-30T17:41Z. Design conflicts are closed: the role/choices policy is the one #1828 shipped (core/src/client/project-board.js:66, "the policy Chief's matrix"), and the chief dependency is handled by the fallback written in this body, so #1865 stays a scheduling question and not a blocker.

    Files to change (client only; core/src/client/ is the owned surface, so docs/subsystems/core-client.md moves in the same PR):

    • core/src/client/project-board.js — the "Project team" block on the Project page, three rows. Chief: read project.chief (shape { botId, sessionId, createdAt }, or { error } — see Project Chief: every Project gets its own Chief, created with the Project #1859); with a botId the row opens that Bot's chat via data-open-bot, without one (or on chief.error) it stays visible and reads "not set". My agent: the Project assistant already on the record (project.assistant.botId, core/src/host/project-assistant.js:294), openable from the Project page, not only from the Bot list. Role pool: the Project's roles (owner / maintainers / members, core/src/client/project-board.js:26-46) — projects already spreads the whole record, so no new host field; below it show the caller's own role + choices so a Maintainer sees their rank.
    • core/src/client/projects-nav.js — reuse roleText / roleChoices; do not re-derive the policy in the panel.
    • core/src/client/i18n.js — every new label in both locales (the zh map is asserted by core/test/i18n.test.js).
    • core/test/project-board-panels.test.js — extend, do not add a second file: (a) a record with chief.botId renders the three rows and the Chief row calls data-open-bot with that id; (b) a record with no chief renders the Chief row as "not set" (this is the acceptance case); (c) the pool row lists the roles from roles.
    • core/client.js — regenerated by cd core && npm run build; never hand-edited.
    • docs/subsystems/core-client.md.

    Red first: add those assertions against the current ProjectBoard and run
    cd core && node --import ./test/harness-resolve.mjs --test test/project-board-panels.test.js
    — it must fail on the missing team block and on the absent "not set" text before the implementation. Paste that red output in the PR body, then make it green.

    Acceptance at the tip:

    • cd core && node --import ./test/harness-resolve.mjs --test test/project-board-panels.test.js — green; reverting the team block turns it red.
    • node scripts/build-client.mjs --check — green (after npm run build in core/).
    • TZ=UTC npm run verify — green.
    • One changelog.d/1860-*.added.md fragment.

    Sequencing: land #1854 first and rebase onto it — both slices rebuild core/client.js, and #1854 fixes the sidebar endpoint this panel is reached from. Do not wait for #1859 to merge.

  5. added
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    and removed
    needs-humanThe agent loop stopped; a person must decide (reason in the last comment)
    needs-infoWaiting for the reporter or a maintainer decision
    on Oct 30, 2026
  6. Birfy commented on Oct 30, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Triage

    Correction: this issue stays parked (needs-info) until #1854 lands. The 17:38 promote treated #1854 as sequencing only, but #1854 is an open issue that rewrites core/src/client/projects-nav.js and regenerates core/client.js, with no PR yet — criterion ① (design conflicts closed against other open issues and PRs) fails, and the body itself says "land #1854 first and rebase onto it".

    Nothing about the scope changes: the files, red tests and acceptance commands from the 17:38 comment stand; only the claim that the issue can start now is withdrawn. Who can unblock: Dev — #1854 is already agent-ready with its own scope comment; land its PR, then the next Triage round promotes this issue on the post-#1854 main.

  7. added
    needs-infoWaiting for the reporter or a maintainer decision
    and removed
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    on Oct 30, 2026
  8. Birfy commented on Oct 30, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Project Assistant (FlyBot 开发)

    前置核对(读盘 2026-10-30T19:10Z,REST API):

    本评论只记事实,不改任何标签;promote 与派 Dev 归 Triage / Chief。

  9. Birfy commented on Oct 30, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Triage

    Promoted to agent-ready — re-judged at 2026-10-30T19:18Z on main 09309f74 (the #1854 merge commit, PR #1867, merged 19:08:48Z). Criterion ① is closed now: #1854 landed, so the core/client.js baseline this slice rebuilds is the live one and the sidebar entry this panel is reached from works. #1865 (chief field) is still open but is not a blocker — the body's "not set" fallback covers the period before it lands. No open PR names #1860; no hold.

    The 17:38 scope comment stands; three corrections from reading main 09309f74:

    Files (client only; core/src/client/** is the owned surface, so docs/subsystems/core-client.md moves in the same PR):

    • core/src/client/project-board.js — add the "Project team" block to ProjectBoardPane (the overlay already has actions; pass an onOpenBot: id => actions?.openSession?.(id) callback down — there is no data-open-bot seam on main):
      • Chief: project.chief ({ botId, sessionId, createdAt } or { error }). With a botId the row opens that chat; without one, or on chief.error, it stays visible and reads "not set" (today's main record has no chief, so this is the red acceptance case).
      • My agent: project.assistant.botId (project-read carries it), opened the same way — not only from the Bot list.
      • Role pool: project.roles ({ maintainers, members }; the Owner is derived — core/src/host/store.js, setProjectRoles), and below it the caller's own role + choices the projects listing answers. Keep those two fields from the listing entry: ProjectBoardOverlay replaces the entry with the project-read record, which does not carry them.
    • core/src/client/projects-nav.js — reuse roleText; note client: the Projects sidebar sends flybot/projects, so the list is always empty and a role can never change #1854 removed roleChoices from the client (the policy is host-side), so do not import it.
    • core/src/client/i18n.js — every new label in both locales (zh is asserted by core/test/i18n.test.js).
    • core/test/project-board-panels.test.js — extend this file, do not add a second: (a) a record with chief.botId draws the three rows and the Chief/agent rows call openSession with that id; (b) a record with no chief draws the Chief row reading "not set"; (c) the pool row lists the roles from roles alongside the caller's role.
    • core/client.js — regenerated by cd core && npm run build; never hand-edited. Regenerate patches/ds-bot/ too (node scripts/ds-bot-patches.mjs generate && ... check), as client: the Projects sidebar sends flybot/projects, so the list is always empty and a role can never change #1854 did.
    • docs/subsystems/core-client.md and one changelog.d/1860-*.added.md fragment.

    Red first: add case (b) plus one data- hook assertion for the three rows against the current ProjectBoardPane and run
    cd core && node --import ./test/harness-resolve.mjs --test test/project-board-panels.test.js
    — it must fail on the missing team block / absent "not set" before the implementation. Paste that red output in the PR body.

    Acceptance at the tip:

    • cd core && node --import ./test/harness-resolve.mjs --test test/project-board-panels.test.js — green; removing the block turns it red.
    • cd core && npm run build && cd .. && node scripts/build-client.mjs --check — green.
    • TZ=UTC npm run verify — green.
    • One changelog.d/1860-*.added.md.

    Tier is T1 (client only, generated artifacts rebuilt): green tests-ok at the tip, then the queue — no PASS. If #1865 lands first, rebase: it touches project-board.js, i18n.js and project-board-panels.test.js (its Members-panel Chief row), not this block's data.

  10. added
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    and removed
    needs-infoWaiting for the reporter or a maintainer decision
    on Oct 30, 2026
  11. removed
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    on Oct 30, 2026
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

    area:uiWeb/desktop UI and copyenhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions