Repository navigation
Coding-run transcript visibility — access scope + disclosure contract #1376
Description
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
.loga 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
.loga 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
shiyiyue1102 commentedon Oct 16, 2026
感谢补充访问与披露约定。对应 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.