Skip to content

Conversation

@ksamaschke
Copy link
Collaborator

Merge dev into main.\n- Version 8.20.96 alignment (root and src)\n- PM docs blacklist bypass\n- Infra/docs fixes previously merged into dev\n\nTests: bash tests/run-tests.sh

* fix: allow markdown docs in any path segment

* fix: use configured allowlist for markdown in any path segment

* fix: allow markdown by path segment and clean path normalization

* fix: guard pm markdown allowlist and inherit parent-path rules

* fix: enforce parent-path rules before markdown allow segments
* fix: enforce parent-path rule before markdown segment allowlist

* test: cover parent-path markdown allow when setting enabled

* fix: run markdown segment allowlist after parent-path guard

* feat: add configurable auto commit review reminder
* fix: ensure markdown segment allowlist honors parent gate

* docs: add sample ICC configs for main/sub-agent and strict/relaxed

* feat: parametrized config deployment and sample icc configs

* chore: snapshot current config and tighten main-scope sample agents block

* fix: preserve existing icc.config.json unless override provided

* chore: rename local config backup and document it

* chore: clarify/preserve existing icc.config on ansible reinstall
* fix: apply infra policy checks to full command incl. ssh wrapper

* fix: tighten docs fast-path (no heredoc/chaining; only under project docs)

* docs: fix duplicate Added header in 8.20.88 changelog

* fix: docs fast-path requires path under cwd with segment boundary
* fix: doc fast-path only blocks unquoted substitution

* fix: aggressive ALL-CAPS detection handles mixed separators

* fix: treat double-quoted substitution as unsafe doc fast-path

* fix: respect escaped substitutions in doc fast-path
* fix: allow nested allowlist paths for markdown

* chore: dedupe markdown allowlist sequences
* feat: add main-scope dev preset and config-driven bash allowlist

