Skip to content

feat(#2722): add reader role for self-minting tokens during harness loading - #2725

Closed
fullsend-ai-coder[bot] wants to merge 4 commits into
mainfrom
agent/2722-loader-role-self-mint
Closed

feat(#2722): add reader role for self-minting tokens during harness loading#2725
fullsend-ai-coder[bot] wants to merge 4 commits into
mainfrom
agent/2722-loader-role-self-mint

Conversation

@fullsend-ai-coder

@fullsend-ai-coder fullsend-ai-coder Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

The binary needs a GitHub token to create a ForgeClient for LoadWithBase() when fetching URL-based skill directories, but mintAgentToken() requires the harness role — which is only known after loading. PR #2720 worked around this by passing GH_TOKEN from action.yml, leaving an over-privileged ambient token.

Add a dedicated "reader" mint role with minimal permissions (contents:read, metadata:read) and a mintReaderToken() helper that runs before LoadWithBase. The binary now self-mints a short-lived reader token when OIDC is available, falling back to resolveToken() for local dev. The action.yml GH_TOKEN injection in the "Run fullsend" step is removed.

Changes:

  • internal/mintcore/github.go: add "reader" role to
    canonicalRolePermissions
  • internal/cli/run.go: add hasOIDCEnv() and mintReaderToken()
    helpers; move mintURL resolution before LoadWithBase; wire
    reader mint before resolveToken() fallback
  • action.yml: remove GH_TOKEN from "Run fullsend" step
  • Sync embedded copy per AGENTS.md rules

Closes #2722

Post-script verification

  • Branch is not main/master (agent/2722-loader-role-self-mint)
  • Secret scan passed (gitleaks — f73f2d21dde90e04fedc7dad2302649a434e2a43..HEAD)
  • Pre-commit hooks passed (authoritative run on runner)
  • Tests ran inside sandbox

@github-actions

Copy link
Copy Markdown

E2E tests did not run

E2E tests run automatically for org/repo members and collaborators on pull requests.

For other contributors, a maintainer must add the ok-to-test label after the latest push.

See E2E testing guide for details.

1 similar comment
@github-actions

Copy link
Copy Markdown

E2E tests did not run

E2E tests run automatically for org/repo members and collaborators on pull requests.

For other contributors, a maintainer must add the ok-to-test label after the latest push.

See E2E testing guide for details.

@github-actions

github-actions Bot commented Jun 27, 2026

Copy link
Copy Markdown

Site preview

Preview: https://b8ad0f74-site.fullsend-ai.workers.dev

Commit: 303f7870de21c566eedd3a8012cca56dfcdb1649

@ggallen ggallen added the ready-for-review Triggers review agent dispatch label Jun 27, 2026
@ggallen

ggallen commented Jun 27, 2026

Copy link
Copy Markdown
Member

/fs-review

@codecov

codecov Bot commented Jun 27, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 86.66667% with 4 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
internal/cli/run.go 86.66% 3 Missing and 1 partial ⚠️

📢 Thoughts on this report? Let us know!

@fullsend-ai-review

fullsend-ai-review Bot commented Jun 27, 2026

Copy link
Copy Markdown

🤖 Finished Review · ❌ Failure · Started 7:38 PM UTC · Completed 7:55 PM UTC
Commit: ea2ca95 · View workflow run →

@fullsend-ai-review

fullsend-ai-review Bot commented Jun 27, 2026

Copy link
Copy Markdown

Review

Findings

Medium

  • [error-handling-gap] internal/cli/run.go:215 — When mintReaderToken fails after calling printer.StepStart (i.e., statusMintToken returns an error or the token pattern check fails), the function returns an error without calling StepFail. The caller discards the error silently, leaving a dangling "Minting reader token (contents:read)" step with no StepDone or StepFail. The early-return paths (no mintURL, no OIDC env, resolveMintRepos failure) are not affected because StepStart has not been called yet.
    Remediation: Add printer.StepFail calls before the two return error statements that follow StepStart (after statusMintToken failure and after token pattern failure).

  • [github-action-environment-contract] action.yml:357 — Removal of GH_TOKEN from the "Run fullsend" step changes the action's runtime contract. External consumers pinned to a specific ref expect github_token to flow through to the run step. The new OIDC self-minting path requires id-token: write permission, which external consumers may not have configured. The resolveToken() fallback still works when GITHUB_TOKEN is in the environment (default in GitHub Actions), but environments without it and without OIDC will have no token source.
    Remediation: Document the id-token: write permission requirement in the action description and/or README. Consider a deprecation note for consumers who relied on GH_TOKEN being present in the run step.


Labels: PR adds a new mint role and wires reader token minting into the harness loading flow.

Previous run

Review

Findings

Medium

  • [error-handling-gap] internal/cli/run.go:304 — The URL-skill resolution path post-LoadWithBase independently calls resolveToken() rather than reusing the already-constructed composeForgeClient (which may hold the minted loader token). After the GH_TOKEN removal from action.yml, this path relies on GITHUB_TOKEN (auto-injected by GitHub Actions) or gh auth token. On self-hosted runners or non-GHA CI environments where neither is available, URL-skill resolution will fail even though a valid loader token was already minted earlier in runAgent().
    Remediation: Reuse the composeForgeClient (which already holds the loader-minted forge client) as a fallback in the URL-skill resolution path, or pass the minted loader token forward.

Low

  • [infrastructure-dependency] internal/mintcore/gcp_pem.go / N/A — The new loader role requires infrastructure provisioning before it works at runtime: a fullsend-loader GitHub App (contents:read + metadata:read), its PEM in Secret Manager, and loader entries in ROLE_APP_IDS and ALLOWED_ROLES on the mint service. PemSecretRole() maps loader to itself (correct — no aliasing needed), but the corresponding secret and app must exist. The fallback to resolveToken() means this fails gracefully in the meantime.
    Remediation: Confirm infrastructure prerequisites from issue mint: add loader role so the binary self-mints tokens for URL-based harness loading #2722 are met before deploying.

  • [documentation-contract-mismatch] action.yml:26 — The github_token input description ("GitHub token for authenticated API calls") doesn't clarify that it is no longer used by the "Run fullsend" step after this change. It is still consumed by earlier steps (detect, download, clone), but the description could be more precise about its reduced scope.

  • [test-adequacy] internal/cli/run_test.go:2541TestMintLoaderToken_Success captures the full MintRequest but only asserts Role and MintURL, not the Repos field. Since mintLoaderToken calls resolveMintRepos() and passes the result, asserting Repos would strengthen coverage.

  • [error-message-style] internal/cli/run.go:2151 — Error message "loader mint unavailable: no mint URL or OIDC env" is terse compared to similar messages elsewhere. Since this error is handled silently (falls through to resolveToken()), impact is minimal.

Info

  • [permission-reduction] action.yml:357 — GH_TOKEN removal from the "Run fullsend" step is an intentional privilege reduction, replacing an ambient over-scoped token with a self-minted loader token (contents:read, metadata:read only). Aligned with issue mint: add loader role so the binary self-mints tokens for URL-based harness loading #2722 and ADR-0029.

  • [permission-expansion] internal/mintcore/github.go:73 — New loader role has the most restrictive permissions of any role in canonicalRolePermissions (contents:read, metadata:read). Authorized by issue mint: add loader role so the binary self-mints tokens for URL-based harness loading #2722.

  • [injection-safe] internal/cli/run.go:2168::add-mask:: workflow command usage is safe: result.Token is validated against mintTokenPattern before interpolation, matching the pattern used by mintAgentToken.

  • [fail-closed] internal/cli/run.go:216 — When both mintLoaderToken and resolveToken fail, composeForgeClient remains nil. LoadWithBase will fail on URL-based bases — this is correct fail-closed behavior.

@ggallen

ggallen commented Jun 27, 2026

Copy link
Copy Markdown
Member

/fs-fix resolve all the issues raised in #2725 (comment).

@fullsend-ai-coder

fullsend-ai-coder Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ✅ Success · Started 8:01 PM UTC · Completed 8:09 PM UTC
Commit: ea2ca95 · View workflow run →

@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

🔧 Fix agent — iteration 1 (human-triggered)

Addressed 4 of 5 review findings with code fixes. Disagreed with 1 (infrastructure-dependency) as it is an infrastructure prerequisite tracked in issue #2722, not a code issue. Key fix: reuse composeForgeClient in URL-skill resolution path so the minted loader token is used instead of independently calling resolveToken().

Fixed (4):

  1. error-handling-gap: URL-skill resolution path independently calls resolveToken() instead of reusing composeForgeClient (internal/cli/run.go): Added composeForgeClient as a fallback in the URL-skill resolution path (lines 311-312). When the loader token was already minted and stored in composeForgeClient, it is now reused for URL-skill resolution instead of independently calling resolveToken().
  2. documentation-contract-mismatch: github_token input description doesn't clarify reduced scope (action.yml): Updated github_token description to clarify it is used by setup steps only and not passed to the fullsend run step, which self-mints a scoped loader token via OIDC.
  3. test-adequacy: TestMintLoaderToken_Success does not assert Repos field (internal/cli/run_test.go): Added assertion for capturedReq.Repos in TestMintLoaderToken_Success to verify resolveMintRepos() output is passed correctly. Value is ["my-repo"] because resolveMintRepos() strips the owner prefix from REPO_FULL_NAME.
  4. error-message-style: loader mint error message is terse (internal/cli/run.go): Improved error message to explicitly name the required OIDC env vars (ACTIONS_ID_TOKEN_REQUEST_URL, ACTIONS_ID_TOKEN_REQUEST_TOKEN) for easier debugging.

Disagreed (1):

  1. infrastructure-dependency: loader role requires infrastructure provisioning (GitHub App, PEM, role entries): This is an infrastructure prerequisite, not a code issue. The code already falls back gracefully to resolveToken() when the loader mint fails. Infrastructure provisioning is tracked in issue mint: add loader role so the binary self-mints tokens for URL-based harness loading #2722 and is outside the scope of this PR's code changes.

Tests: passed

Updated by fullsend fix agent

fullsend-ai-coder Bot added a commit that referenced this pull request Jun 27, 2026
- Reuse composeForgeClient in URL-skill resolution path so the
  already-minted loader token is used instead of independently calling
  resolveToken() (error-handling-gap finding)
- Update github_token input description in action.yml to reflect its
  reduced scope after GH_TOKEN removal (documentation-contract-mismatch)
- Add Repos field assertion to TestMintLoaderToken_Success for
  stronger coverage (test-adequacy)
- Improve mintLoaderToken error message to name the required env vars
  (error-message-style)

Addresses review feedback on #2725
@ggallen

ggallen commented Jun 27, 2026

Copy link
Copy Markdown
Member

/fs-fix fix any issues detailed in #2725 (comment) and also fix the code coverage CI test so that it has > 80% coverage.

@fullsend-ai-coder

fullsend-ai-coder Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ✅ Success · Started 10:23 PM UTC · Completed 10:31 PM UTC
Commit: ea2ca95 · View workflow run →

@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

🔧 Fix agent — iteration 2 (human-triggered)

Added 3 tests to achieve 100% coverage on mintLoaderToken (up from 80%), addressing the >80% patch coverage CI requirement. The remaining review findings were already addressed in the current PR or previous iteration, or are infrastructure concerns rather than code issues.

Fixed (1):

  1. test-adequacy: mintLoaderToken patch coverage below 80%: Added three new tests (InvalidTokenPattern, ResolveMintReposError, SuccessWithMasking) to cover all branches of mintLoaderToken, bringing coverage from 80% to 100%

Disagreed (4):

  1. error-handling-gap: URL-skill resolution path calls resolveToken() instead of reusing composeForgeClient: Already addressed in the current PR diff: lines 311-312 add 'else if composeForgeClient != nil { forgeClient = composeForgeClient }' before the resolveToken() fallback
  2. infrastructure-dependency: loader role requires infrastructure provisioning: This is an infrastructure deployment prerequisite, not a code issue. The code already falls back gracefully to resolveToken() when the loader mint is unavailable
  3. documentation-contract-mismatch: action.yml github_token description unclear: Already addressed in the current PR diff: the description was updated to 'GitHub token used by setup steps (detect version, download binary, clone repos). Not passed to the fullsend run step, which self-mints a scoped loader token via OIDC.'
  4. error-message-style: terse error message in mintLoaderToken: Already addressed in iteration 1 (commit f9b9ac5): the error message was expanded to include the specific env var names required

Tests: passed

Updated by fullsend fix agent

fullsend-ai-coder Bot added a commit that referenced this pull request Jun 27, 2026
Add three additional test cases to achieve 100% coverage on
mintLoaderToken, addressing the >80% patch coverage requirement:

- TestMintLoaderToken_InvalidTokenPattern: covers the token
  validation error branch
- TestMintLoaderToken_ResolveMintReposError: covers the
  resolveMintRepos failure path
- TestMintLoaderToken_SuccessWithMasking: covers the GITHUB_ACTIONS
  ::add-mask:: workflow command path

Addresses review feedback on #2725
@ggallen

ggallen commented Jun 27, 2026

Copy link
Copy Markdown
Member

/fs-fix rebase to get the latest sources, and also change from "loader" to "reader" role, updating all references as appropriate. Don't forget to change the PR title and description too.

@fullsend-ai-coder

fullsend-ai-coder Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ✅ Success · Started 11:47 PM UTC · Completed 11:55 PM UTC
Commit: ea2ca95 · View workflow run →

…oading

The binary needs a GitHub token to create a ForgeClient for
LoadWithBase() when fetching URL-based skill directories, but
mintAgentToken() requires the harness role — which is only known
after loading. PR #2720 worked around this by passing GH_TOKEN
from action.yml, leaving an over-privileged ambient token.

Add a dedicated "loader" mint role with minimal permissions
(contents:read, metadata:read) and a mintLoaderToken() helper
that runs before LoadWithBase. The binary now self-mints a
short-lived loader token when OIDC is available, falling back
to resolveToken() for local dev. The action.yml GH_TOKEN
injection in the "Run fullsend" step is removed.

Changes:
- internal/mintcore/github.go: add "loader" role to
  canonicalRolePermissions
- internal/cli/run.go: add hasOIDCEnv() and mintLoaderToken()
  helpers; move mintURL resolution before LoadWithBase; wire
  loader mint before resolveToken() fallback
- action.yml: remove GH_TOKEN from "Run fullsend" step
- Sync embedded copy per AGENTS.md rules

Closes #2722
- Reuse composeForgeClient in URL-skill resolution path so the
  already-minted loader token is used instead of independently calling
  resolveToken() (error-handling-gap finding)
- Update github_token input description in action.yml to reflect its
  reduced scope after GH_TOKEN removal (documentation-contract-mismatch)
- Add Repos field assertion to TestMintLoaderToken_Success for
  stronger coverage (test-adequacy)
- Improve mintLoaderToken error message to name the required env vars
  (error-message-style)

Addresses review feedback on #2725
Add three additional test cases to achieve 100% coverage on
mintLoaderToken, addressing the >80% patch coverage requirement:

- TestMintLoaderToken_InvalidTokenPattern: covers the token
  validation error branch
- TestMintLoaderToken_ResolveMintReposError: covers the
  resolveMintRepos failure path
- TestMintLoaderToken_SuccessWithMasking: covers the GITHUB_ACTIONS
  ::add-mask:: workflow command path

Addresses review feedback on #2725
Rename the mint role from "loader" to "reader" to better describe its
purpose (read-only content access). Updates the role definition,
mintReaderToken helper, all tests, action.yml description, and the
embedded copy.

Addresses review feedback on #2722
@fullsend-ai-coder fullsend-ai-coder Bot changed the title feat(#2722): add loader role for self-minting tokens during harness loading feat(#2722): add reader role for self-minting tokens during harness loading Jun 27, 2026
@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

🔧 Fix agent — iteration 3 (human-triggered)

Rebased onto latest main and renamed the mint role from loader to reader across all 6 changed files plus the PR title and description. All tests pass.

Fixed (8):

  1. rebase onto latest main: Rebased the branch onto origin/main to incorporate latest sources
  2. rename loader role to reader in mintcore/github.go (internal/mintcore/github.go): Changed canonicalRolePermissions key from loader to reader
  3. rename loader role to reader in embedded copy (internal/dispatch/gcf/mintsrc/mintcore/github.go.embed): Synced the role rename to the embedded copy
  4. rename mintLoaderToken to mintReaderToken in run.go (internal/cli/run.go): Renamed function, variable, comments, error messages, and UI strings from loader to reader
  5. rename loader test references in run_test.go (internal/cli/run_test.go): Renamed all TestMintLoaderToken_* to TestMintReaderToken_* and updated assertions to match reader role
  6. rename loader test references in github_test.go (internal/mintcore/github_test.go): Updated TestRolePermissions_AllRolesPresent expected list and renamed TestRolePermissions_Loader to TestRolePermissions_Reader
  7. update action.yml description (action.yml): Changed loader token to reader token in github_token input description
  8. update PR title and description: Changed PR title and body to reference reader role instead of loader

Tests: passed

Updated by fullsend fix agent

@ggallen

ggallen commented Jun 28, 2026

Copy link
Copy Markdown
Member

fs-fix fix all issues raised in #2725 (comment)

@ggallen

ggallen commented Jun 28, 2026

Copy link
Copy Markdown
Member

/fs-fix fix all issues raised in #2725 (comment)

@fullsend-ai-coder

fullsend-ai-coder Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ✅ Success · Started 2:28 PM UTC · Completed 2:34 PM UTC
Commit: ea2ca95 · View workflow run →

@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

🔧 Fix agent — iteration 4 (human-triggered)

All 5 findings from the review comment have been verified against the current code (HEAD 303f787). All were already addressed by previous fix iterations (commits 997872a, 2434220, 303f787) that ran after the review was posted on SHA 19af916. The infrastructure-dependency finding is an operational prerequisite, not a code change. No new code changes are needed.

Disagreed (5):

  1. error-handling-gap: URL-skill resolution path calls resolveToken() instead of reusing composeForgeClient: Already fixed in a previous iteration. Lines 312-313 of internal/cli/run.go already reuse composeForgeClient as a fallback before resolveToken(). The resolveToken() call at line 315 is now only reached when composeForgeClient is nil (correct last-resort behavior).
  2. infrastructure-dependency: reader role requires infrastructure provisioning (GitHub App, PEM, service config): This is an operational prerequisite, not a code change. The reviewer acknowledges the code fails gracefully via resolveToken() fallback. Infrastructure provisioning is tracked in issue mint: add loader role so the binary self-mints tokens for URL-based harness loading #2722.
  3. documentation-contract-mismatch: github_token input description doesn't clarify reduced scope: Already addressed in a previous iteration. The action.yml description (lines 27-29) now reads: 'GitHub token used by setup steps (detect version, download binary, clone repos). Not passed to the fullsend run step, which self-mints a scoped reader token via OIDC.' This directly addresses the reviewer's concern.
  4. test-adequacy: TestMintReaderToken_Success doesn't assert Repos field: Already addressed in a previous iteration. Line 2543 of internal/cli/run_test.go asserts: assert.Equal(t, []string{"my-repo"}, capturedReq.Repos). The reviewer was likely looking at an older SHA (19af916) before this was added.
  5. error-message-style: error message at run.go:2151 is terse: Already improved in a previous iteration. The error message now reads: 'reader mint unavailable: mint URL and OIDC env vars (ACTIONS_ID_TOKEN_REQUEST_URL, ACTIONS_ID_TOKEN_REQUEST_TOKEN) are both required' which is descriptive and includes the specific env var names needed.

Tests: passed

Updated by fullsend fix agent

@ggallen

ggallen commented Jun 28, 2026

Copy link
Copy Markdown
Member

/fs-review

@fullsend-ai-review

fullsend-ai-review Bot commented Jun 28, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 2:50 PM UTC · Completed 3:05 PM UTC
Commit: ea2ca95 · View workflow run →

@fullsend-ai-review fullsend-ai-review Bot added requires-manual-review Review requires human judgment component/mint Token mint and cross-boundary credentials component/harness Agent harness, config, and skills loading labels Jun 28, 2026

@ragnar-howler ragnar-howler left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review — feat(#2722): reader role for self-minting tokens

Decision: ✅ Approve

Summary

This is a clean security improvement. Removes the over-privileged ambient GH_TOKEN from the run step and replaces it with a minimal-permission OIDC-minted reader token (contents:read, metadata:read) specifically scoped for LoadWithBase. The fallback chain (mintReaderTokenresolveToken) preserves local dev ergonomics.

Positive

  • Security uplift is real. Scoped reader token eliminates the ambient token attack surface during harness loading. Previously any URL-skill fetch carried full repo write permissions.
  • Mint-before-load ordering is correct — mintURL is now resolved before LoadWithBase, so the reader token is available at the right point in the call chain.
  • Token masking (::add-mask::) is handled before the token touches any log output.
  • Test coverage is thorough. All branches covered: no OIDC env, no mint URL, mint error, invalid token pattern, repo resolution failure, and masking in GH Actions context.
  • Embedded copy sync per AGENTS.md rules — no drift risk.

One Concern (non-blocking)

If mintReaderToken fails in CI (e.g., transient OIDC error), the fallback hits resolveToken(). Since GH_TOKEN is no longer injected into the run step env, resolveToken will also fail in CI. This means a mint failure → total forge client loss → URL-based skills silently unavailable.

This is probably acceptable (OIDC is reliable in practice), but worth a follow-up issue to add an explicit warning log when mint fails and fallback also fails, so operators aren't left debugging a silent empty forge client.

Verdict

Solid. The security benefit outweighs the edge-case risk above. ifireball already approved — this is ready to merge.

@ggallen

ggallen commented Jul 1, 2026

Copy link
Copy Markdown
Member

Closing as superseded by #2736. The chicken-and-egg token problem this solved (needing a ForgeClient token before the harness role was known) no longer exists — skill directory fetching now uses git sparse checkout instead of the GitHub Contents API, removing the pre-load token dependency entirely.

@ggallen ggallen closed this Jul 1, 2026
@fullsend-ai-retro

fullsend-ai-retro Bot commented Jul 1, 2026

Copy link
Copy Markdown

🤖 Finished Retro · ✅ Success · Started 11:30 AM UTC · Completed 11:37 AM UTC
Commit: 303f787 · View workflow run →

@fullsend-ai-retro

Copy link
Copy Markdown

Retro: PR #2725 — add reader role for self-minting tokens during harness loading

Outcome: Closed without merging — superseded by #2736, which eliminated the pre-load token dependency entirely by switching to git sparse checkout.

Timeline: The code agent produced a technically sound implementation (new reader mint role, mintReaderToken() helper, 231 lines across 6 files). The review agent found legitimate issues (error-handling gaps, documentation mismatches, test adequacy). The fix agent resolved them across 4 iterations — though iteration 4 was a no-op (all findings already resolved). Two human approvals were received before the PR was closed 3 days later.

What went well:

  • Review agent caught real issues at appropriate severity levels (error-handling-gap, documentation-contract-mismatch, test-adequacy)
  • Fix agent was responsive and effective — iterations 1-3 each addressed concrete issues
  • The second review passed clean, confirming all findings were resolved
  • The overall code quality was high — the PR received two human approvals

What was wasteful:

  • The entire PR was superseded — ~4 agent runs (code + 3 productive fixes) plus 2 reviews were rendered moot
  • Fix iteration 4 was a no-op: the human re-pointed the fix agent at the same review comment after all findings were already resolved, resulting in 6 minutes of agent time confirming no changes needed
  • This retro itself is running on a closed-without-merge PR

Existing issues that cover the main improvement opportunities:

  • #2176 — Skip retro dispatch for closed-without-merge PRs with immediate successor (directly applicable here)
  • #849 — Add 'strategic fitness' evaluation dimension to review agent (would help catch approach-level concerns)
  • #2111 — Review agent: detect review-cycle churn and suggest approach reassessment
  • #1398 — Skip review dispatch for PRs labeled superseded-by-companion

No new proposals filed — the systemic improvements are already tracked in existing issues. The PR being superseded was a normal engineering outcome (a simpler approach was discovered during parallel work) that is difficult to prevent through agent tooling.

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

Labels

component/harness Agent harness, config, and skills loading component/mint Token mint and cross-boundary credentials ready-for-review Triggers review agent dispatch requires-manual-review Review requires human judgment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

mint: add loader role so the binary self-mints tokens for URL-based harness loading

3 participants