Reported issues for oss-autopilot
Pod holds 24 of 79 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to oss-autopilot.
Most discussed
feat: configurable per-repo extraction categories (extend beyond Code Style / Process / Architecture / Testing / Other)
Summary
The extract-learnings MCP prompt produces a structured markdown document with five fixed categories: Code Style, Process, Architecture, Testing, Other. These five are baked into the prompt and produce uniform output across all repos.
This proposes making the category set extensible per repo — the user can declare additional or replacement categories for a specific repo, and the extraction prompt respects that taxonomy.
This is a real-but-bigger-scope change. The five defaults are
Read the thread · 2026-05-08 · closed · 1 comment
fix: pr-compliance-checker references nonexistent read MCP/CLI; bundle fix with extract-to-core, guidelines integration, repo PR template lookup, and CI gate against future drift
Summary
The pr-compliance-checker agent has two bugs and three improvements that share root causes. The bugs cause the agent to silently run on its slowest fallback code path. The improvements move it from "static scoring against generic best practices" to "scoring tuned to the target repo, using project data that already exists."
This is one issue because the fix surface overlaps. Resolving the broken read reference forces a touch on the agent's data-access layer, which is the same pla
Read the thread · 2026-05-07 · closed · 1 comment
umbrella: 10 medium-priority audit findings (M1–M10)
Summary
Umbrella for medium-priority findings from the 2026-04-28 audit. Each can be addressed in its own PR.
Checklist
- M1: 412-conflict merge path is last-write-wins for state.json (`gist-state-store.ts:405-429`). After fetching the remote, the code re-applies all dirty cached files. Now that guidelines files are also dirty content, a concurrent maintainer update can be silently clobbered. Contradicts the optimistic-concurrency contract in `state.ts:256-264`. Fix: surface
Read the thread · 2026-05-04 · closed · 1 comment
Add upper bound cap on search maxResults
Problem
The search [count] CLI command validates that the count is a positive integer but imposes no upper bound (cli-registry.ts lines 121-127):
const parsed = Number(count);
if (!Number.isFinite(parsed) || parsed < 1 || !Number.isInteger(parsed)) {
throw new Error(`Invalid count "${count}". Must be a positive integer.`);
}
maxResults = parsed; // No ceiling check
A user or MCP tool can request maxResults=10000. While GitHub caps individual search results at
Read the thread · 2026-03-04 · closed · 1 comment
Pin npx version in .mcp.json to prevent supply chain risk
Problem
.mcp.json runs the MCP server via unpinned npx:
{
"mcpServers": {
"oss-autopilot": {
"command": "npx",
"args": ["@oss-autopilot/mcp"]
}
}
}
Without a version pin, npx resolves to the latest published version when the package isn't locally cached. If the npm package were compromised (credential theft, rogue release), users would silently execute malicious code.
Proposed Fix
Pin to the current version:
"args": ["@oss-autopilot
[Read the thread](https://github.com/costajohnt/oss-autopilot/issues/551) · 2026-03-04 · closed · 1 comment
### Remove silent auto-pull in session-start.sh
## Problem
`hooks/session-start.sh` runs an unattended `git pull --ff-only` against the remote repository on every Claude Code session start (lines 13-17):
```bash
MARKETPLACE_DIR="${HOME}/.claude/plugins/marketplaces/oss-autopilot"
if [ -d "${MARKETPLACE_DIR}/.git" ]; then
(cd "${MARKETPLACE_DIR}" && git pull --ff-only) >/dev/null 2>&1 || true
fi
This silently fetches and executes new code from the remote without:
- User confirmation
- Integrity verification (no hash/signature check)
Read the thread · 2026-03-04 · closed · 1 comment
Add README.md for packages/mcp-server
Problem
@oss-autopilot/mcp is published to npm at v1.0.2, but the packages/mcp-server/ directory has no README.md. The npm package page is blank — this is a trust red flag for potential users evaluating the package.
The extensive MCP surface documentation exists in docs/plans/2026-02-28-mcp-server-design.md but is not surfaced in a user-facing README.
Expected
A packages/mcp-server/README.md that covers:
- What the MCP server provides (21 tools, 5 resources, 3 prompts)
- Inst
Read the thread · 2026-03-04 · closed · 1 comment
security: add SRI to CDN scripts and auth to MCP HTTP mode
Description
Two lower-severity security items:
1. External scripts without Subresource Integrity (Low)
File: `packages/core/src/commands/dashboard-templates.ts:22-27` Chart.js loaded from `cdn.jsdelivr.net` without `integrity` attribute. If the CDN is compromised, malicious JS could be injected. Fix: Add `integrity` and `crossorigin` attributes to the Chart.js script tag.
2. MCP HTTP server has no authentication (Medium)
File: `packages/mcp-server/src/index.t
Read the thread · 2026-03-04 · closed · 1 comment
Most recent
Encode maintainer-review conventions into the contribution workflow
Problem
The tool's PR-review-response workflow doesn't currently encode the maintainer-review patterns that repeatedly show up across contribution sessions. These are patterns an agent should apply automatically when drafting a fix or responding to review feedback, not something a human has to remember to paste into context each time.
Patterns to encode
- Minimize public API surface. When fixing a reported bug, prefer fixing the behavior inside existing public APIs over adding new
Read the thread · 2026-07-11 · closed · 0 comments
Fence PR/issue titles and fork ref names on MCP prompt and resource surfaces
Severity: low (titles are short; but the MCP host LLM never sees the agents' injection-awareness blocks, so the agent-side mitigation does not apply on these surfaces)
Unfenced title paths where the consumer is an arbitrary MCP host LLM:
- prompts.ts:76 (
PR: ${data.pr.title}in respond-to-pr), :168 (### ${b.prTitle}in extract-learnings), :48 (triage injects JSON.stringify(digest) with raw openPRs[].title). Bodies in the same prompts ARE fenced. - resources.ts:108,175: fenceFetchedPR wraps
Read the thread · 2026-06-12 · closed · 0 comments
Runtime --json schema validation binds for a minority of commands; move has a schema that is not wired
Severity: medium
move exports MoveOutputSchema and its contract test validates goldens against it, but the registry's executeAction call passes no schema argument (cli-registry.ts:1358-1366), so the runtime validation path can never fire for move.
Broader: state, vet, vet-list, track, comments, shelve, unshelve, dismiss, undismiss, stats, startup, and all 5 guidelines subcommands hit the unvalidated outputJson(data) branch with no exported Zod schema; of 15 *.contract.test.ts files, only 5
Read the thread · 2026-06-12 · closed · 0 comments
mcp-server test files are never typechecked: the tests-tsconfig gate is core-only
Severity: medium (same failure class the core tsconfig.tests.json gate fixed: fixtures with missing required fields compile silently)
packages/mcp-server/tsconfig.json:18 excludes **/*.test.ts; the typecheck script is plain tsc --noEmit (core chains tsc --noEmit -p tsconfig.tests.json). eslint additionally applies disableTypeChecked to all test files (eslint.config.js:166-178), so no type-aware tooling sees the 8 mcp-server test files at all. Dashboard is fine (its tsconfig includes src/*
Read the thread · 2026-06-12 · closed · 0 comments
MCP repair tools (config/setup/init/state-unlink) are bricked by hard gist-init errors
Severity: high (DA-verified)
wrapTool awaits ensureGistInit() before every tool body (packages/mcp-server/src/tools.ts:182). ensureGistInit (tools.ts:126-128) only soft-resolves degraded/no-token/state-unreadable; hard errors propagate. ensureGistPersistence → getStateManagerAsync rethrows ConfigurationError (state.ts:1076), and GistPermissionError/GistCorruptError both extend ConfigurationError (errors.ts:49,69; thrown at gist-state-store.ts:676,753). So the reject hits
Read the thread · 2026-06-12 · closed · 0 comments
Gist mode: config set / setup / init mutations are never checkpointed and silently revert
Severity: high (DA-verified)
config.ts, setup.ts, and init.ts contain zero checkpoint/maybeCheckpoint calls (contrast move.ts:62, dismiss.ts:41, shelve.ts:51). updateConfig → autoSave(), and in gist mode saveToDisk writes only the local cache file. The CLI process exits immediately after, so the mutation is never pushed.
Bootstrap takes the Gist verbatim as source of truth (fetchAndCache(gistId), gist-state-store.ts:223, 686-712 — no field-level merge, local cache read back only in
Read the thread · 2026-06-12 · closed · 0 comments
MCP server never reloads state: one external CLI write bricks every MCP mutation via stale-mtime CAS
Severity: high (DA-verified)
wrapTool (packages/mcp-server/src/tools.ts:179-216) runs only ensureGistInit() then the tool body. No reloadIfChanged/refreshFromGist call exists anywhere in packages/mcp-server (grep). The only production reload sites are save()'s own allowReloadAndLoseMutation path and dashboard-server.ts (a different process).
Local mode (the default): a long-lived stdio MCP server holds lastLoadedMtimeMs from boot. Any CLI command in a terminal writes state.json a
Read the thread · 2026-06-12 · closed · 0 comments
First-time Gist migration renames state.json, permanently dropping the migrating machine out of gist mode
Severity: critical (DA-verified, full static trace; not executed live)
StateManager.createWithGist (packages/core/src/core/state.ts:186-194): when migrationResult.migrated, it does fs.renameSync(statePath, statePath + '.pre-gist-migration'). In gist mode save() only ever writes state-cache.json (state.ts:327-342) and nothing ever recreates state.json.
ensureGistPersistence peeks state.json and returns 'local-mode' on ENOENT (state.ts:1138). The surviving `~/.oss-autopilot/gis
Read the thread · 2026-06-12 · closed · 0 comments
chore: verification-audit hardening batch — atomic list write, MCP verify-issue execution test, attentionBucket stamp test, freshShelved partition test, CLI display coverage
Small hardening + test-gap items from the 2026-06-11 verification audit
- list-move-tier.ts uses bare `fs.writeFileSync` on the curated list while sibling list-mark-done documents and implements tmp+rename for crash safety (and state-persistence has an atomic-write helper). Use the same atomic write.
- MCP `verify-issue` handler is never executed in tests — tools-execution.test.ts mocks `runVerifyIssue` but no test calls the tool; a miswired `wrapTool(runVet)` would pass t
Read the thread · 2026-06-12 · closed · 0 comments
security: lastMaintainerComment.body reaches agents unfenced and is missing from the documented exception list
Problem
`FetchedPR.lastMaintainerComment.body` is a 200-char excerpt of the most recent non-user, non-bot comment (review-analysis.ts) — attacker-controllable on any public PR. It flows raw into agent-facing output via the `daily` MCP tool (`digest.openPRs`) and the `oss://prs` resource. The untrusted-content wiring (#1372/#1396) fences comment bodies in runComments / fetchPRCommentBundle / toDailyOutput's commentedIssues, but not this field, and workflows/reference.md's "NOT pre-fe
Read the thread · 2026-06-12 · closed · 0 comments
bug: MCP gist init still silently degrades to local writes on transient failures — the #1368 retry path is dead code
Problem
The #1368 fix replaced the pre-await boolean with a memoized promise that clears on rejection so the next tool call retries. But neither failure mode the fix's own comment cites ("one transient failure (token fetch, network) permanently skipped Gist init") ever rejects:
getGitHubTokenAsync(packages/core/src/core/auth.ts) latchestokenFetchAttempted = truebefore the try, catches all errors, and returnsnull.ensureGistPersistence(null)isif (!token) return— it RESOLV
Read the thread · 2026-06-12 · closed · 0 comments
test(flake): mcp-server HTTP transport tests collide with ephemeral ports (EADDRINUSE)
Observed on a PR matrix run (Node 22 ubuntu, coverage step): index.test.ts > MCP server HTTP transport > GET /mcp returns 405 failed with listen EADDRINUSE: 127.0.0.1:59382. The suite's randomPort() returns 10000 + random(50000) with no availability check, which overlaps the Linux ephemeral range (32768-60999), so a collision with any OS-assigned socket on a busy runner kills the spawned server.
Fix direction: have the spawn helper retry with a fresh port on an EADDRINUSE exit (bounded,
Read the thread · 2026-06-11 · closed · 0 comments
feat(guidelines): add a 'guidelines list' subcommand backed by listGuidelinesRepos()
Surfaced while fixing #1376: the /oss-guidelines command needs to enumerate repos with stored guidelines, but no CLI path exists. state --show --json carries only persistence/gistId/lastRunAt, guidelines view requires a repo, and StateManager.listGuidelinesRepos() is consumed only by the MCP resources (oss://repo/{owner}/{repo}/guidelines). The command doc now enumerates via MCP resources with an ask-the-user fallback, which is awkward for the CLI story.
Proposal: `guidelines list --jso
Read the thread · 2026-06-11 · closed · 0 comments
docs: broken CLI references in oss-guidelines.md, setup-oss.md, and workflows/reference.md
What
Several plugin prompt files reference CLI subcommands or flags that do not exist in the registry, so the documented flows error as written. Verified against packages/core/src/cli-registry.ts and packages/mcp-server/src/tools.ts.
commands/oss-guidelines.md:24runscli.bundle.cjs guidelines list --json. There is noguidelines listsubcommand (onlyview,store,reset,fetch-corpus). The offered MCP fallback (guidelines-get) requires arepoargument and cannot enum
Read the thread · 2026-06-11 · closed · 0 comments
test: agents-contract REGISTERED_MCP_TOOLS mirror is missing features
What
The hand-mirrored REGISTERED_MCP_TOOLS set in packages/core/src/agents-contract.test.ts (~lines 39-69, 29 entries) is missing features, which is registered in packages/mcp-server/src/tools.ts (~line 190). The CI grep counts 30.
Impact
Latent today (no agent currently references the features tool), but the moment any agent's frontmatter or body references it, the contract test falsely fails it as unregistered. The comment says the duplication avoids a cross-package import,
Read the thread · 2026-06-11 · closed · 0 comments
security: wrapUntrustedContent fence is never called at runtime; injection defense is prompt-advisory only
What
wrapUntrustedContent (packages/core/src/core/untrusted-content.ts), the escape-proof <github-content> fence with its own round-trip test and 100+ payload corpus (prompt-injection-corpus.test.ts), is never invoked in any runtime path. The only non-test references are the definition, the core/index.ts export barrel, and .d.ts output.
Meanwhile the actual data paths emit raw GitHub-authored text into agent-facing JSON:
packages/core/src/commands/comments.ts:134,139,145(`
Read the thread · 2026-06-11 · closed · 0 comments
The remaining reports are on the project's issue tracker.