* fix: scope config main-scope bash allowlist to main-role
* Release 8.20.89 (dev -> main) (#252)

* feat: surface MCP availability hints and gate MCP tools via config

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* Release 8.20.89 (dev -> main) (#253)

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: tighten docs heredoc allow to prevent infra bypass (#254)

* fix: allow nested docs paths and harden docs write allowlist (#255)
* Release 8.20.89 (dev -> main) (#252)

* feat: surface MCP availability hints and gate MCP tools via config

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* Release 8.20.89 (dev -> main) (#253)

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: tighten docs heredoc allow to prevent infra bypass (#254)

* fix: allow nested docs paths and harden docs write allowlist (#255)
* feat: allow main scope to inherit agent privileges

* docs: clarify main scope agent flag impact
* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: allow markdown when any path segment is docs (#259)

* fix: allow markdown docs in any path segment

* fix: use configured allowlist for markdown in any path segment

* fix: allow markdown by path segment and clean path normalization

* fix: guard pm markdown allowlist and inherit parent-path rules

* fix: enforce parent-path rules before markdown allow segments

* fix: enforce parent-path before markdown segment allowlist (#261)

* fix: enforce parent-path rule before markdown segment allowlist

* test: cover parent-path markdown allow when setting enabled

* fix: run markdown segment allowlist after parent-path guard

* feat: add configurable auto commit review reminder

* fix: markdown segment allowlist respects parent-path gate (#262)

* fix: ensure markdown segment allowlist honors parent gate

* docs: add sample ICC configs for main/sub-agent and strict/relaxed

* feat: parametrized config deployment and sample icc configs

* chore: snapshot current config and tighten main-scope sample agents block

* fix: preserve existing icc.config.json unless override provided

* chore: rename local config backup and document it

* chore: clarify/preserve existing icc.config on ansible reinstall

* fix: enforce infra policy on full command including ssh wrapper (#264)

* fix: apply infra policy checks to full command incl. ssh wrapper

* fix: tighten docs fast-path (no heredoc/chaining; only under project docs)

* docs: fix duplicate Added header in 8.20.88 changelog

* fix: docs fast-path requires path under cwd with segment boundary

* fix: make doc fast-path allow literal markdown code (#269)

* fix: doc fast-path only blocks unquoted substitution

* fix: aggressive ALL-CAPS detection handles mixed separators

* fix: treat double-quoted substitution as unsafe doc fast-path

* fix: respect escaped substitutions in doc fast-path

* fix: support nested markdown allowlist segments (#266)

* fix: allow nested allowlist paths for markdown

* chore: dedupe markdown allowlist sequences

* feat: linux main-scope friendly config + guardrail defaults (#272)

* feat: add main-scope dev preset and config-driven bash allowlist

* fix: scope config main-scope bash allowlist to main-role

* fix: doc fast-path & constraint display (#274)

* Release 8.20.89 (dev -> main) (#252)

* feat: surface MCP availability hints and gate MCP tools via config

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* Release 8.20.89 (dev -> main) (#253)

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: tighten docs heredoc allow to prevent infra bypass (#254)

* fix: allow nested docs paths and harden docs write allowlist (#255)

* chore: sync dev with main (#275)

* Release 8.20.89 (dev -> main) (#252)

* feat: surface MCP availability hints and gate MCP tools via config

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* Release 8.20.89 (dev -> main) (#253)

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: tighten docs heredoc allow to prevent infra bypass (#254)

* fix: allow nested docs paths and harden docs write allowlist (#255)
* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: allow markdown when any path segment is docs (#259)

* fix: allow markdown docs in any path segment

* fix: use configured allowlist for markdown in any path segment

* fix: allow markdown by path segment and clean path normalization

* fix: guard pm markdown allowlist and inherit parent-path rules

* fix: enforce parent-path rules before markdown allow segments

* fix: enforce parent-path before markdown segment allowlist (#261)

* fix: enforce parent-path rule before markdown segment allowlist

* test: cover parent-path markdown allow when setting enabled

* fix: run markdown segment allowlist after parent-path guard

* feat: add configurable auto commit review reminder

* fix: markdown segment allowlist respects parent-path gate (#262)

* fix: ensure markdown segment allowlist honors parent gate

* docs: add sample ICC configs for main/sub-agent and strict/relaxed

* feat: parametrized config deployment and sample icc configs

* chore: snapshot current config and tighten main-scope sample agents block

* fix: preserve existing icc.config.json unless override provided

* chore: rename local config backup and document it

* chore: clarify/preserve existing icc.config on ansible reinstall

* fix: enforce infra policy on full command including ssh wrapper (#264)

* fix: apply infra policy checks to full command incl. ssh wrapper

* fix: tighten docs fast-path (no heredoc/chaining; only under project docs)

* docs: fix duplicate Added header in 8.20.88 changelog

* fix: docs fast-path requires path under cwd with segment boundary

* fix: make doc fast-path allow literal markdown code (#269)

* fix: doc fast-path only blocks unquoted substitution

* fix: aggressive ALL-CAPS detection handles mixed separators

* fix: treat double-quoted substitution as unsafe doc fast-path

* fix: respect escaped substitutions in doc fast-path

* fix: support nested markdown allowlist segments (#266)

* fix: allow nested allowlist paths for markdown

* chore: dedupe markdown allowlist sequences

* feat: linux main-scope friendly config + guardrail defaults (#272)

* feat: add main-scope dev preset and config-driven bash allowlist

* fix: scope config main-scope bash allowlist to main-role

* fix: doc fast-path & constraint display (#274)

* Release 8.20.89 (dev -> main) (#252)

* feat: surface MCP availability hints and gate MCP tools via config

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* Release 8.20.89 (dev -> main) (#253)

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: tighten docs heredoc allow to prevent infra bypass (#254)

* fix: allow nested docs paths and harden docs write allowlist (#255)

* chore: sync dev with main (#275)

* Release 8.20.89 (dev -> main) (#252)

* feat: surface MCP availability hints and gate MCP tools via config

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* Release 8.20.89 (dev -> main) (#253)

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: tighten docs heredoc allow to prevent infra bypass (#254)

* fix: allow nested docs paths and harden docs write allowlist (#255)
* Release 8.20.89 (dev -> main) (#252)

* feat: surface MCP availability hints and gate MCP tools via config

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* Release 8.20.89 (dev -> main) (#253)

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: tighten docs heredoc allow to prevent infra bypass (#254)

* fix: allow nested docs paths and harden docs write allowlist (#255)

* fix: support nested markdown allowlist segments (#266)

* fix: allow nested allowlist paths for markdown

* chore: dedupe markdown allowlist sequences

* feat: linux main-scope friendly config + guardrail defaults (#272)

* feat: add main-scope dev preset and config-driven bash allowlist

* fix: scope config main-scope bash allowlist to main-role

* fix: doc fast-path & constraint display (#274)

* Release 8.20.89 (dev -> main) (#252)

* feat: surface MCP availability hints and gate MCP tools via config

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* Release 8.20.89 (dev -> main) (#253)

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: tighten docs heredoc allow to prevent infra bypass (#254)

* fix: allow nested docs paths and harden docs write allowlist (#255)

* chore: sync dev with main (#275)

* Release 8.20.89 (dev -> main) (#252)

* feat: surface MCP availability hints and gate MCP tools via config

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* Release 8.20.89 (dev -> main) (#253)

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: tighten docs heredoc allow to prevent infra bypass (#254)

* fix: allow nested docs paths and harden docs write allowlist (#255)

* feat: main scope agent privilege flag (#278)

* feat: allow main scope to inherit agent privileges

* docs: clarify main scope agent flag impact

* Merge dev into main (v8.20.89) (#273) (#280)

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: allow markdown when any path segment is docs (#259)

* fix: allow markdown docs in any path segment

* fix: use configured allowlist for markdown in any path segment

* fix: allow markdown by path segment and clean path normalization

* fix: guard pm markdown allowlist and inherit parent-path rules

* fix: enforce parent-path rules before markdown allow segments

* fix: enforce parent-path before markdown segment allowlist (#261)

* fix: enforce parent-path rule before markdown segment allowlist

* test: cover parent-path markdown allow when setting enabled

* fix: run markdown segment allowlist after parent-path guard

* feat: add configurable auto commit review reminder

* fix: markdown segment allowlist respects parent-path gate (#262)

* fix: ensure markdown segment allowlist honors parent gate

* docs: add sample ICC configs for main/sub-agent and strict/relaxed

* feat: parametrized config deployment and sample icc configs

* chore: snapshot current config and tighten main-scope sample agents block

* fix: preserve existing icc.config.json unless override provided

* chore: rename local config backup and document it

* chore: clarify/preserve existing icc.config on ansible reinstall

* fix: enforce infra policy on full command including ssh wrapper (#264)

* fix: apply infra policy checks to full command incl. ssh wrapper

* fix: tighten docs fast-path (no heredoc/chaining; only under project docs)

* docs: fix duplicate Added header in 8.20.88 changelog

* fix: docs fast-path requires path under cwd with segment boundary

* fix: make doc fast-path allow literal markdown code (#269)

* fix: doc fast-path only blocks unquoted substitution

* fix: aggressive ALL-CAPS detection handles mixed separators

* fix: treat double-quoted substitution as unsafe doc fast-path

* fix: respect escaped substitutions in doc fast-path

* fix: support nested markdown allowlist segments (#266)

* fix: allow nested allowlist paths for markdown

* chore: dedupe markdown allowlist sequences

* feat: linux main-scope friendly config + guardrail defaults (#272)

* feat: add main-scope dev preset and config-driven bash allowlist

* fix: scope config main-scope bash allowlist to main-role

* fix: doc fast-path & constraint display (#274)

* Release 8.20.89 (dev -> main) (#252)

* feat: surface MCP availability hints and gate MCP tools via config

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* Release 8.20.89 (dev -> main) (#253)

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: tighten docs heredoc allow to prevent infra bypass (#254)

* fix: allow nested docs paths and harden docs write allowlist (#255)

* chore: sync dev with main (#275)

* Release 8.20.89 (dev -> main) (#252)

* feat: surface MCP availability hints and gate MCP tools via config

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* Release 8.20.89 (dev -> main) (#253)

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: tighten docs heredoc allow to prevent infra bypass (#254)

* fix: allow nested docs paths and harden docs write allowlist (#255)

* Merge dev into main (v8.20.89) (#273) (#281)

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: allow markdown when any path segment is docs (#259)

* fix: allow markdown docs in any path segment

* fix: use configured allowlist for markdown in any path segment

* fix: allow markdown by path segment and clean path normalization

* fix: guard pm markdown allowlist and inherit parent-path rules

* fix: enforce parent-path rules before markdown allow segments

* fix: enforce parent-path before markdown segment allowlist (#261)

* fix: enforce parent-path rule before markdown segment allowlist

* test: cover parent-path markdown allow when setting enabled

* fix: run markdown segment allowlist after parent-path guard

* feat: add configurable auto commit review reminder

* fix: markdown segment allowlist respects parent-path gate (#262)

* fix: ensure markdown segment allowlist honors parent gate

* docs: add sample ICC configs for main/sub-agent and strict/relaxed

* feat: parametrized config deployment and sample icc configs

* chore: snapshot current config and tighten main-scope sample agents block

* fix: preserve existing icc.config.json unless override provided

* chore: rename local config backup and document it

* chore: clarify/preserve existing icc.config on ansible reinstall

* fix: enforce infra policy on full command including ssh wrapper (#264)

* fix: apply infra policy checks to full command incl. ssh wrapper

* fix: tighten docs fast-path (no heredoc/chaining; only under project docs)

* docs: fix duplicate Added header in 8.20.88 changelog

* fix: docs fast-path requires path under cwd with segment boundary

* fix: make doc fast-path allow literal markdown code (#269)

* fix: doc fast-path only blocks unquoted substitution

* fix: aggressive ALL-CAPS detection handles mixed separators

* fix: treat double-quoted substitution as unsafe doc fast-path

* fix: respect escaped substitutions in doc fast-path

* fix: support nested markdown allowlist segments (#266)

* fix: allow nested allowlist paths for markdown

* chore: dedupe markdown allowlist sequences

* feat: linux main-scope friendly config + guardrail defaults (#272)

* feat: add main-scope dev preset and config-driven bash allowlist

* fix: scope config main-scope bash allowlist to main-role

* fix: doc fast-path & constraint display (#274)

* Release 8.20.89 (dev -> main) (#252)

* feat: surface MCP availability hints and gate MCP tools via config

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* Release 8.20.89 (dev -> main) (#253)

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: tighten docs heredoc allow to prevent infra bypass (#254)

* fix: allow nested docs paths and harden docs write allowlist (#255)

* chore: sync dev with main (#275)

* Release 8.20.89 (dev -> main) (#252)

* feat: surface MCP availability hints and gate MCP tools via config

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* Release 8.20.89 (dev -> main) (#253)

* feat: surface MCP availability hints and gate MCP tools via config (#246)

* fix: allow docs/documentation writes in main scope allowlist (#247)

* chore: add config presets and docs allowlist coverage (#248)

* docs: streamline README and docs index (#249)

* fix: allow docs heredoc writes without infra blocking (#250)

* feat: inject best practices & memory guidance; keep exec pattern in all-caps block (#251)

* fix: tighten docs heredoc allow to prevent infra bypass (#254)

* fix: allow nested docs paths and harden docs write allowlist (#255)
…fastpath-fix

infra: harden doc fast-path
Copilot AI review requested due to automatic review settings November 21, 2025 20:31
@ksamaschke
Copy link
Collaborator Author

@codex review

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines 23 to 27
function getMarkerDir() {
if (process.env.ICC_TEST_MARKER_DIR) {
return process.env.ICC_TEST_MARKER_DIR;
}
return path.join(os.homedir(), '.claude', 'tmp');

Choose a reason for hiding this comment

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

P1 Badge Align marker paths with ICC_TEST_MARKER_DIR

ICC_TEST_MARKER_DIR is now honoured by marker detection (lines 23‑27) and is exported by tests/run-tests.sh, but marker creation/cleanup still hardcode ~/.claude/tmp (agent-marker.js/stop.js). When the env var is set—e.g., running the test suite—agent markers are written to the real home directory while detection reads the temp directory, so agents will be misclassified as main scope and their markers won’t be cleaned up. Marker producers need to use the same configurable directory to keep agent detection reliable under the new test env override.

Useful? React with 👍 / 👎.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR merges development work for release 8.20.96, introducing workflow enforcement capabilities, PM documentation fast-path improvements, and various infrastructure/documentation fixes accumulated across multiple intermediate versions (8.20.91-8.20.95).

  • Adds optional workflow enforcement hook that ensures tools execute in the configured sequence (Task → Plan → Review → Execute → Review → Document)
  • Enhances PM constraints enforcement with a docs fast-path that bypasses tool blacklist for markdown files in allowlisted directories
  • Improves infrastructure protection with better heredoc validation and unquoted keyword detection to prevent false positives

Reviewed changes

Copilot reviewed 25 out of 25 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
src/hooks/workflow-enforcement.js New hook that enforces sequential workflow steps with session-based state tracking
src/hooks/pm-constraints-enforcement.js Adds markdown fast-path logic to bypass blacklist for allowlisted directories; fixes quote escaping in error message
src/hooks/agent-infrastructure-protection.js Enhances heredoc validation, adds markdown allowlist checks, and implements containsUnquoted for better keyword detection
src/hooks/stop.js Removes non-standard hookSpecificOutput to fix schema validation errors
src/hooks/project-scope-enforcement.js Adds main scope agent privileges configuration with environment variable override
src/hooks/summary-file-enforcement.js Prevents false positives on ALL-CAPS checks when shell variables are present in file paths
src/hooks/lib/marker-detection.js Refactors to accept hookInput or path strings; adds test directory override support
src/hooks/lib/directory-enforcement.js Relaxes docs directory enforcement to allow any path containing 'docs' segment
tests/run-tests.sh Sets deterministic test environment variables to ensure consistent test behavior
tests/hooks/unit/test-marker-detection.js Updates test to use ICC_TEST_MARKER_DIR environment variable
tests/hooks/unit/test-agent-infra-doc-fastpath.js Adds tests for heredoc validation with and without quoting
tests/hooks/integration/test-workflow-enforcement.js New integration test suite for workflow state machine
tests/hooks/integration/test-agent-marker-workflow.js Updates import path to use relative source path instead of installed location
tests/hooks/regression/test-hash-consistency.js Adds workflow-enforcement.js to list of hooks requiring consistent project hashing
icc.config.default.json Adds workflow enforcement configuration block (disabled by default)
sample-configs/icc.config.workflow-reviewed.json New preset enabling workflow enforcement with default step sequence
sample-configs/icc.config.main-scope-dev.json Enables parent allowlist paths and adds auto_commit_review configuration
sample-configs/README.md Documents new workflow-reviewed config and clarifies main scope agent privileges
install.ps1 Updates hook count from 15 to 16 throughout, registers workflow-enforcement.js
ansible/roles/intelligent-claude-code/templates/settings.json.j2 Adds workflow-enforcement.js to PreToolUse hooks
ansible/roles/intelligent-claude-code/tasks/main.yml Updates documentation messages to reflect 16 hooks
VERSION Bumps version to 8.20.96
src/VERSION Bumps version to 8.20.96 (aligned with root)
README.md Documents workflow enforcement feature and config option
CHANGELOG.md Comprehensive release notes for versions 8.20.91 through 8.20.96

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +94 to +105
if (!settings.enabled || settings.steps.length === 0) {
allowOperation(log, true);
}

if (!hookInput || !hookInput.session_id) {
allowOperation(log, true);
}

const toolName = normalizeToolName(hookInput.tool_name || hookInput.tool);
if (!toolName) {
allowOperation(log, true);
}
Copy link

Copilot AI Nov 21, 2025

Choose a reason for hiding this comment

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

Missing return statements before allowOperation calls. While allowOperation does call process.exit(), the missing return makes the control flow unclear and violates best practices. Add return before these calls for clarity:

if (!settings.enabled || settings.steps.length === 0) {
  return allowOperation(log, true);
}

Copilot uses AI. Check for mistakes.
Comment on lines +24 to +26
function main() {
// Initialize hook with shared library function
const { log, hookInput } = initializeHook('agent-infrastructure-protection');
Copy link

Copilot AI Nov 21, 2025

Choose a reason for hiding this comment

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

Inconsistent indentation: the function main() declaration and the initializeHook call have mismatched indentation. The function declaration should align with the rest of the file's top-level code.

Suggested change
function main() {
// Initialize hook with shared library function
const { log, hookInput } = initializeHook('agent-infrastructure-protection');
function main() {
// Initialize hook with shared library function
const { log, hookInput } = initializeHook('agent-infrastructure-protection');

Copilot uses AI. Check for mistakes.
permissionDecisionReason: `Tool blocked by ${blacklistResult.list} blacklist
Tool "${tool}" is blocked by the ${blacklistResult.reason}.
Tool \"${tool}\" is blocked by the ${blacklistResult.reason}.
Copy link

Copilot AI Nov 21, 2025

Choose a reason for hiding this comment

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

Unnecessary escape sequences in template literal. In JavaScript template literals (backtick strings), quotes don't need to be escaped. Change \"${tool}\" to "${tool}":

Tool "${tool}" is blocked by the ${blacklistResult.reason}.
Suggested change
Tool \"${tool}\" is blocked by the ${blacklistResult.reason}.
Tool "${tool}" is blocked by the ${blacklistResult.reason}.

Copilot uses AI. Check for mistakes.
Comment on lines +68 to +85
const sessionId = 'test-session-1';

const planFirst = runHook(projectDir, 'Plan', sessionId);
assert.strictEqual(planFirst.code, 2, 'Plan before Task should be blocked');

const allowedSequence = ['Task', 'Plan', 'Review', 'Execute', 'Document'];
allowedSequence.forEach((tool, index) => {
const result = runHook(projectDir, tool, sessionId);
assert.strictEqual(result.code, 0, `Step ${index + 1} (${tool}) should be allowed`);
});

const restart = runHook(projectDir, 'Task', sessionId);
assert.strictEqual(restart.code, 0, 'Workflow should reset after Document');

const outOfOrder = runHook(projectDir, 'Execute', sessionId);
assert.strictEqual(outOfOrder.code, 2, 'Execute before Plan should be blocked in new cycle');

console.log('✅ Workflow enforcement integration tests passed');
Copy link

Copilot AI Nov 21, 2025

Choose a reason for hiding this comment

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

Test does not clean up temporary directory. The createTestProject() function creates a temp directory but it's never removed. Consider adding cleanup:

(function runTests() {
  const projectDir = createTestProject();
  try {
    // ... tests ...
  } finally {
    fs.rmSync(projectDir, { recursive: true, force: true });
  }
})();
Suggested change
const sessionId = 'test-session-1';
const planFirst = runHook(projectDir, 'Plan', sessionId);
assert.strictEqual(planFirst.code, 2, 'Plan before Task should be blocked');
const allowedSequence = ['Task', 'Plan', 'Review', 'Execute', 'Document'];
allowedSequence.forEach((tool, index) => {
const result = runHook(projectDir, tool, sessionId);
assert.strictEqual(result.code, 0, `Step ${index + 1} (${tool}) should be allowed`);
});
const restart = runHook(projectDir, 'Task', sessionId);
assert.strictEqual(restart.code, 0, 'Workflow should reset after Document');
const outOfOrder = runHook(projectDir, 'Execute', sessionId);
assert.strictEqual(outOfOrder.code, 2, 'Execute before Plan should be blocked in new cycle');
console.log('✅ Workflow enforcement integration tests passed');
try {
const sessionId = 'test-session-1';
const planFirst = runHook(projectDir, 'Plan', sessionId);
assert.strictEqual(planFirst.code, 2, 'Plan before Task should be blocked');
const allowedSequence = ['Task', 'Plan', 'Review', 'Execute', 'Document'];
allowedSequence.forEach((tool, index) => {
const result = runHook(projectDir, tool, sessionId);
assert.strictEqual(result.code, 0, `Step ${index + 1} (${tool}) should be allowed`);
});
const restart = runHook(projectDir, 'Task', sessionId);
assert.strictEqual(restart.code, 0, 'Workflow should reset after Document');
const outOfOrder = runHook(projectDir, 'Execute', sessionId);
assert.strictEqual(outOfOrder.code, 2, 'Execute before Plan should be blocked in new cycle');
console.log('✅ Workflow enforcement integration tests passed');
} finally {
fs.rmSync(projectDir, { recursive: true, force: true });
}

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants