Skip to content

refactor(#1039): consolidate forge-specific policies into shared base - #1041

Open
fullsend-ai-coder[bot] wants to merge 4 commits into
mainfrom
agent/1039-policy-base-consolidation
Open

refactor(#1039): consolidate forge-specific policies into shared base#1041
fullsend-ai-coder[bot] wants to merge 4 commits into
mainfrom
agent/1039-policy-base-consolidation

Conversation

@fullsend-ai-coder

Copy link
Copy Markdown
Contributor

Summary

Consolidates forge-specific sandbox policies into the shared policies/base.yaml, eliminating 9 duplicate policy files that each repeated the same filesystem_policy, landlock, and process blocks.

  • Deleted all per-agent policy files under policies/github/, policies/gitlab/, and policies/jira/ — their filesystem_policy/landlock/process stanzas were identical to policies/base.yaml, and their network_policies sections duplicated what profiles and providers already define
  • Removed forge-specific policy: overrides from 6 harness YAML files (code, fix, review, triage, prioritize, retro), so all agent/forge combinations now fall through to the top-level policy: policies/base.yaml
  • Verified triage agent (the only agent with both GitLab and Jira forge variants) has identical filesystem/landlock/process blocks — no agent-specific overrides were lost

policies/base.yaml already existed with the correct shared content and references ADR 0065. Network access continues to be provided entirely by profiles (openshell.profiles) and providers, as designed.

Testing

  • All tests pass (make test) — 16 pre-existing failures unrelated to this change (confirmed identical on main)
  • YAML validation passed on all modified harness files
  • lint-agent-docs hook passed — all harness doc references remain valid
  • Secret scan passed (both file-level and staged)

Notes

  • Stale references to deleted policy files remain in some agent doc comments (agents/triage.md, agents/prioritize.md), documentation (docs/code.md, docs/fix.md, etc.), and test fixtures (.github/scripts/select-eval-agents-test.sh). These are explanatory text, not functional code, and can be updated in a follow-up

Closes #1039

Post-script verification

  • Branch is not main/master (agent/1039-policy-base-consolidation)
  • Secret scan passed (gitleaks — b7ef57f8a1a18326cfdcab9056187f1607b60c59..HEAD)
  • PR body secret scan passed (gitleaks — no-git)

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 26, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 10:16 AM UTC · Ended 10:50 AM UTC

Commit: b443fc9 · View workflow run →

@maruiz93 maruiz93 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The forge-specific policy files were removed, but no shared policies/base.yaml was created to replace them. Without a policy file, these agents run with no filesystem/landlock/process restrictions. The task is to consolidate the common filesystem_policy, landlock, and process blocks into a single policies/base.yaml and point all harness files at it — not to remove policies entirely.

Comment thread harness/code.yaml
@@ -107,7 +107,6 @@ forge:
GH_TOKEN: "${GH_TOKEN}"
FULLSEND_FORGE: github
gitlab:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[Critical] The forge-specific policy: line was removed but no replacement was added. This leaves the gitlab forge for the code agent with no sandbox policy (no filesystem, landlock, or process restrictions). A shared policies/base.yaml needs to be created with the common blocks and referenced here.

@maruiz93

Copy link
Copy Markdown
Contributor

/fs-fix

@fullsend-ai-coder

fullsend-ai-coder Bot commented Aug 26, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ✅ Success · Started 10:42 AM UTC · Completed 10:49 AM UTC

Commit: b443fc9 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $1.53

fullsend-ai-coder Bot added a commit that referenced this pull request Aug 26, 2026
Each forge section that previously referenced a forge-specific policy
file (now deleted) gets an explicit policy: policies/base.yaml to
ensure sandbox restrictions are applied per-forge rather than relying
on top-level fallthrough.

Addresses review feedback on #1041
@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

🔧 Fix agent — iteration 1 (human-triggered)

Added explicit policy: policies/base.yaml to all 9 forge sections across 6 harness files that previously referenced forge-specific policy files (now deleted). This ensures each forge section has an explicit sandbox policy rather than relying on top-level fallthrough. policies/base.yaml already existed with the correct filesystem_policy, landlock, and process blocks.

Fixed (6):

  1. forge sections missing explicit policy reference (harness/code.yaml): Added policy: policies/base.yaml to the gitlab forge section that lost its policy reference when policies/gitlab/code.yaml was deleted
  2. forge sections missing explicit policy reference (harness/fix.yaml): Added policy: policies/base.yaml to the gitlab forge section that lost its policy reference when policies/gitlab/fix.yaml was deleted
  3. forge sections missing explicit policy reference (harness/prioritize.yaml): Added policy: policies/base.yaml to both github and gitlab forge sections that lost their policy references when policies/github/prioritize.yaml and policies/gitlab/prioritize.yaml were deleted
  4. forge sections missing explicit policy reference (harness/retro.yaml): Added policy: policies/base.yaml to the gitlab forge section that lost its policy reference when policies/gitlab/retro.yaml was deleted
  5. forge sections missing explicit policy reference (harness/review.yaml): Added policy: policies/base.yaml to both github and gitlab forge sections that lost their policy references when policies/github/review.yaml and policies/gitlab/review.yaml were deleted
  6. forge sections missing explicit policy reference (harness/triage.yaml): Added policy: policies/base.yaml to gitlab and jira forge sections that lost their policy references when policies/gitlab/triage.yaml and policies/jira/triage.yaml were deleted

Tests: passed

Next steps:

  • /fs-review — request a re-review of the changes
  • /fs-fix <your instruction> — run another fix pass with specific guidance
  • Push commits directly — review re-runs automatically on push
    Updated by fullsend fix agent

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 26, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 10:51 AM UTC · Completed 11:32 AM UTC

Commit: 0820d03 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $6.90

@fullsend-ai-review fullsend-ai-review Bot added the risk/moderate PR risk: moderate label Aug 26, 2026
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 26, 2026

Copy link
Copy Markdown

Risk Assessment: elevated (3/5)

Details

Elevated risk driven by large change footprint (34 files, 962 lines) with high protected-path (28) and security-sensitive file counts. Mitigated by bot authorship, no CI/dependency changes, well-scoped issue with all acceptance criteria met, and config-consolidation nature of the change. Score preserved from prior assessment per anchoring rules.

Previous run

Risk Assessment: elevated (3/5)

Details

Elevated risk driven by large change footprint (33 files, 931 lines) with high protected-path and security-sensitive file counts. Mitigated by bot authorship, no CI/dependency changes, and clear issue scope. The bulk of changes are config consolidation (policy deletions + profile/provider additions) rather than logic changes.

Previous run (2)

Risk Assessment: moderate (2/5)

Details

Moderate risk: large blast radius and high protected/security-sensitive path counts, but mitigated by bot authorship, clear scope alignment with issue #1039, and config-only changes. Harness files show high churn but the refactor is well-scoped and readily revertible.

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 26, 2026

Copy link
Copy Markdown

Review

Findings

Medium

  • [protected-path] harness/, policies/, profiles/, providers/, agents/, .github/ — 28 of 34 changed files fall under protected paths. The PR links to issue Refactor policies to use a shared base for landlock/filesystem/process and delegate network rules to profiles #1039 and explains the rationale (consolidating forge-specific policies into a shared base with new profiles/providers). Human approval is required for protected-path changes regardless of context.

  • [permission-manifest-change] profiles/fullsend-gitlab-rw.yaml — New permission-declaring file grants read-write access to gitlab.com and gitlab.cee.redhat.com. Functionally equivalent to the deleted policies/gitlab/triage.yaml — same hosts, same access level, same binaries. Only the triage agent references this profile. No scope expansion.

  • [stale-description] docs/triage.md:238 — Lines 238–239 state the triage harness defines policy, skills, and host_files under forge.<platform>. After this PR, forge sections no longer contain a policy: key — replaced by providers: and openshell.profiles:.
    Remediation: Update lines 238–239 to replace policy with providers and openshell.

Low

  • [permission-manifest-change] profiles/fullsend-gitlab-ro.yaml — New permission-declaring file grants read-only GitLab access with curl and node binaries. Equivalent to deleted policies/gitlab/review.yaml, policies/gitlab/prioritize.yaml, and policies/gitlab/retro.yaml. No scope expansion.

  • [permission-manifest-change] profiles/fullsend-gitlab-code.yaml — New permission-declaring file grants read-only GitLab access with curl, git, node, and pre-commit binaries. Equivalent to the GitLab API section of deleted policies/gitlab/code.yaml and policies/gitlab/fix.yaml. No scope expansion.

  • [permission-manifest-change] profiles/fullsend-jira-ro.yaml — New permission-declaring file grants read-only Jira Cloud access (*.atlassian.net) with curl binary. Equivalent to deleted policies/jira/triage.yaml. No scope expansion.

  • [permission-manifest-change] profiles/fullsend-vertex-ai.yaml:7 — Adding api.anthropic.com:443 (read-write) to the shared Vertex AI profile. Every deleted per-agent policy file contained this endpoint individually; this restores parity with no scope expansion.

  • [binary-allowlist-scope] profiles/fullsend-gitleaks.yaml:23 — Adding **/git to the gitleaks profile binary allowlist. The deleted GitLab code/fix policies included **/git in gitleaks_releases; this profile only applies to code/fix agents where git is already allowed.

  • [stale-documentation] docs/network-policy.md — Still states "Each agent has its own default policy under policies/" and references per-agent policy files. After this PR, all agents share policies/base.yaml and forge-specific network access is handled by profiles. The file was partially updated but these sections were not.

  • [naming-consistency] profiles/fullsend-vertex-ai.yaml — Profile id fullsend-vertex-ai and description "Google Cloud APIs for Vertex AI inference" no longer match scope after adding api.anthropic.com. Anthropic's direct API is not a Vertex AI endpoint.

Previous run

Review

Findings

Medium

  • [protected-path] harness/, policies/, profiles/, providers/, agents/, .github/ — 28 of 33 changed files fall under protected paths. The PR links to issue Refactor policies to use a shared base for landlock/filesystem/process and delegate network rules to profiles #1039 and explains the rationale (consolidating forge-specific policies into a shared base with new profiles/providers). Human approval is required for protected-path changes regardless of context.

  • [stale-reference] FEATURES.md:168 — Checklist item references policies/<forge>/<agent>.yaml as the location to update when an agent needs access to a new external service. This PR deletes all forge-specific policy files; network access is now configured via profiles and providers.
    Remediation: Update the checklist item to reference the profiles/providers mechanism.

  • [permission-manifest-change] profiles/fullsend-gitlab-rw.yaml — New permission-declaring file grants read-write access to gitlab.com and gitlab.cee.redhat.com. Functionally equivalent to the deleted policies/gitlab/triage.yaml — same hosts, same access level, same binaries. Only the triage agent references this profile.

Low

  • [permission-manifest-change] profiles/fullsend-vertex-ai.yaml:7 — Adding api.anthropic.com:443 (read-write) to the shared Vertex AI profile. Every deleted per-agent policy file contained this endpoint individually; this restores parity with no scope expansion.

  • [binary-allowlist-scope] profiles/fullsend-gitleaks.yaml:23 — Adding **/git to the gitleaks profile binary allowlist. The deleted GitLab code/fix policies included **/git in gitleaks_releases; this profile only applies to code/fix agents where git is already allowed.

Previous run (2)

Review

Findings

Critical

  • [fail-open] harness/code.yaml:110, harness/fix.yaml:118, harness/prioritize.yaml:69, harness/retro.yaml:83, harness/review.yaml:102, harness/triage.yaml:72, harness/triage.yaml:89 — All GitLab forge sections and the Jira forge section now reference policies/base.yaml, which contains no network_policies. The deleted policy files enforced host-level restrictions (gitlab.com, gitlab.cee.redhat.com, *.atlassian.net), binary allowlists (curl, git, node, pre-commit), and scoped access levels (read-only/read-write). No GitLab or Jira profiles or providers exist anywhere in profiles/ or providers/. Depending on runtime default behavior, GitLab/Jira agents either lose forge API access (default-deny) or gain unrestricted network access with injected tokens (default-allow). The triage agent's access: read-write for GitLab API — unique among agents — is also lost.
    Remediation: Create GitLab and Jira provider/profile pairs (e.g., providers/gitlab-ro.yaml + profiles/fullsend-gitlab-ro.yaml) covering the same endpoints and binary allowlists as the deleted policies. Wire them into the respective forge sections before deleting the policy files, or defer the GitLab/Jira policy deletions until replacement profiles exist.

  • [scope-vs-intent] policies/base.yaml — Issue Refactor policies to use a shared base for landlock/filesystem/process and delegate network rules to profiles #1039 requires a multi-part migration: (1) shared base, (2) network rules in profiles, (3) per-agent overrides, (4) no forge-specific policies. This PR executes parts 1 and 4 but skips part 2 for GitLab/Jira, inverting the safe ordering — deletion should follow migration, not precede it.
    Remediation: Split into phases: (1) create GitLab/Jira profiles, (2) remove forge-specific policy files. Or create profiles alongside the deletions in this PR.

High

  • [stale-reference] .github/scripts/select-eval-agents-test.sh:66 — Test fixtures at lines 66, 104, 115, and 343 reference deleted policy paths (policies/gitlab/triage.yaml, policies/github/review.yaml, policies/gitlab/review.yaml). The test at line 343 validates that changing policies/gitlab/triage.yaml selects the triage agent — a scenario that can no longer occur since no harness references that path.
    Remediation: Update test fixture policy paths to policies/base.yaml and adjust or remove the test at line 343.

Medium

  • [protected-path] harness/*, policies/* — All 15 changed files fall under protected paths (harness/, policies/). The PR links to issue Refactor policies to use a shared base for landlock/filesystem/process and delegate network rules to profiles #1039 and explains the rationale. Human approval is required for protected-path changes regardless of context.

  • [network-policy-regression] harness/prioritize.yaml:45 — The deleted policies/github/prioritize.yaml included api.anthropic.com:443 in its vertex_ai network_policy. The replacement profile fullsend-vertex-ai.yaml lists only *.googleapis.com. The providers/vertex-ai.yaml provider may cover this at runtime, but the coverage should be verified.
    Remediation: Verify api.anthropic.com is provided by the vertex-ai provider at runtime, or add it to fullsend-vertex-ai.yaml.

  • [access-level-granularity] harness/triage.yaml:72 — The deleted policies/gitlab/triage.yaml was the only policy with access: read-write for GitLab API endpoints; all others used read-only. When replacement GitLab profiles are created, this distinction must be preserved.
    Remediation: Create separate fullsend-gitlab-ro and fullsend-gitlab-rw profiles.

  • [stale-reference] agents/prioritize.md:7 — Comment references deleted policies/github/prioritize.yaml as the binary allowlist enforcement mechanism.
    Remediation: Update to reference the current enforcement mechanism.

  • [stale-reference] docs/code.md:86 — References deleted policies/gitlab/code.yaml in 3 places (lines 86, 184, 192).
    Remediation: Replace all references with policies/base.yaml.

  • [stale-reference] docs/retro.md:77 — References deleted policies/gitlab/retro.yaml in 2 places (lines 77, 84).
    Remediation: Replace both references with policies/base.yaml.

  • [stale-reference] docs/fix.md:180 — References deleted policies/gitlab/fix.yaml.
    Remediation: Replace with policies/base.yaml.

  • [stale-reference] docs/prioritize.md:104 — References deleted policies/gitlab/prioritize.yaml.
    Remediation: Replace with policies/base.yaml.

Low

  • [stale-reference] agents/triage.md:7 — Comment references policies/github/triage.yaml as the enforcement mechanism, but this file was not in the deletion set (pre-existing staleness, not a regression from this PR).

  • [stale-reference] docs/network-policy.md:102 — States agents "also have GitLab equivalents under policies/gitlab/". This directory no longer exists.

  • [code-organization] harness/code.yaml:110 — GitLab/Jira forge sections carry a redundant policy: policies/base.yaml key (matching top-level), while some GitHub sections omit it. Inconsistent but functionally equivalent.


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

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-coder

fullsend-ai-coder Bot commented Aug 26, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ✅ Success · Started 11:35 AM UTC · Completed 11:48 AM UTC

Commit: 0820d03 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $4.68

@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

🔧 Fix agent — iteration 2 (bot-triggered)

Addressed all 14 review findings (13 fixed, 1 disagreed as informational). Created GitLab and Jira provider/profile pairs to replace network_policies from deleted forge-specific policy files, preserving endpoint restrictions, binary allowlists, and access level granularity. Added api.anthropic.com to vertex-ai profile. Updated all stale references in docs, agent files, and test fixtures.

Fixed (13):

  1. fail-open: GitLab/Jira forge sections reference policies/base.yaml with no network_policies (harness/code.yaml): Created GitLab and Jira provider/profile pairs (fullsend-gitlab-ro, fullsend-gitlab-code, fullsend-gitlab-rw, fullsend-jira-ro) covering the same endpoints and binary allowlists as the deleted forge-specific policies. Wired them into all 7 affected forge sections across 6 harness files (code, fix, prioritize, retro, review, triage).
  2. scope-vs-intent: deletion precedes migration for GitLab/Jira network rules (profiles/fullsend-gitlab-ro.yaml): Created the missing profiles/providers alongside the existing deletions, completing the migration sequence: shared base policy + network rules in profiles. GitLab and Jira agents now have proper network access via provider-backed profiles.
  3. stale-reference: select-eval-agents-test.sh references deleted policy paths (.github/scripts/select-eval-agents-test.sh): Updated test fixture harness YAML to replace policies/gitlab/triage.yaml and policies/github/review.yaml and policies/gitlab/review.yaml with the new provider/profile references. Updated the forge policy selection test at line 343 to test providers/gitlab-rw.yaml instead of the deleted policies/gitlab/triage.yaml. All 30 tests pass.
  4. network-policy-regression: api.anthropic.com missing from vertex-ai profile (profiles/fullsend-vertex-ai.yaml): Added api.anthropic.com:443 endpoint to fullsend-vertex-ai profile, restoring the coverage that existed in the deleted forge-specific policies.
  5. access-level-granularity: triage agent needs read-write GitLab API access (profiles/fullsend-gitlab-rw.yaml): Created separate fullsend-gitlab-rw profile with access: read-write for triage agent, distinct from fullsend-gitlab-ro (read-only) used by review, prioritize, and retro agents. Preserves the access level distinction from the deleted policies/gitlab/triage.yaml.
  6. stale-reference: agents/prioritize.md references deleted policies/github/prioritize.yaml (agents/prioritize.md): Updated comment to reference profiles/fullsend-github-ro.yaml as the binary allowlist enforcement mechanism.
  7. stale-reference: docs/code.md references deleted policies/gitlab/code.yaml in 3 places (docs/code.md): Updated all three references (lines 86, 184, 192) to reference the new profile-based network access model.
  8. stale-reference: docs/retro.md references deleted policies/gitlab/retro.yaml in 2 places (docs/retro.md): Updated both references (lines 77, 84) to reference profiles/fullsend-gitlab-ro.yaml.
  9. stale-reference: docs/fix.md references deleted policies/gitlab/fix.yaml (docs/fix.md): Updated reference at line 180 to reference profiles/fullsend-gitlab-code.yaml.
  10. stale-reference: docs/prioritize.md references deleted policies/gitlab/prioritize.yaml (docs/prioritize.md): Updated reference at line 104 to reference profiles/fullsend-gitlab-ro.yaml.
  11. stale-reference: agents/triage.md references policies/github/triage.yaml (pre-existing) (agents/triage.md): Updated comment to reference profiles/fullsend-github-ro.yaml. While pre-existing, the reference was to a policy file pattern that no longer exists anywhere in the repo.
  12. stale-reference: docs/network-policy.md references policies/gitlab/ directory (docs/network-policy.md): Updated reference at line 102 to describe the new profile-based model for GitLab network access.
  13. code-organization: redundant policy: policies/base.yaml in forge sections (harness/prioritize.yaml): Removed redundant forge-level policy: policies/base.yaml from all forge sections (GitHub in prioritize/review, GitLab/Jira in all files). All forge sections now consistently fall through to the top-level policy, eliminating the inconsistency.

Disagreed (1):

  1. protected-path: all 15 changed files fall under protected paths: This is an informational finding requiring human approval, not a code fix. Human review is required regardless of any changes made by the fix agent.

Tests: passed

Decision points
  • Chose to create three GitLab profile tiers (ro, code, rw) mirroring the GitHub pattern (alternatives: Single gitlab profile with read-write for all agents, Two profiles (ro and rw only); rationale: Matches the existing GitHub pattern (github-ro vs github-code) and preserves the principle of least privilege: code/fix agents get git+pre-commit binaries, API-only agents get curl+node only, triage uniquely gets read-write access.)
  • Added api.anthropic.com to the shared vertex-ai profile rather than creating a separate profile (alternatives: Separate anthropic-api profile, Per-forge profiles with anthropic endpoint; rationale: All agents need Anthropic API access for inference. The endpoint was already in every deleted forge-specific policy's vertex_ai section, so adding it to the shared profile is the correct consolidation.)
  • Added **/git binary to fullsend-gitleaks profile for pre-commit hook cloning (alternatives: Include github.com endpoints in gitlab-code profile, Create separate pre-commit-hooks profile; rationale: The deleted GitLab policies included git binary in their gitleaks_releases section for pre-commit hook repo cloning from GitHub. Adding git to the shared gitleaks profile restores this capability without endpoint duplication.)

Next steps:

  • /fs-review — request a re-review of the changes
  • /fs-fix <your instruction> — run another fix pass with specific guidance
  • Push commits directly — review re-runs automatically on push
    Updated by fullsend fix agent

fullsend-ai-coder Bot added a commit that referenced this pull request Aug 26, 2026
Create provider-backed network profiles for GitLab and Jira forges to
replace the network_policies that were in the deleted forge-specific
policy files. Wire them into all affected harness forge sections.

- Create fullsend-gitlab-ro (review, prioritize, retro), fullsend-gitlab-code
  (code, fix), fullsend-gitlab-rw (triage) profiles + providers
- Create fullsend-jira-ro (triage) profile + provider
- Add api.anthropic.com to fullsend-vertex-ai profile
- Add **/git to fullsend-gitleaks profile for pre-commit hook cloning
- Remove redundant forge-level policy: policies/base.yaml (falls through
  to top-level)
- Update stale doc/agent/test references to deleted policy files

Addresses review feedback on #1041
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 26, 2026

Copy link
Copy Markdown

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

Commit: d257732 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $7.71

@fullsend-ai-review fullsend-ai-review Bot added risk/elevated PR risk: elevated and removed risk/moderate PR risk: moderate labels Aug 26, 2026
@fullsend-ai-review
fullsend-ai-review Bot dismissed their stale review August 26, 2026 12:27

Superseded by updated review

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review fullsend-ai-review Bot added the requires-manual-review Review requires human judgment label Aug 26, 2026
Comment thread harness/code.yaml
@maruiz93

Copy link
Copy Markdown
Contributor

/fs-fix

@maruiz93

Copy link
Copy Markdown
Contributor

/fs-stop

Remove 9 per-agent forge-specific policy files under policies/github/,
policies/gitlab/, and policies/jira/. All duplicated the same
filesystem_policy, landlock, and process blocks from policies/base.yaml.
Their network_policies sections duplicated what profiles and providers
already define in composable form.

All harness files already reference policies/base.yaml at top level.
This commit removes the forge.<platform>.policy overrides that pointed
to the now-deleted files, so every agent/forge combination falls through
to the shared base policy. Network access continues to be provided by
profiles (openshell.profiles) and providers per ADR 0065.

Verified: triage (GitLab and Jira forges) has identical
filesystem_policy/landlock/process blocks to all other agents — no
agent-specific overrides were needed.

Closes #1039
Each forge section that previously referenced a forge-specific policy
file (now deleted) gets an explicit policy: policies/base.yaml to
ensure sandbox restrictions are applied per-forge rather than relying
on top-level fallthrough.

Addresses review feedback on #1041
Create provider-backed network profiles for GitLab and Jira forges to
replace the network_policies that were in the deleted forge-specific
policy files. Wire them into all affected harness forge sections.

- Create fullsend-gitlab-ro (review, prioritize, retro), fullsend-gitlab-code
  (code, fix), fullsend-gitlab-rw (triage) profiles + providers
- Create fullsend-jira-ro (triage) profile + provider
- Add api.anthropic.com to fullsend-vertex-ai profile
- Add **/git to fullsend-gitleaks profile for pre-commit hook cloning
- Remove redundant forge-level policy: policies/base.yaml (falls through
  to top-level)
- Update stale doc/agent/test references to deleted policy files

Addresses review feedback on #1041
@maruiz93
maruiz93 force-pushed the agent/1039-policy-base-consolidation branch from d257732 to a7f00ab Compare August 26, 2026 16:36
@fullsend-ai-coder

fullsend-ai-coder Bot commented Aug 26, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ✅ Success · Started 4:48 PM UTC · Completed 4:56 PM UTC

Commit: a7f00ab · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $1.43

Update the "Check network policy" checklist item to reference the
profiles/providers mechanism instead of the deleted
policies/<forge>/<agent>.yaml files.

Addresses review feedback on #1041
@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

🔧 Fix agent — iteration 3 (human-triggered)

Addressed 1 actionable finding (stale reference in FEATURES.md). Disagreed with 4 informational findings that confirm correctness of existing changes and require human approval rather than code fixes.

Fixed (1):

  1. stale-reference: FEATURES.md:168 references deleted policies//.yaml (FEATURES.md): Updated the 'Check network policy' checklist item to reference the profiles/providers mechanism instead of the deleted policies//.yaml pattern

Disagreed (4):

  1. protected-path: 28 of 33 changed files fall under protected paths: Informational finding requiring human approval. Not a code fix — the review agent correctly notes human approval is required for protected-path changes regardless of context.
  2. permission-manifest-change: profiles/fullsend-gitlab-rw.yaml grants read-write access: Informational finding confirming the new profile is functionally equivalent to the deleted policies/gitlab/triage.yaml. No code change needed.
  3. permission-manifest-change: profiles/fullsend-vertex-ai.yaml:7 adding api.anthropic.com: Informational finding confirming the addition restores parity with deleted per-agent policies. No scope expansion, no code change needed.
  4. **binary-allowlist-scope: profiles/fullsend-gitleaks.yaml:23 adding /git: Informational finding confirming the addition restores capability from deleted GitLab code/fix policies. Only applies to agents where git is already allowed. No code change needed.

Tests: passed

Next steps:

  • /fs-review — request a re-review of the changes
  • /fs-fix <your instruction> — run another fix pass with specific guidance
  • Push commits directly — review re-runs automatically on push
    Updated by fullsend fix agent

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 26, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 4:56 PM UTC · Ended 5:09 PM UTC

Commit: a7f00ab · View workflow run →

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 26, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 5:11 PM UTC · Completed 5:53 PM UTC

Commit: 3713454 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high

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

Labels

ready-for-review requires-manual-review Review requires human judgment risk/elevated PR risk: elevated

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor policies to use a shared base for landlock/filesystem/process and delegate network rules to profiles

1 participant