Skip to content

Pre release - cleanup agentic structure - #361

Merged
BeArchiTek merged 22 commits into
stablefrom
develop
Jul 3, 2026
Merged

Pre release - cleanup agentic structure#361
BeArchiTek merged 22 commits into
stablefrom
develop

Conversation

@BeArchiTek

@BeArchiTek BeArchiTek commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Summary by cubic

Standardized the agentic structure by vendoring Spec Kit extensions and wiring an end-to-end speckit workflow (specify → plan → critique → tasks → implement → review). Also upgraded CI/tooling: adopted rumdl for Markdown linting, migrated docs to pnpm on Node 22, and added auto-bump workflows for Infrahub and its SDK.

  • New Features

    • Completed review flow by adding critique/review extensions and hooks (after_planspeckit.critique.run, after_implementspeckit.review.run).
    • Added opsmill orchestrators (speckit.opsmill.{auto,prep,implement,extract,retrospect,summary}) and the agent-context updater.
    • CI: introduced rumdl markdown linting (new job), migrated docs build to pnpm with Node 22, replaced package-lock.json with pnpm-lock.yaml, and added update-infrahub.yml and update-infrahub-sdk.yml.
    • Excluded vendored Spec Kit trees from markdown linting; updated .gitignore to cover secrets and docs build output.
  • Migration

    • Ensure Node 22+ and pnpm 11+ for docs; local docs build now runs via pnpm install --frozen-lockfile && pnpm run build.
    • If you run linters locally, use rumdl for Markdown; vendored .specify/ and .github/agents/ are excluded.
    • Review .specify/extensions.yml, agent-context-config.yml, and review-config.yml for desired hooks and toggles.

Written for commit 7ff39e7. Summary will update on new commits.

Review in cubic

Benoit Kohler and others added 17 commits June 29, 2026 21:56
Add a dev/constitution.md pointer; a markdown guideline and a
module-docstrings guideline; guides for adding a doc fragment and
debugging ansible-test sanity failures; a knowledge deep-dive on the
inventory + lookup plugins; and three seed ADRs (two-plugin-patterns,
sdk-abstraction-wrapper, sync-only-sdk). Rewrite dev/README.md to the
peer Quick-Navigation table format. Aligns dev/ with the styrmin /
infrahub-mcp conventions.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Round out the dev/ reference: a releasing-the-collection guide, a
processors-and-arg-spec knowledge doc, and ADRs 0004 (docker-based
testing) + 0005 (doc-generation pipeline). Fix stale .markdownlint.yml
references to .markdownlint.yaml and refresh the dev/README.md nav.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…titution.md

