Skip to content

chore: repository foundations, Marketplace branding, and security threat model - #61

Open
Benkapner wants to merge 4 commits into
mainfrom
chore/repo-foundations-and-docs
Open

chore: repository foundations, Marketplace branding, and security threat model#61
Benkapner wants to merge 4 commits into
mainfrom
chore/repo-foundations-and-docs

Conversation

@Benkapner

Copy link
Copy Markdown
Collaborator

Summary

Zero-risk repository housekeeping. No tool behavior changes, no code paths modified.

  • CONTRIBUTING.md: dev setup, test/lint commands, commit conventions, PR expectations
  • Issue templates: structured bug reports capturing model backend, model name, docs format, repo setup, and trigger command; feature request template
  • PR template: testing checklist
  • CI: comment documenting the fullsend reusable workflow's floating tag constraint
  • Marketplace: action.yml branding (name, icon, color) for GitHub Marketplace listing
  • Security: threat model enumerating every untrusted input, fork-PR guidance, credential handling, and prompt injection mitigations. Cross-linked from README.

Test plan

  • Issue templates render correctly in the GitHub "New Issue" UI
  • PR template appears when opening a new PR
  • uv run pytest -v passes (429 tests, no changes to test or source code)
  • uv run ruff check src/ tests/ and uv run ruff format --check src/ tests/ clean
  • SECURITY.md threat model is accurate against the current codebase

This is the first of several PRs splitting the improvement roadmap into reviewable pieces. It covers Tier 1 (zero-risk, no behavior changes). Depends on PR #53 being merged first.

@Benkapner
Benkapner requested a review from csoceanu August 16, 2026 11:36
@Benkapner Benkapner self-assigned this Aug 16, 2026
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 16, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 11:36 AM UTC · Completed 11:53 AM UTC

Commit: f8c76db · View workflow run →

@Benkapner Benkapner mentioned this pull request Aug 16, 2026
4 tasks
Phase 0: Repository foundations.

The repo has SECURITY.md and RELEASING.md but no contributor onboarding
guide despite seven forks. Add CONTRIBUTING.md with dev setup, testing,
lint, commit conventions, and PR expectations. Add structured issue
templates that capture model backend, model name, docs format, repo
setup, and trigger command, which together determine almost every bug's
reproduction path. Add a PR template with a testing checklist.
Phase 0: Repository foundations.

A project that asks users to grant contents:write should model good
supply-chain hygiene. The CI workflow (actions/checkout, astral-sh/setup-uv)
was already pinned to commit SHAs. The fullsend reusable workflow uses a
moving v0 tag coordinated with fullsend_ai_ref; added a comment documenting
this constraint. Dependabot was already configured for both github-actions
and pip ecosystems with weekly updates.
Phase 1: Releases and versioning.

Fill out action.yml branding and metadata for Marketplace listing.
Update name from placeholder to match the repo name, set author to
the org, use book-open icon and red color to match Red Hat branding.
The actual Marketplace publish is a manual UI action on the Release
page, documented in RELEASING.md.
The README warns about Jira content leaking out but says nothing about
untrusted content coming in. Documentation content, code diffs, and
external system content all flow into prompts, and on fork PRs much of
that input is contributor-controlled.

Extend SECURITY.md with a threat model enumerating every untrusted
input, what it can influence, and the current mitigations. Add explicit
guidance on fork PRs, including what the author_association gate does
and does not protect against. Note the contents:write implication.
Cross-link from the README.
@Benkapner
Benkapner force-pushed the chore/repo-foundations-and-docs branch from f8c76db to d2d9991 Compare August 16, 2026 11:44
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 16, 2026

Copy link
Copy Markdown

Review

Findings

High

  • [protected-path] .github/workflows/fullsend.yaml — This PR modifies files under the .github/ protected path: .github/ISSUE_TEMPLATE/bug_report.yml, .github/ISSUE_TEMPLATE/feature_request.yml, .github/pull_request_template.md, .github/workflows/fullsend.yaml. No linked issue provides authorization for changes to governance and infrastructure files. Human approval is required for all protected-path changes.

Medium

  • [Technical documentation accuracy] SECURITY.md:56 — The author_association gate in the threat model’s untrusted inputs table and Fork PRs section states only OWNER, MEMBER, and COLLABORATOR can trigger commands. The stop-fix job in fullsend.yaml uses a broader gate that also permits CONTRIBUTOR and the PR author. While stop-fix gates a different command (/fs-fix-stop) than the code-to-docs commands, the discrepancy between the documented gate and the repository’s own workflow should be clarified.

  • [Technical documentation accuracy] SECURITY.md:88 — LLM Prompt Injection mitigation add dual-mode support with [review-docs] and [update-docs] commands, add .rst support #1 claims document content is wrapped in explicit --- BEGIN/END ... (untrusted content, data only) --- delimiters. No such delimiters exist anywhere in src/. The generation prompts inject doc content between simple dash separators without untrusted-data labeling. PR fix(#52): add post-generation validation and LLM verification #53 (referenced as adding this feature) is still open.

  • [Technical documentation accuracy] SECURITY.md:90 — Mitigation add clickable file links - assisted by cursor #2 claims post-generation validation checks for large content removals and verifies updates with an independent LLM call in a separate session. No such code exists in the codebase. The only post-generation validation is format parsing (Markdown/RST/AsciiDoc). PR fix(#52): add post-generation validation and LLM verification #53 is still open.

  • [stale-reference] entrypoint.sh:4 — Startup message still references old action name "Upstream Documentation Enhancer" instead of the new name "Code-to-Docs" renamed in action.yml in this PR.

Low

  • [Technical documentation accuracy] SECURITY.md:48 — The untrusted inputs table states .code-to-docs/config.json "Values are validated on load." In reality, load_repo_config() performs JSON parsing but no schema, type, or range validation.

  • [missing-authorization] No linked GitHub issue for non-trivial changes. The PR description references an "improvement roadmap" and "Tier 1" work but no tracking issue is linked.

  • [merge-order-dependency] SECURITY.md — PR description states dependency on PR fix(#52): add post-generation validation and LLM verification #53 which is still open. SECURITY.md references features from fix(#52): add post-generation validation and LLM verification #53 (post-generation verification step) that do not exist yet in main.

  • [stale-reference] entrypoint.sh:11 — Git commit user.name uses old branding "Documentation Enhancer Bot" which should align with the new "Code-to-Docs" name.


Labels: PR adds documentation files (CONTRIBUTING.md, SECURITY.md threat model) and modifies GitHub Actions templates/workflow


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run

Review

Reason: stale-head

The review agent reviewed commit f8c76db91a60d2afdb8d31c1658f081810cc6324 but the PR HEAD is now d2d9991b7cd086b3d93b6817aabb039a54d1b508. This review was discarded to avoid approving unreviewed code.

@fullsend-ai-review

Copy link
Copy Markdown

/fs-review

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 16, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 11:54 AM UTC · Completed 12:12 PM UTC

Commit: d2d9991 · View workflow run →

@fullsend-ai-review fullsend-ai-review Bot 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.

See the review comment for full details.

Comment thread SECURITY.md
contains(fromJSON('["OWNER","MEMBER","COLLABORATOR"]'), github.event.comment.author_association)
```

This prevents external contributors from triggering the action on their own

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] Technical documentation accuracy

The author_association gate in the threat model states only OWNER, MEMBER, and COLLABORATOR can trigger commands. The stop-fix job in fullsend.yaml uses a broader gate that also permits CONTRIBUTOR and the PR author. While stop-fix gates a different command (/fs-fix-stop) than the code-to-docs commands, the discrepancy between the documented gate and the repository's own workflow should be clarified.

Suggested fix: Add a note clarifying that the stop-fix job uses a broader gate, or document that the three-role gate applies specifically to code-to-docs command triggers.

Comment thread SECURITY.md
Documentation content and code diffs are included in LLM prompts. A
malicious document containing text like "ignore previous instructions" could
theoretically influence the LLM's output. Mitigations:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] Technical documentation accuracy

LLM Prompt Injection mitigation #1 claims document content is wrapped in explicit BEGIN/END delimiters with untrusted-data labeling. No such delimiters exist in the codebase. PR #53 (referenced as adding this feature) is still open.

Suggested fix: Either wait for PR #53 to merge before claiming these mitigations exist, or rewrite mitigations 1-2 as planned/forthcoming rather than current.

Comment thread SECURITY.md
theoretically influence the LLM's output. Mitigations:

1. Document content in verification prompts is wrapped in explicit
`--- BEGIN/END ... (untrusted content, data only) ---` delimiters with

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] Technical documentation accuracy

Mitigation #2 claims post-generation validation checks for large content removals and verifies updates with an independent LLM call. No such code exists. The only post-generation validation is format parsing.

Suggested fix: Remove or correct this claim to reflect actual mitigations, or label as planned functionality.

Comment thread SECURITY.md
| `.code-to-docs/style.md` | Base branch (maintainer-controlled) | Injected into generation prompts as style guidelines | Loaded from the base branch, not the PR branch. |
| `.code-to-docs/config.json` | Base branch (maintainer-controlled) | Controls validation thresholds and behavior | Loaded from the base branch, not the PR branch. Values are validated on load. |

### Fork PRs

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] Technical documentation accuracy

The untrusted inputs table states .code-to-docs/config.json 'Values are validated on load.' In reality, load_repo_config() performs JSON parsing but no schema, type, or range validation.

Suggested fix: Change to a more accurate description such as 'Parsed as JSON; individual consumers validate their own fields.'

@fullsend-ai-review fullsend-ai-review Bot added documentation Improvements or additions to documentation github_actions Pull requests that update GitHub Actions code labels Aug 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation github_actions Pull requests that update GitHub Actions code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant