Skip to content

Merge develop into stable (pre-release: cleanup agentic structure) - #362

Merged
BeArchiTek merged 23 commits into
stablefrom
merge/develop-into-stable
Jul 3, 2026
Merged

Merge develop into stable (pre-release: cleanup agentic structure)#362
BeArchiTek merged 23 commits into
stablefrom
merge/develop-into-stable

Conversation

@BeArchiTek

@BeArchiTek BeArchiTek commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Supersedes #361, which was blocked on merge conflicts.

Summary

Merges develop into stable for the pre-release "cleanup agentic structure" sync (Spec Kit vendoring, rumdl markdown linting, docs npm→pnpm migration, CI auto-bump workflows). Resolved on a fresh integration branch off stable since #361's head was the long-lived develop branch.

Conflicts resolved

  • uv.lock — content conflict. develop's only delta vs stable is adding the rumdl dev dependency (17 lines; no versions changed or removed). Accepted develop's version; verified consistent with the merged pyproject.toml via uv lock --check. (80dea6b)
  • docs/package-lock.json — modify/delete. develop deleted it as part of the docs npm→pnpm migration (docs/pnpm-lock.yaml replaces it); stable had a 1-line touch. Accepted develop's deletion. No stale package-lock.json references remain in the tree. (80dea6b)

Conflicts raised for review

None — both conflicts were generated lockfiles with no semantic content. The full merged-tree-vs-develop diff is a single line: readme.mdx collection version 1.8.21.8.3 (develop's generated readme was stale; galaxy.yml is 1.8.3 on all branches, so the merged value is correct).

Validation

  • uv lock --check — passed (deps in sync with merged pyproject.toml).
  • invoke generate-doc — no real doc drift; produced only a non-deterministic plugin-list reorder, which was discarded to keep develop's CI-passing canonical ordering.
  • Not run locally (Docker unavailable): ansible-test sanity, unit, and integration suites — these carry no merge-specific changes beyond develop's already-CI'd content and will run via the stable-branch CI (linter + Ansible tests + docs build).

Summary by cubic

Syncs stable with develop for the pre-release agentic cleanup. Brings the Spec Kit agent stack, switches docs to pnpm, adopts rumdl for markdown linting, and adds CI auto-bump workflows.

  • New Features

    • Vendor Spec Kit 0.11.9 with extensions (agent-context, opsmill, critique, review, git), adding skills/commands under .agents/, .github/agents/, and .specify/extensions/.
    • End-to-end OpsMill flow: auto/prep/implement, extract/retrospect/summary, plus review/critique orchestration.
  • CI/Tooling

    • Adopt rumdl markdown linting (new GHA job); remove .markdownlint.yaml; exclude vendored .specify/ and .agents/.
    • Migrate docs to pnpm (Node 22); update build script and workflows; filter on pnpm-lock.yaml.
    • Add update-infrahub.yml and update-infrahub-sdk.yml workflows for auto-bumping dependencies.
    • Update ansible-lint excludes for vendored trees; expand .gitignore for secrets and docs artifacts.

Written for commit 80dea6b. Summary will update on new commits.

Review in cubic

Benoit Kohler and others added 23 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>
- 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>
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)
…-stable

# Conflicts:
#	docs/package-lock.json
#	uv.lock
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying infrahub-ansible with  Cloudflare Pages  Cloudflare Pages

Latest commit: 80dea6b
Status: ✅  Deploy successful!
Preview URL: https://e8aad533.infrahub-ansible.pages.dev
Branch Preview URL: https://merge-develop-into-stable.infrahub-ansible.pages.dev

View logs

@BeArchiTek
BeArchiTek marked this pull request as ready for review July 3, 2026 09:57
@BeArchiTek
BeArchiTek requested a review from a team as a code owner July 3, 2026 09:57
@BeArchiTek
BeArchiTek merged commit f4ac923 into stable Jul 3, 2026
24 checks passed
@BeArchiTek
BeArchiTek deleted the merge/develop-into-stable branch July 3, 2026 09:57
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.

1 participant