The constitution wiring is flipped to match the peer repos (infrahub,
infrahub-mcp, styrmin): dev/constitution.md holds the real body and
.specify/memory/constitution.md symlinks to it — both provided by #356.
Remove the now-redundant pointer stub here (avoids a merge conflict with
#356's real dev/constitution.md) and fix the dev/README description.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Revert 7cc5a94, which deleted dev/constitution.md and rewrote the
dev/README description to claim the constitution body lives in
dev/constitution.md with .specify/memory/constitution.md symlinking to
it. That commit deferred both to PR #356, but #356 touches neither file
(.specify/memory/constitution.md is a real 5.8K file, not a symlink), so
the branch was left internally inconsistent: a deleted file that the
README still linked to, and a symlink that does not exist.

Restore dev/constitution.md as the pointer stub and revert the README to
describe it as a pointer. All dev/ links resolve again and the diff now
matches PR #358's description.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…roject

Address two Cubic review findings on PR #358:

- adding-a-doc-fragment.md: the extends_documentation_fragment example
  dropped the file basename. Fragments are attributes of ModuleDocFragment
  in plugins/doc_fragments/fragments.py, so the FQCN is
  opsmill.infrahub.fragments.<ATTRIBUTE>, not opsmill.infrahub.my_fragment.
- 0003-sync-only-sdk.md: the SDK range said >=1.5,<2.0 but pyproject.toml
  pins infrahub-sdk[all]>=1.19.0,<2.0.

Fix the same stale range where it also appeared in AGENTS.md and
infrahub-sdk-usage.md (the latter also showed Poetry-style syntax under a
"# pyproject.toml" comment; corrected to the real PEP 621 dependencies array).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
docs(dev): author dev/ guides, guidelines, knowledge, and seed ADRs
Install Spec Kit 0.11.9 from opsmill/infrahub@stable: core specify/plan/
tasks/implement workflow plus the agent-context and opsmill extensions.
Skills live in .agents/skills/ (source of truth), matching infrahub.
Excludes git/critique/review/infrahub extensions; keeps this repo's own
constitution. Mirrors opsmill/infrahub#9727 at a narrowed scope.

The opsmill auto/prep/implement commands depend on the critique and
review extensions (not installed here); extract/retrospect/summary work
standalone.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add the critique (arunt14/spec-kit-critique v1.0.0) and review
(ismaelJimenez/spec-kit-review v1.0.1) extensions, vendored verbatim from
opsmill/infrahub@stable, completing the OpsMill workflow set (opsmill +
critique + review). The opsmill auto/prep/implement commands depend on
these; their speckit-critique-run / speckit-review-run references now
resolve. Wires after_plan -> speckit.critique.run and after_implement ->
speckit.review.run; registers both in .registry.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Fix staleness (Poetry -> uv; ansible-core >=2.15 -> >=2.17.7rc1 per
AGENTS.md), add a Sync Impact Report header, a Boundaries/Never
subsection, and a doc-accuracy clause (generate-doc; no hand-edited
MDX). The 5 Ansible principles are unchanged. Bump 1.0.0 -> 1.1.0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The vendored spec-kit tooling under .specify/ (and .agents/) carries its
own / third-party formatting (missing ---, >120-char lines, 2-space
indentation) that is not the collection's ansible content, so it tripped
yaml-lint and ansible-lint (production profile). Exclude both dirs from
the linters — mirroring the existing .claude/ exclusion — rather than
editing vendored files that would re-break on every re-vendor.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Vendor the git extension (commit/feature/initialize/remote/validate +
auto-commit hooks) verbatim from infrahub@stable, completing the OpsMill
extension set to [agent-context, opsmill, critique, review, git]; only the
infrahub-local extension stays excluded. Includes the Infrahub-flavored
git-feature content (accepted as-is per request).

Note: the opsmill commands reference speckit-checkpoint-commit, which no
extension provides (git ships speckit-git-commit); that dangling ref is a
separate upstream opsmill-speckit naming issue, unchanged here.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FDXsPBAPbNDJuTgY4q2aNG
Match the peer convention (infrahub, infrahub-mcp, styrmin): the
constitution body lives in dev/constitution.md and
.specify/memory/constitution.md is a symlink -> ../../dev/constitution.md
(previously inverted — real body in .specify/memory/, stub in dev/).
Content is unchanged (v1.1.0); the agentic checker resolves the
symlinked constitution.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…data

Two inconsistencies introduced in the v1.1.0 alignment (caught in review):
- The Never rule wrongly forbade action plugins from using
  InfrahubclientWrapper directly, contradicting the documented
  action-plugin pattern (ActionModule(ActionBase) instantiates the
  wrapper — see artifact_generate.py / plugin-patterns.md). Reworded to
  "never bypass the wrapper / no raw InfrahubClientSync ad hoc".
- The Sync Impact header said "Modified principles: None" while folding a
  doc-accuracy guardrail into Principle V; now records Principle V as amended.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PR 358 (merged first) described dev/constitution.md as a stub pointing to
.specify/memory/constitution.md as the authoritative reference. PR 356
inverts that: dev/constitution.md is now the body and
.specify/memory/constitution.md is a symlink to it. Reconcile the README
directory guide so it matches the wiring.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore(agentic): install OpsMill-flavored Spec Kit 0.11.9 (core + opsmill/critique/review)
Mechanical fixes from the auditing-repo-standards audit:
- gitignore: add secret patterns (.env, .env.local, *.pem, *.key, credentials.json, secrets.yaml) [common-gitignore]
- pyproject: add readme = "README.md" [python-project-metadata]
- pyproject: drop unused asyncio_mode (collection is synchronous; pytest-asyncio not installed) [python-testing-pytest]
- pyproject: adopt rumdl config; remove legacy .markdownlint.yaml [markdown-linting-markdownlint]
- AGENTS.md: sync tech-stack table with pyproject (Python/ansible-core/infrahub-sdk) [doc drift]
- ci: add infrahub-sdk + infrahub instance auto-bump workflows [ci-infrahub-sdk-auto-bump, ci-infrahub-auto-bump]

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… docs

- .yamllint.yml: set truthy.check-keys=false (avoids false positives on GHA `on:` keys) [yaml-linting-yamllint]
- dev docs: drop asyncio_mode from illustrative pytest snippets to match pyproject [python-testing-pytest follow-up]

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@BeArchiTek BeArchiTek self-assigned this Jul 3, 2026
@BeArchiTek
BeArchiTek requested a review from a team as a code owner July 3, 2026 08:41
@BeArchiTek BeArchiTek added the ci/skip-changelog This will not be added to release notes label Jul 3, 2026
Benoit Kohler and others added 3 commits July 3, 2026 10:44
- pyproject: scope [tool.rumdl] to repo-owned markdown — exclude docs/ (Vale-owned MDX),
  .agents/ (vendored skills/commands), .specify/templates (vendored spec-kit)
- uv.lock: lock rumdl (added to dev deps in an earlier commit without re-locking)
- rumdl fmt: auto-fix 34 issues across dev/, tests/, plugins/, root
- dev/README.md: fix broken relative links (commands/ -> ../.agents/commands/)
- CI: add markdown-lint job (uv run rumdl check .) + markdown filter output [markdown-linting-markdownlint]
- tasks: add linter.lint-markdown, include it in `invoke lint`
- docs: reconcile stale markdownlint references -> rumdl; fix false "Poetry" -> uv in constitution

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- docs/pnpm-lock.yaml: generated, replaces package-lock.json
- docs/pnpm-workspace.yaml: security overrides (webpack/postcss/js-yaml/ws/... pins) + core-js
  build decline — pnpm 11 reads overrides here, not from package.json's "pnpm" field
- docs/package.json: add packageManager pnpm@11.6.0; drop the now-ignored overrides block
- .github/build-docs.sh, workflow-linter.yml, workflow-changelog-and-docs.yml:
  pnpm/action-setup@v4 + pnpm install --frozen-lockfile (was npm)
- .github/file-filters.yml: package-lock.json -> pnpm-lock.yaml
- .gitignore: ignore node_modules + docs build output
- .yamllint.yml: ignore generated docs/pnpm-lock.yaml

Verified locally: frozen install + docusaurus build both succeed; security override
pins confirmed present in pnpm-lock.yaml. [js-package-manager-pnpm]

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
pnpm 11 requires Node >= 22.13; the documentation-lint job (and the
changelog-and-docs docs build) were still pinned to Node 20 after the
npm -> pnpm migration, so pnpm crashed with
`ERR_UNKNOWN_BUILTIN_MODULE: node:sqlite`. Bumps both docs workflows to
Node 22, matching the canonical infrahub-mcp/styrmin config.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@cubic-dev-ai cubic-dev-ai 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.

31 issues found across 180 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name=".specify/extensions/opsmill/README.md">

<violation number="1" location=".specify/extensions/opsmill/README.md:53">
P2: The pinned-release install example references `v1.0.0.zip`, but the README documents `auto`, `prep`, and `implement` commands that were '(added in 1.1.0)'. Users following the pinned command will install an older release that doesn't include the documented commands, causing command-discovery failures and workflow mismatches. The pinned URL should be bumped to the release that ships the documented command set.</violation>
</file>

<file name=".specify/extensions/review/extension.yml">

<violation number="1" location=".specify/extensions/review/extension.yml:23">
P2: The config description advertises a "confidence threshold" setting, but the actual `config-template.yml` only defines `agents` toggles and no confidence-threshold key. This creates a misleading contract for users and any tooling expecting that setting. Either update the description to match the template or add the missing confidence-threshold setting to the template.</violation>
</file>

<file name="dev/constitution.md">

<violation number="1" location="dev/constitution.md:82">
P2: The `infrahub-sdk` version floor in the Constraints section is stale (`>=1.5`) and conflicts with the project's actual baseline. Both `pyproject.toml` (`>=1.19.0`) and `AGENTS.md` (`>=1.19.0`) have already been updated, and the constitution's sync report claims it was reconciled against AGENTS.md, but this constraint was missed. Since this file is labeled binding, the mismatch can cause incorrect dependency expectations.</violation>
</file>

<file name=".agents/commands/speckit.critique.run.md">

<violation number="1" location=".agents/commands/speckit.critique.run.md:179">
P2: The newly added command references a template path (`.specify/templates/critique-template.md`) that does not exist in the repository. The actual template file is located at `.specify/extensions/critique/commands/critique-template.md`. When the command is executed, it will fail to locate the required template, breaking the critique report generation step. Updating the path to point to the existing template file resolves the issue.</violation>
</file>

<file name=".specify/extensions.yml">

<violation number="1" location=".specify/extensions.yml:10">
P2: The `installed:` list in `extensions.yml` is missing `git`, yet hooks throughout the file reference `extension: git` (e.g., `speckit.git.initialize`, `speckit.git.commit`). Since `git` is registered as a local extension in `.registry` alongside the other explicitly-installed extensions and has no special core/built-in designation, it should also appear in the `installed:` list to keep the configuration self-consistent and avoid runtime ambiguity about which extensions are active.</violation>
</file>

<file name=".agents/skills/speckit-git-feature/SKILL.md">

<violation number="1" location=".agents/skills/speckit-git-feature/SKILL.md:79">
P1: The skill incorrectly states that `FEATURE_NUM` will be the ticket ID when branches are created with the `<short-name>-<ticket-id>` format (e.g., `user-auth-infp-460`). In practice, the `create-new-feature.sh` script only extracts a numeric prefix from branch names; if no numeric prefix is found, `FEATURE_NUM` is set to the full branch name. Branches in this format will also fail the `speckit.git.validate` validation, which expects sequential (`^[0-9]{3,}-`) or timestamp (`^[0-9]{8}-[0-9]{6}-`) prefixes. Consider revising the branch format to include a numeric or timestamp prefix that the script and validator recognize.</violation>
</file>

<file name=".agents/skills/speckit-critique-run/SKILL.md">

<violation number="1" location=".agents/skills/speckit-critique-run/SKILL.md:178">
P1: The skill references a template at `.specify/templates/critique-template.md`, but that file does not exist in the repository. The PR actually introduces the critique template at `.specify/extensions/critique/commands/critique-template.md` instead. If the skill runtime resolves this path directly, the **Generate Critique Report** step will fail because the expected template is missing. Consider updating the path in the skill definition to match the actual location of the template introduced by this PR.</violation>
</file>

<file name=".specify/extensions/critique/commands/run.md">

<violation number="1" location=".specify/extensions/critique/commands/run.md:69">
P1: The constitution path `/memory/constitution.md` is incorrect for this repository. The file actually lives at `.specify/memory/constitution.md`, as confirmed by the filesystem and documented in `dev/README.md` ("`.specify/memory/constitution.md` is a symlink to this file so the spec-kit workflow resolves it"). Because the critique command checks for the constitution with an "IF EXISTS" guard, the wrong path means the constitution check is silently skipped, and constitution-violating items will not be flagged as 🎯 Must-Address. This undermines a core governance safeguard.</violation>

<violation number="2" location=".specify/extensions/critique/commands/run.md:175">
P1: The template path referenced in the run instructions (`templates/critique-template.md`) does not match the actual template location. The file was added at `.specify/extensions/critique/commands/critique-template.md`, and the README correctly points to `commands/critique-template.md`. Since there is no `templates/` directory under the critique extension, this mismatch would cause template lookup failures when executing the command. Consider updating the path to `commands/critique-template.md` to align with the actual file location and the README documentation.</violation>
</file>

<file name=".specify/extensions/opsmill/commands/summary.md">

<violation number="1" location=".specify/extensions/opsmill/commands/summary.md:4">
P1: The prerequisite script paths in the frontmatter point to `scripts/...` at repo root, but the actual scripts live under `.specify/scripts/...`. Because the Outline says to run `{SCRIPT}` from repo root, this causes a "No such file or directory" failure before the command can resolve `FEATURE_DIR`. Update both `sh` and `ps` entries to start with `.specify/scripts/`.</violation>
</file>

<file name=".agents/commands/speckit.review.errors.md">

<violation number="1" location=".agents/commands/speckit.review.errors.md:10">
P2: The entire prompt body from `.specify/extensions/review/commands/errors.md` is duplicated across three other artifacts: `.agents/skills/speckit-review-errors/SKILL.md`, `.github/agents/speckit.review.errors.agent.md`, and now this newly added `.agents/commands/speckit.review.errors.md`. The differences between them are limited to frontmatter wrappers (script paths, metadata fields, extension comments), while the core 120-line instruction set is copied verbatim. This means any update to error-handling review criteria must be applied in four places, which practically guarantees drift. There is already evidence of divergence in this PR (e.g., `{SCRIPT}` placeholder vs hardcoded `.specify/scripts/bash/detect-changed-files.sh`), so the risk is realized rather than theoretical. For a cleanup PR, consider extracting the shared prompt body into a single source and referencing it from the different integration wrappers, or at minimum add a comment in each file pointing to the canonical version so future editors know to keep them in sync.</violation>
</file>

<file name=".specify/templates/tasks-template.md">

<violation number="1" location=".specify/templates/tasks-template.md:12">
P2: Making tests optional in this tasks template conflicts with the repository's constitution (`dev/constitution.md`, Section V), which establishes sanity, unit, and integration tests as mandatory quality gates. The previous template included a required test phase, but the revision replaces it with an optional-per-request model. Because this file drives the `/speckit-tasks` command that generates implementation plans, treating tests as optional can produce plans with no test coverage, bypassing the collection's established CI and quality requirements. Consider restoring test tasks as a default, mandatory phase or aligning the template's guidance with the constitution's test coverage expectations.</violation>
</file>

<file name=".specify/extensions/review/scripts/powershell/detect-changed-files.ps1">

<violation number="1" location=".specify/extensions/review/scripts/powershell/detect-changed-files.ps1:139">
P2: The script requests NUL-delimited git output (`-z`) but then processes it through PowerShell's line-oriented text capture, which is fragile for filenames containing newlines or carriage returns. PowerShell splits native command output on line boundaries before the code attempts to re-join with `\n` and split on `\0`; this round-trip cannot fully recover the original byte sequences for edge-case paths (e.g., `\r` is stripped by StreamReader and not restored). The companion bash script correctly preserves these filenames using `read -r -d ''`, so the PowerShell path introduces a cross-shell behavior divergence for valid filenames.

Consider either dropping `-z` and relying on git's default newline/C-style quoting output (which PowerShell handles cleanly), or implementing a binary-safe read path that does not pass the data through line-splitting text capture.</violation>

<violation number="2" location=".specify/extensions/review/scripts/powershell/detect-changed-files.ps1:147">
P2: The working-directory change detection uses only `git diff --cached` and `git diff`, which exclude untracked files. If a user creates new files but hasn't staged them, the script reports "No changes detected" even though there are files to review. Consider also including untracked files (e.g. via `git ls-files --others --exclude-standard`) in both Mode A (uncommitted portion) and Mode B.</violation>
</file>

<file name=".github/agents/speckit.review.tests.agent.md">

<violation number="1" location=".github/agents/speckit.review.tests.agent.md:4">
P1: Custom agent: **Flag AI Slop and Fabricated Changes**

The agent prompt references scripts that do not exist in the repository: `.specify/scripts/bash/detect-changed-files.sh` and `.specify/scripts/powershell/detect-changed-files.ps1`. These paths appear in both the YAML front matter and the body instructions, yet the repository only contains `.specify/scripts/bash/` (with different scripts) and no `powershell/` subdirectory at all. Please either add the missing scripts or update the prompt to reference existing ones.</violation>
</file>

<file name=".agents/skills/speckit-taskstoissues/SKILL.md">

<violation number="1" location=".agents/skills/speckit-taskstoissues/SKILL.md:82">
P2: Custom agent: **Flag AI Slop and Fabricated Changes**

The Post-Execution Checks section repeats the entire hook-processing prose from Pre-Execution Checks with only cosmetic renaming (`after_taskstoissues`, `Hook` vs `Pre-Hook`). This duplication burdens future maintenance because changes to YAML parsing, `enabled` filtering, `condition` handling, or command formatting must be kept in sync across both sections. Consider consolidating the shared hook logic into a single referenced block or abstracting it, similar to how other skill files in this repo partially rewrite post-execution instructions rather than duplicating them verbatim.</violation>
</file>

<file name=".agents/skills/speckit-tasks/SKILL.md">

<violation number="1" location=".agents/skills/speckit-tasks/SKILL.md:92">
P2: Custom agent: **Flag AI Slop and Fabricated Changes**

The "Mandatory Post-Execution Hooks" section duplicates nearly all the hook-processing logic from the "Pre-Execution Checks" section above it. Both sections walk through the same steps—checking `.specify/extensions.yml`, parsing YAML silently, filtering by `enabled`, skipping un-evaluated `condition` expressions, constructing slash commands with the same example, and formatting optional/mandatory hook output—with only cosmetic distinctions (`after_tasks` vs `before_tasks`, "Automatic Hook" vs "Automatic Pre-Hook"). This is patchwork duplication that bloats the instructions and increases future maintenance risk. Extract the common hook-processing rules into a single shared reference or a reusable subsection rather than repeating the prose.</violation>
</file>

<file name=".github/agents/speckit.review.simplify.agent.md">

<violation number="1" location=".github/agents/speckit.review.simplify.agent.md:5">
P1: Custom agent: **Flag AI Slop and Fabricated Changes**

The referenced scripts do not exist at the stated paths. The file contains fabricated references to `.specify/scripts/bash/detect-changed-files.sh` and `.specify/scripts/powershell/detect-changed-files.ps1`, but the actual scripts are located under `.specify/extensions/review/scripts/`. An agent following these instructions will fail to locate and execute the scripts. Update both the frontmatter paths and the body reference to point to `.specify/extensions/review/scripts/bash/detect-changed-files.sh` and `.specify/extensions/review/scripts/powershell/detect-changed-files.ps1`.</violation>
</file>

<file name=".agents/skills/speckit-review-errors/SKILL.md">

<violation number="1" location=".agents/skills/speckit-review-errors/SKILL.md:17">
P1: Custom agent: **Flag AI Slop and Fabricated Changes**

This SKILL.md includes a hard requirement to execute `.specify/scripts/bash/detect-changed-files.sh`, but the script does not exist in the repository. Because the doc explicitly forbids any alternative detection method, the agent following these instructions would fail. You should either create the missing script or update the instructions to reference an existing mechanism.</violation>
</file>

<file name=".agents/commands/speckit.review.types.md">

<violation number="1" location=".agents/commands/speckit.review.types.md:5">
P1: Custom agent: **Flag AI Slop and Fabricated Changes**

The file references `.specify/scripts/bash/detect-changed-files.sh` and `.specify/scripts/powershell/detect-changed-files.ps1` in both the front matter and the body instructions, but these files do not exist at those paths. The actual scripts are located under `.specify/extensions/review/scripts/...`. This appears to be a fabricated or incorrect path that would cause the agent instruction to fail at runtime. Please update the references to point to the correct existing paths: `.specify/extensions/review/scripts/bash/detect-changed-files.sh` and `.specify/extensions/review/scripts/powershell/detect-changed-files.ps1`.</violation>
</file>

<file name=".github/agents/speckit.review.comments.agent.md">

<violation number="1" location=".github/agents/speckit.review.comments.agent.md:5">
P1: Custom agent: **Flag AI Slop and Fabricated Changes**

The agent prompt references script paths that do not exist at those locations. The actual scripts are located under `.specify/extensions/review/scripts/`, not `.specify/scripts/`. An agent following these instructions would fail when attempting to execute the missing files. Consider updating the front matter and inline references to use the correct paths: `.specify/extensions/review/scripts/bash/detect-changed-files.sh` and `.specify/extensions/review/scripts/powershell/detect-changed-files.ps1`.</violation>
</file>

<file name=".agents/skills/speckit-review-tests/SKILL.md">

<violation number="1" location=".agents/skills/speckit-review-tests/SKILL.md:17">
P1: Custom agent: **Flag AI Slop and Fabricated Changes**

The skill definition references a script at `.specify/scripts/bash/detect-changed-files.sh`, but the actual file is located at `.specify/extensions/review/scripts/bash/detect-changed-files.sh`. This incorrect path would cause the agent to fail when attempting to detect changed files. Please update the reference to the correct path.</violation>
</file>

<file name=".specify/extensions/git/commands/speckit.git.remote.md">

<violation number="1" location=".specify/extensions/git/commands/speckit.git.remote.md:1">
P2: Custom agent: **Flag AI Slop and Fabricated Changes**

This PR adds documentation for a `speckit.git.remote` command that describes detecting and parsing Git remote URLs, yet no corresponding command implementation (Bash or PowerShell script) is included in the diff. Every other complex command in the same Git extension (`speckit.git.commit`, `speckit.git.feature`, `speckit.git.initialize`) is backed by matching shell scripts, so this stands out as documentation claiming behavior that isn’t actually implemented in the changed code. If the command is intended to be interpreted generically by speckit, please point to the runner capability that handles it; otherwise, add the missing scripts or remove the unimplemented command registration from `extension.yml`.</violation>
</file>

<file name=".github/agents/speckit.review.types.agent.md">

<violation number="1" location=".github/agents/speckit.review.types.agent.md:5">
P1: Custom agent: **Flag AI Slop and Fabricated Changes**

The script paths referenced in this agent file do not exist in the repository. The actual scripts live under `.specify/extensions/review/scripts/`, not `.specify/scripts/`. This means an AI agent following these instructions will fail to locate and execute the changed-files detection scripts. Please update the paths to point to the correct locations: `.specify/extensions/review/scripts/bash/detect-changed-files.sh` and `.specify/extensions/review/scripts/powershell/detect-changed-files.ps1`, and apply the same correction to the inline command reference later in the document.</violation>
</file>

<file name=".agents/skills/speckit-review-run/SKILL.md">

<violation number="1" location=".agents/skills/speckit-review-run/SKILL.md:20">
P1: Custom agent: **Flag AI Slop and Fabricated Changes**

The SKILL.md references a config file path that does not exist in the repository. The extension provides `config-template.yml`, not `review-config.yml`. This is a fabricated reference that would mislead users following the instructions.</violation>
</file>

<file name=".agents/commands/speckit.review.tests.md">

<violation number="1" location=".agents/commands/speckit.review.tests.md:5">
P1: Custom agent: **Flag AI Slop and Fabricated Changes**

The frontmatter of this agent command file references scripts at `.specify/scripts/bash/detect-changed-files.sh` and `.specify/scripts/powershell/detect-changed-files.ps1`, but neither of these paths exists after this change. The actual scripts live under `.specify/extensions/review/scripts/...` instead. When this command runs, the agent will fail to find and execute the required change-detection scripts because the paths in the frontmatter are incorrect. Update the `scripts.sh` and `scripts.ps` paths in the frontmatter to point to the actual file locations: `.specify/extensions/review/scripts/bash/detect-changed-files.sh` and `.specify/extensions/review/scripts/powershell/detect-changed-files.ps1`.</violation>
</file>

<file name=".agents/skills/speckit-clarify/SKILL.md">

<violation number="1" location=".agents/skills/speckit-clarify/SKILL.md:28">
P2: Custom agent: **Flag AI Slop and Fabricated Changes**

The Pre-Execution Checks and Mandatory Post-Execution Hooks sections both contain ~30 lines of nearly identical prose for processing extension hooks (YAML file check, enabled filtering, condition handling, slash-command construction). The only meaningful differences are cosmetic renames such as `hooks.before_clarify` vs `hooks.after_clarify` and "Pre-Hook" vs "Hook." Consider factoring the shared hook-processing rules into a single referenced section (e.g., an "Extension Hook Processing" subsection) so both Pre-Execution and Post-Execution phases can reference it, keeping only phase-specific details (hook key and continuation behavior) local to each section. This reduces maintenance surface and prevents the two blocks from drifting out of sync on future edits.</violation>
</file>

<file name=".github/agents/speckit.critique.run.agent.md">

<violation number="1" location=".github/agents/speckit.critique.run.agent.md:6">
P2: Custom agent: **Flag AI Slop and Fabricated Changes**

The agent definition references a PowerShell prerequisite-check script in its YAML frontmatter that does not exist in the repository (`scripts.ps`), which could cause the agent runtime to fail or produce an error when the `ps` script entry is resolved. Consider either adding the missing `.specify/scripts/powershell/check-prerequisites.ps1` script or removing the `ps:` entry from this agent's frontmatter if PowerShell support is not intended.</violation>

<violation number="2" location=".github/agents/speckit.critique.run.agent.md:179">
P2: Custom agent: **Flag AI Slop and Fabricated Changes**

The instructions reference `.specify/templates/critique-template.md` as the required structure for critique reports, but this file does not exist at that path. There is an existing critique template at `.specify/extensions/critique/commands/critique-template.md` instead. Using the wrong path could cause template-loading failures or confuse agent execution. Update the path to point to the existing template or relocate the template if the current location is unintended.</violation>

<violation number="3" location=".github/agents/speckit.critique.run.agent.md:214">
P2: Custom agent: **Flag AI Slop and Fabricated Changes**

The file repeats virtually the entire hook-processing procedure (file check → YAML read → enabled filter → condition handling → output templates → silent skip) in both the `Pre-Execution Checks` and `Post-Critique Actions` sections. Only cosmetic labels change (`before_critique`/`after_critique`, `Pre-Hook`/`Hook`) and a single extra sentence in the pre-hook output. This is a textbook example of "duplicated or patchwork additions where the same implementation or prose is repeated with only cosmetic renaming" that the rule flags as AI slop. Declaring the shared logic once and parameterizing the phase label would keep the prompt DRY and easier to maintain.</violation>
</file>

<file name=".specify/extensions/review/tests/bats/detect-changed-files.bats">

<violation number="1" location=".specify/extensions/review/tests/bats/detect-changed-files.bats:587">
P2: Custom agent: **Flag AI Slop and Fabricated Changes**

The "handles filenames with backslashes in JSON mode" test at line 582 currently verifies only that the script exits successfully and produces valid JSON — it never asserts that the backslash-named file (`file\slash.txt`) actually appears in the `changed_files` output. This makes it notably weaker than the sister tests for double quotes and special characters, which actively confirm the files are present. A regression that silently drops the backslash file from the output would go undetected. Consider adding an assertion similar to the double-quote test, such as checking that `json_array_field "$output" "changed_files"` contains the filename, to verify the file is included and properly JSON-escaped.</violation>
</file>

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

The script outputs JSON with:

- `BRANCH_NAME`: The branch name (e.g., `user-auth-infp-460`)
- `FEATURE_NUM`: The ticket ID

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1: The skill incorrectly states that FEATURE_NUM will be the ticket ID when branches are created with the <short-name>-<ticket-id> format (e.g., user-auth-infp-460). In practice, the create-new-feature.sh script only extracts a numeric prefix from branch names; if no numeric prefix is found, FEATURE_NUM is set to the full branch name. Branches in this format will also fail the speckit.git.validate validation, which expects sequential (^[0-9]{3,}-) or timestamp (^[0-9]{8}-[0-9]{6}-) prefixes. Consider revising the branch format to include a numeric or timestamp prefix that the script and validator recognize.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .agents/skills/speckit-git-feature/SKILL.md, line 79:

<comment>The skill incorrectly states that `FEATURE_NUM` will be the ticket ID when branches are created with the `<short-name>-<ticket-id>` format (e.g., `user-auth-infp-460`). In practice, the `create-new-feature.sh` script only extracts a numeric prefix from branch names; if no numeric prefix is found, `FEATURE_NUM` is set to the full branch name. Branches in this format will also fail the `speckit.git.validate` validation, which expects sequential (`^[0-9]{3,}-`) or timestamp (`^[0-9]{8}-[0-9]{6}-`) prefixes. Consider revising the branch format to include a numeric or timestamp prefix that the script and validator recognize.</comment>

<file context>
@@ -0,0 +1,79 @@
+The script outputs JSON with:
+
+- `BRANCH_NAME`: The branch name (e.g., `user-auth-infp-460`)
+- `FEATURE_NUM`: The ticket ID
</file context>

- 🤔 **Question**: Ambiguity or assumption that needs stakeholder input. Cannot be resolved by the development team alone.

7. **Generate Critique Report**:
Ensure the directory `FEATURE_DIR/critiques/` exists (create it if necessary), then create the critique report at `FEATURE_DIR/critiques/critique-{timestamp}.md` using `.specify/templates/critique-template.md` as the required structure. The report must include:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1: The skill references a template at .specify/templates/critique-template.md, but that file does not exist in the repository. The PR actually introduces the critique template at .specify/extensions/critique/commands/critique-template.md instead. If the skill runtime resolves this path directly, the Generate Critique Report step will fail because the expected template is missing. Consider updating the path in the skill definition to match the actual location of the template introduced by this PR.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .agents/skills/speckit-critique-run/SKILL.md, line 178:

<comment>The skill references a template at `.specify/templates/critique-template.md`, but that file does not exist in the repository. The PR actually introduces the critique template at `.specify/extensions/critique/commands/critique-template.md` instead. If the skill runtime resolves this path directly, the **Generate Critique Report** step will fail because the expected template is missing. Consider updating the path in the skill definition to match the actual location of the template introduced by this PR.</comment>

<file context>
@@ -0,0 +1,241 @@
+   - 🤔 **Question**: Ambiguity or assumption that needs stakeholder input. Cannot be resolved by the development team alone.
+
+7. **Generate Critique Report**:
+   Ensure the directory `FEATURE_DIR/critiques/` exists (create it if necessary), then create the critique report at `FEATURE_DIR/critiques/critique-{timestamp}.md` using `.specify/templates/critique-template.md` as the required structure. The report must include:
+
+   - **Executive Summary**: Overall assessment and readiness to proceed
</file context>

- 🤔 **Question**: Ambiguity or assumption that needs stakeholder input. Cannot be resolved by the development team alone.

7. **Generate Critique Report**:
Ensure the directory `FEATURE_DIR/critiques/` exists (create it if necessary), then create the critique report at `FEATURE_DIR/critiques/critique-{timestamp}.md` using `templates/critique-template.md` as the required structure. The report must include:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1: The template path referenced in the run instructions (templates/critique-template.md) does not match the actual template location. The file was added at .specify/extensions/critique/commands/critique-template.md, and the README correctly points to commands/critique-template.md. Since there is no templates/ directory under the critique extension, this mismatch would cause template lookup failures when executing the command. Consider updating the path to commands/critique-template.md to align with the actual file location and the README documentation.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .specify/extensions/critique/commands/run.md, line 175:

<comment>The template path referenced in the run instructions (`templates/critique-template.md`) does not match the actual template location. The file was added at `.specify/extensions/critique/commands/critique-template.md`, and the README correctly points to `commands/critique-template.md`. Since there is no `templates/` directory under the critique extension, this mismatch would cause template lookup failures when executing the command. Consider updating the path to `commands/critique-template.md` to align with the actual file location and the README documentation.</comment>

<file context>
@@ -0,0 +1,238 @@
+   - 🤔 **Question**: Ambiguity or assumption that needs stakeholder input. Cannot be resolved by the development team alone.
+
+7. **Generate Critique Report**:
+   Ensure the directory `FEATURE_DIR/critiques/` exists (create it if necessary), then create the critique report at `FEATURE_DIR/critiques/critique-{timestamp}.md` using `templates/critique-template.md` as the required structure. The report must include:
+
+   - **Executive Summary**: Overall assessment and readiness to proceed
</file context>

2. **Load Critique Context**:
- **REQUIRED**: Read `spec.md` for requirements, user stories, and acceptance criteria
- **REQUIRED**: Read `plan.md` for architecture, tech stack, and implementation phases
- **IF EXISTS**: Read `/memory/constitution.md` for governing principles

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1: The constitution path /memory/constitution.md is incorrect for this repository. The file actually lives at .specify/memory/constitution.md, as confirmed by the filesystem and documented in dev/README.md (".specify/memory/constitution.md is a symlink to this file so the spec-kit workflow resolves it"). Because the critique command checks for the constitution with an "IF EXISTS" guard, the wrong path means the constitution check is silently skipped, and constitution-violating items will not be flagged as 🎯 Must-Address. This undermines a core governance safeguard.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .specify/extensions/critique/commands/run.md, line 69:

<comment>The constitution path `/memory/constitution.md` is incorrect for this repository. The file actually lives at `.specify/memory/constitution.md`, as confirmed by the filesystem and documented in `dev/README.md` ("`.specify/memory/constitution.md` is a symlink to this file so the spec-kit workflow resolves it"). Because the critique command checks for the constitution with an "IF EXISTS" guard, the wrong path means the constitution check is silently skipped, and constitution-violating items will not be flagged as 🎯 Must-Address. This undermines a core governance safeguard.</comment>

<file context>
@@ -0,0 +1,238 @@
+2. **Load Critique Context**:
+   - **REQUIRED**: Read `spec.md` for requirements, user stories, and acceptance criteria
+   - **REQUIRED**: Read `plan.md` for architecture, tech stack, and implementation phases
+   - **IF EXISTS**: Read `/memory/constitution.md` for governing principles
+   - **IF EXISTS**: Read `tasks.md` for task breakdown (if already generated)
+   - **IF EXISTS**: Read previous critique reports in FEATURE_DIR/critiques/ for context
</file context>

Comment on lines +4 to +5
sh: scripts/bash/check-prerequisites.sh --json --paths-only
ps: scripts/powershell/check-prerequisites.ps1 -Json -PathsOnly

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1: The prerequisite script paths in the frontmatter point to scripts/... at repo root, but the actual scripts live under .specify/scripts/.... Because the Outline says to run {SCRIPT} from repo root, this causes a "No such file or directory" failure before the command can resolve FEATURE_DIR. Update both sh and ps entries to start with .specify/scripts/.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .specify/extensions/opsmill/commands/summary.md, line 4:

<comment>The prerequisite script paths in the frontmatter point to `scripts/...` at repo root, but the actual scripts live under `.specify/scripts/...`. Because the Outline says to run `{SCRIPT}` from repo root, this causes a "No such file or directory" failure before the command can resolve `FEATURE_DIR`. Update both `sh` and `ps` entries to start with `.specify/scripts/`.</comment>

<file context>
@@ -0,0 +1,139 @@
+---
+description: Produce a flow-level summary of the current Claude Code session — executive summary, chronological timeline, and outcomes — written into the active feature directory next to spec.md / plan.md.
+scripts:
+  sh: scripts/bash/check-prerequisites.sh --json --paths-only
+  ps: scripts/powershell/check-prerequisites.ps1 -Json -PathsOnly
+---
</file context>
Suggested change
sh: scripts/bash/check-prerequisites.sh --json --paths-only
ps: scripts/powershell/check-prerequisites.ps1 -Json -PathsOnly
sh: .specify/scripts/bash/check-prerequisites.sh --json --paths-only
ps: .specify/scripts/powershell/check-prerequisites.ps1 -Json -PathsOnly

- Check if `.specify/extensions.yml` exists in the project root.
- If it exists, read it and look for entries under the `hooks.before_clarify` key
- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally
- Filter out hooks where `enabled` is explicitly `false`. Treat hooks without an `enabled` field as enabled by default.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: Custom agent: Flag AI Slop and Fabricated Changes

The Pre-Execution Checks and Mandatory Post-Execution Hooks sections both contain ~30 lines of nearly identical prose for processing extension hooks (YAML file check, enabled filtering, condition handling, slash-command construction). The only meaningful differences are cosmetic renames such as hooks.before_clarify vs hooks.after_clarify and "Pre-Hook" vs "Hook." Consider factoring the shared hook-processing rules into a single referenced section (e.g., an "Extension Hook Processing" subsection) so both Pre-Execution and Post-Execution phases can reference it, keeping only phase-specific details (hook key and continuation behavior) local to each section. This reduces maintenance surface and prevents the two blocks from drifting out of sync on future edits.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .agents/skills/speckit-clarify/SKILL.md, line 28:

<comment>The Pre-Execution Checks and Mandatory Post-Execution Hooks sections both contain ~30 lines of nearly identical prose for processing extension hooks (YAML file check, enabled filtering, condition handling, slash-command construction). The only meaningful differences are cosmetic renames such as `hooks.before_clarify` vs `hooks.after_clarify` and "Pre-Hook" vs "Hook." Consider factoring the shared hook-processing rules into a single referenced section (e.g., an "Extension Hook Processing" subsection) so both Pre-Execution and Post-Execution phases can reference it, keeping only phase-specific details (hook key and continuation behavior) local to each section. This reduces maintenance surface and prevents the two blocks from drifting out of sync on future edits.</comment>

<file context>
@@ -0,0 +1,288 @@
+- Check if `.specify/extensions.yml` exists in the project root.
+- If it exists, read it and look for entries under the `hooks.before_clarify` key
+- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally
+- Filter out hooks where `enabled` is explicitly `false`. Treat hooks without an `enabled` field as enabled by default.
+- For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:
+  - If the hook has no `condition` field, or it is null/empty, treat the hook as executable
</file context>

- 🤔 **Question**: Ambiguity or assumption that needs stakeholder input. Cannot be resolved by the development team alone.

7. **Generate Critique Report**:
Ensure the directory `FEATURE_DIR/critiques/` exists (create it if necessary), then create the critique report at `FEATURE_DIR/critiques/critique-{timestamp}.md` using `.specify/templates/critique-template.md` as the required structure. The report must include:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: Custom agent: Flag AI Slop and Fabricated Changes

The instructions reference .specify/templates/critique-template.md as the required structure for critique reports, but this file does not exist at that path. There is an existing critique template at .specify/extensions/critique/commands/critique-template.md instead. Using the wrong path could cause template-loading failures or confuse agent execution. Update the path to point to the existing template or relocate the template if the current location is unintended.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .github/agents/speckit.critique.run.agent.md, line 179:

<comment>The instructions reference `.specify/templates/critique-template.md` as the required structure for critique reports, but this file does not exist at that path. There is an existing critique template at `.specify/extensions/critique/commands/critique-template.md` instead. Using the wrong path could cause template-loading failures or confuse agent execution. Update the path to point to the existing template or relocate the template if the current location is unintended.</comment>

<file context>
@@ -0,0 +1,242 @@
+   - 🤔 **Question**: Ambiguity or assumption that needs stakeholder input. Cannot be resolved by the development team alone.
+
+7. **Generate Critique Report**:
+   Ensure the directory `FEATURE_DIR/critiques/` exists (create it if necessary), then create the critique report at `FEATURE_DIR/critiques/critique-{timestamp}.md` using `.specify/templates/critique-template.md` as the required structure. The report must include:
+
+   - **Executive Summary**: Overall assessment and readiness to proceed
</file context>

- If PROCEED WITH UPDATES: "Review the suggested changes, then run `/speckit.tasks`"
- If RETHINK: "Consider running `/speckit.specify` to refine the spec or `/speckit.plan` to revise the architecture"

**Check for extension hooks (after critique)**:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: Custom agent: Flag AI Slop and Fabricated Changes

The file repeats virtually the entire hook-processing procedure (file check → YAML read → enabled filter → condition handling → output templates → silent skip) in both the Pre-Execution Checks and Post-Critique Actions sections. Only cosmetic labels change (before_critique/after_critique, Pre-Hook/Hook) and a single extra sentence in the pre-hook output. This is a textbook example of "duplicated or patchwork additions where the same implementation or prose is repeated with only cosmetic renaming" that the rule flags as AI slop. Declaring the shared logic once and parameterizing the phase label would keep the prompt DRY and easier to maintain.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .github/agents/speckit.critique.run.agent.md, line 214:

<comment>The file repeats virtually the entire hook-processing procedure (file check → YAML read → enabled filter → condition handling → output templates → silent skip) in both the `Pre-Execution Checks` and `Post-Critique Actions` sections. Only cosmetic labels change (`before_critique`/`after_critique`, `Pre-Hook`/`Hook`) and a single extra sentence in the pre-hook output. This is a textbook example of "duplicated or patchwork additions where the same implementation or prose is repeated with only cosmetic renaming" that the rule flags as AI slop. Declaring the shared logic once and parameterizing the phase label would keep the prompt DRY and easier to maintain.</comment>

<file context>
@@ -0,0 +1,242 @@
+- If PROCEED WITH UPDATES: "Review the suggested changes, then run `/speckit.tasks`"
+- If RETHINK: "Consider running `/speckit.specify` to refine the spec or `/speckit.plan` to revise the architecture"
+
+**Check for extension hooks (after critique)**:
+- Check if `.specify/extensions.yml` exists in the project root.
+- If it exists, read it and look for entries under the `hooks.after_critique` key
</file context>

both product strategy and engineering risk perspectives before implementation.
scripts:
sh: .specify/scripts/bash/check-prerequisites.sh --json --include-tasks
ps: .specify/scripts/powershell/check-prerequisites.ps1 -Json -IncludeTasks

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: Custom agent: Flag AI Slop and Fabricated Changes

The agent definition references a PowerShell prerequisite-check script in its YAML frontmatter that does not exist in the repository (scripts.ps), which could cause the agent runtime to fail or produce an error when the ps script entry is resolved. Consider either adding the missing .specify/scripts/powershell/check-prerequisites.ps1 script or removing the ps: entry from this agent's frontmatter if PowerShell support is not intended.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .github/agents/speckit.critique.run.agent.md, line 6:

<comment>The agent definition references a PowerShell prerequisite-check script in its YAML frontmatter that does not exist in the repository (`scripts.ps`), which could cause the agent runtime to fail or produce an error when the `ps` script entry is resolved. Consider either adding the missing `.specify/scripts/powershell/check-prerequisites.ps1` script or removing the `ps:` entry from this agent's frontmatter if PowerShell support is not intended.</comment>

<file context>
@@ -0,0 +1,242 @@
+  both product strategy and engineering risk perspectives before implementation.
+scripts:
+  sh: .specify/scripts/bash/check-prerequisites.sh --json --include-tasks
+  ps: .specify/scripts/powershell/check-prerequisites.ps1 -Json -IncludeTasks
+---
+
</file context>

cd "$TEST_TEMP_DIR"

# Create a file with a backslash in its name
local fname='file\slash.txt'

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: Custom agent: Flag AI Slop and Fabricated Changes

The "handles filenames with backslashes in JSON mode" test at line 582 currently verifies only that the script exits successfully and produces valid JSON — it never asserts that the backslash-named file (file\slash.txt) actually appears in the changed_files output. This makes it notably weaker than the sister tests for double quotes and special characters, which actively confirm the files are present. A regression that silently drops the backslash file from the output would go undetected. Consider adding an assertion similar to the double-quote test, such as checking that json_array_field "$output" "changed_files" contains the filename, to verify the file is included and properly JSON-escaped.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .specify/extensions/review/tests/bats/detect-changed-files.bats, line 587:

<comment>The "handles filenames with backslashes in JSON mode" test at line 582 currently verifies only that the script exits successfully and produces valid JSON — it never asserts that the backslash-named file (`file\slash.txt`) actually appears in the `changed_files` output. This makes it notably weaker than the sister tests for double quotes and special characters, which actively confirm the files are present. A regression that silently drops the backslash file from the output would go undetected. Consider adding an assertion similar to the double-quote test, such as checking that `json_array_field "$output" "changed_files"` contains the filename, to verify the file is included and properly JSON-escaped.</comment>

<file context>
@@ -0,0 +1,650 @@
+    cd "$TEST_TEMP_DIR"
+
+    # Create a file with a backslash in its name
+    local fname='file\slash.txt'
+    echo "content" > "$fname"
+    git add "$fname"
</file context>

Benoit Kohler and others added 2 commits July 3, 2026 10:55
The rebase onto develop pulled in vendored spec-kit content authored after
this branch adopted rumdl: `.specify/extensions/**` and the
`.github/agents/speckit.*.agent.md` definitions (added verbatim from
infrahub). Those 269 formatting deviations belong to upstream, not this
collection, and would fail the new `rumdl check .` CI job.

Broaden the rumdl `exclude` to keep it scoped to repo-owned markdown:
`.specify/templates` -> all of `.specify`, plus `.github/agents`. This
mirrors the existing `.agents`/`docs` exclusions and develop's own
`.yamllint.yml` `.specify/**` ignore. `rumdl check .` is clean (47 files).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore(standards): align repo with OpsMill standards (mechanical drift)
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 3, 2026

Copy link
Copy Markdown

Deploying infrahub-ansible with  Cloudflare Pages  Cloudflare Pages

Latest commit: 7ff39e7
Status: ✅  Deploy successful!
Preview URL: https://ef4566e3.infrahub-ansible.pages.dev
Branch Preview URL: https://develop.infrahub-ansible.pages.dev

View logs

@BeArchiTek
BeArchiTek merged commit 80dea6b into stable Jul 3, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/skip-changelog This will not be added to release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant