Skip to content

Coding-run transcript visibility — access scope + disclosure contract #1376

Closed

Description

@LUOSENGWA

Coding-run transcript visibility — access scope + disclosure contract

What the endpoints do

PR #1365 adds read-only endpoints that surface worker coding-CLI run
transcripts (the raw .log files the CLI teed to
<task>/workspace/coding-cli-logs/run-*.log):

  • GET /api/v1/coding-runs — list the run transcripts the caller may read,
    across their visible storage prefixes, bounded by a global cap of 200
    (the cap stops the outer prefix traversal, so it holds across multiple
    teams, not per team).
  • GET /api/v1/coding-runs/{taskID}/runs/{run} — serve one transcript
    byte-transparent (the raw .log), team-scoped; a miss 404s like a missing
    task.

Both are new, additive paths — they do not change any existing endpoint's
behavior.

Access scope (RBAC)

Reuses the controller's existing team-scope authorizer
(authorizeTeamLeader / authorizeHuman / authorizeAdmin):

Caller List Get one
Admin all teams + standalone any team / standalone
Team leader (L2) only their team's prefix only their team
Human only their team's prefix only their team

A caller cannot read another team's transcripts (the prefix is filtered by
the caller's team membership; visibleTaskPrefixes enforces it). RBAC unit
tests pin the L2/Human cases (authorizeTeamLeader / authorizeHuman) against
the coding-runs resource.

Transcript disclosure contract

  • What is disclosed: the raw .log a coding CLI (qwen-code / opencode /
    openclaw) teed for one run — the command's stdout+stderr. It may contain
    command output, file paths, and environment echoes, but not
    credentials (the CLI does not log secrets; the run environment is the
    worker's normal workspace).
  • Who sees it: read-only + team-scoped as above. A team leader sees only
    their team's runs; Admin sees all. No cross-team / cross-tenant
    disclosure.
  • Bounding: the list is capped (global 200); a single transcript is served
    as-is (no truncation) but only to an authorized caller.
  • Additive: these are new read paths; no existing endpoint changes
    behavior, so there is no existing-capability regression to reconcile.

Companion PR: #1365. (The PR body cites #1295 / #1342, which are PRs, not
tracking issues — this issue is the dedicated tracking issue the review
asked for.)


Coding-run transcript visibility — access scope + disclosure contract

What the endpoints do

PR #1365 adds read-only endpoints that surface worker coding-CLI run
transcripts (the raw .log files the CLI teed to
<task>/workspace/coding-cli-logs/run-*.log):

  • GET /api/v1/coding-runs — list the run transcripts the caller may read,
    across their visible storage prefixes, bounded by a global cap of 200
    (the cap stops the outer prefix traversal, so it holds across multiple
    teams, not per team).
  • GET /api/v1/coding-runs/{taskID}/runs/{run} — serve one transcript
    byte-transparent (the raw .log), team-scoped; a miss 404s like a missing
    task.

Both are new, additive paths — they do not change any existing endpoint's
behavior.

Access scope (RBAC)

Reuses the controller's existing team-scope authorizer
(authorizeTeamLeader / authorizeHuman / authorizeAdmin):

Caller List Get one
Admin all teams + standalone any team / standalone
Team leader (L2) only their team's prefix only their team
Human only their team's prefix only their team

A caller cannot read another team's transcripts (the prefix is filtered by
the caller's team membership; visibleTaskPrefixes enforces it). RBAC unit
tests pin the L2/Human cases (authorizeTeamLeader / authorizeHuman) against
the coding-runs resource.

Transcript disclosure contract

  • What is disclosed: the raw .log a coding CLI (qwen-code / opencode /
    openclaw) teed for one run — the command's stdout+stderr. It may contain
    command output, file paths, and environment echoes, but not
    credentials (the CLI does not log secrets; the run environment is the
    worker's normal workspace).
  • Who sees it: read-only + team-scoped as above. A team leader sees only
    their team's runs; Admin sees all. No cross-team / cross-tenant
    disclosure.
  • Bounding: the list is capped (global 200); a single transcript is served
    as-is (no truncation) but only to an authorized caller.
  • Additive: these are new read paths; no existing endpoint changes
    behavior, so there is no existing-capability regression to reconcile.

Companion PR: #1365. (The PR body cites #1295 / #1342, which are PRs, not
tracking issues — this issue is the dedicated tracking issue the review
asked for.)

Activity

  1. shiyiyue1102 commented on Oct 16, 2026

    @shiyiyue1102
    Collaborator

    感谢补充访问与披露约定。对应 PR #1365 已合入 main,团队访问隔离、跨团队资源不可见及全局 200 条列表上限已在实现和回归测试中覆盖。另补充一个重要边界:接口原样返回 CLI 日志,不提供自动脱敏;如果 prompt 或工具输出包含敏感信息,日志中也可能出现,因此不能保证日志绝不包含凭据。具体约定见 Coding Runs API 文档。


    Thanks for the additional access and disclosure agreement. The corresponding PR #1365 has been merged into main, and team access isolation, cross-team resource invisibility and the global 200-item list limit have been covered in implementation and regression testing. Another important boundary is added: the interface returns the CLI log as it is and does not provide automatic desensitization; if the prompt or tool output contains sensitive information, it may also appear in the log, so there is no guarantee that the log will never contain credentials. For specific conventions, see Coding Runs API Documentation.

  2. added this to the 1.2.5 milestone on Oct 19, 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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions