@raishin/vanguard-frontier-agentic 2.5.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/.agents/tasks/task-dynamic-kiro-powers/2025-01-24-120000-review.md +92 -0
  2. package/.agents/tasks/task-dynamic-kiro-powers/context.json +22 -0
  3. package/.agents/tasks/task-dynamic-kiro-powers/features/FEAT-001.json +34 -0
  4. package/.agents/tasks/task-dynamic-kiro-powers/task.json +14 -0
  5. package/.agents/tasks/task-jekyll-docs-site/2025-07-17-review.md +118 -0
  6. package/.agents/tasks/task-jekyll-docs-site/context.json +30 -0
  7. package/.agents/tasks/task-jekyll-docs-site/features/FEAT-001.json +28 -0
  8. package/.agents/tasks/task-jekyll-docs-site/features/FEAT-002.json +44 -0
  9. package/.agents/tasks/task-jekyll-docs-site/task.json +14 -0
  10. package/.claude-plugin/marketplace.json +1 -1
  11. package/.claude-plugin/plugin.json +1 -1
  12. package/.cursor-plugin/plugin.json +1 -1
  13. package/.github/plugin/marketplace.json +1 -1
  14. package/README.md +2 -0
  15. package/catalog/asset-integrity.json +129 -29
  16. package/package.json +3 -1
  17. package/plugins/vanguard-frontier-agentic/.codex-plugin/plugin.json +3 -2
  18. package/plugins/vanguard-frontier-agentic/skills/vanguard-frontier-agentic-install/SKILL.md +37 -0
  19. package/powers/README.md +28 -10
  20. package/powers/vanguard-argocd/POWER.md +40 -0
  21. package/powers/vanguard-backstage/POWER.md +40 -0
  22. package/powers/vanguard-cert-manager/POWER.md +40 -0
  23. package/powers/vanguard-cilium/POWER.md +40 -0
  24. package/powers/vanguard-dotnet/POWER.md +41 -0
  25. package/powers/vanguard-falco/POWER.md +40 -0
  26. package/powers/vanguard-fluxcd/POWER.md +40 -0
  27. package/powers/vanguard-generic/POWER.md +40 -0
  28. package/powers/vanguard-hr/POWER.md +41 -0
  29. package/powers/vanguard-istio/POWER.md +40 -0
  30. package/powers/vanguard-kyverno/POWER.md +40 -0
  31. package/powers/vanguard-legal/POWER.md +41 -0
  32. package/powers/vanguard-marketing/POWER.md +41 -0
  33. package/powers/vanguard-multi-cloud/POWER.md +41 -0
  34. package/powers/vanguard-opentelemetry/POWER.md +40 -0
  35. package/powers/vanguard-prometheus/POWER.md +40 -0
  36. package/powers/vanguard-sigstore/POWER.md +40 -0
  37. package/scripts/export-marketplace-agents.mjs +26 -0
  38. package/scripts/generate-kiro-powers.mjs +360 -5
  39. package/scripts/install-codex-home.mjs +95 -0
  40. package/tests/test-codex-plugin-marketplace-install.test.mjs +132 -0
  41. package/tests/test-vfa-export-coverage.test.mjs +108 -0
  42. package/tests/validate-codex-marketplace.py +23 -1
@@ -0,0 +1,92 @@
1
+ # Dynamic Kiro Powers generator
2
+
3
+ The generator was previously hardcoded to 15 providers. This change makes it scan `catalog/agents.json` at generate-time, discovering all 32 providers with a `kiro` harness, and auto-deriving steering content (displayName, description, keywords, invariants) for the 17 providers that lack hand-authored entries. A merged map of hand-authored + derived entries drives the iteration loop, and a new `renderReadme()` produces an alphabetically-sorted README reflecting the full set.
4
+
5
+ Watch for: mid-word truncation in 10 of 17 derived descriptions produces broken text visible in frontmatter (confirmed); grammar error "All 1 agents" for single-agent providers (confirmed); template renders maestro-routing guidance even for maestro-less providers, creating contradictory body text (confirmed, but pre-existing pattern extended to new providers).
6
+
7
+ ## High-level view
8
+
9
+ The description-generation logic for single-agent providers has a truncation path that cuts at 120 characters without respecting word boundaries, producing mid-word breaks like `secre...` and `t...` that appear literally in the POWER.md frontmatter `description` field. Ten of the seventeen derived providers hit this path. The descriptions pass the 3-sentence validator (the `...` doesn't count as a sentence terminator) but the output is visually broken and semantically incomplete.
10
+
11
+ The template-rendering path (`renderPower`) emits maestro guidance ("Use the maestro as the entry point...") unconditionally, even when the bullet above says "no maestro for this provider." This PR did not introduce the pattern but propagates it to 11 additional maestro-less providers, making the contradiction more visible and more likely to confuse Kiro's AI routing.
12
+
13
+ The `adapterNote` string has no singular branch — when a provider has exactly 1 agent, the output reads "All 1 agents in this provider ship a Kiro adapter" across 10 new providers.
14
+
15
+ <details>
16
+ <summary>Issues (3)</summary>
17
+
18
+ 1. **Mid-word description truncation** — `core.substring(0, 117) + "..."` cuts at byte offset regardless of word boundary. Truncate to the last space before 120 chars, or trim the catalog summary at a comma/list-item boundary so the description remains a coherent sentence fragment. Affects 10 of 17 new providers.
19
+ 2. **"All 1 agents" grammar** — The `adapterNote` template uses `All ${total} agents` without a singular branch. When `total === 1`, this should read "The single agent in this provider ships..." or equivalent. Affects 10 providers.
20
+ 3. **Maestro boilerplate on maestro-less providers** — The "Use the maestro as the entry point" paragraph is rendered even when the provider has no maestro. Conditionally omit or rewrite this paragraph when `maestro` is null.
21
+
22
+ </details>
23
+
24
+ <details>
25
+ <summary>Details</summary>
26
+
27
+ ## Description truncation at 120 chars
28
+
29
+ The derivation path for single-agent providers strips the catalog summary's "Agent for X." prefix, removes a leading "Review"/"Static review of" prefix, then truncates at 120 characters:
30
+
31
+ ```javascript
32
+ if (core.length > 120) {
33
+ core = core.substring(0, 117) + "...";
34
+ }
35
+ ```
36
+
37
+ This hard cut lands mid-word. For backstage the result is `"secre..."` (cutting "secret scope"), for cert-manager `"t..."` (cutting "trust"), for cilium `"policy ..."`. The frontmatter `description` field is the primary metadata Kiro's Powers panel shows to users. A word-boundary-aware truncation (find last space before offset 117, trim there, append `"..."`) would keep descriptions readable.
38
+
39
+ Only single-agent providers with long catalog summaries are affected — the multi-agent paths use `deriveTopics` which slices to 4 items and stays short.
40
+
41
+ ## Singular/plural grammar in adapter note
42
+
43
+ `renderPower` assembles: `"All ${total} agents in this provider ship a Kiro adapter..."`. When `total === 1`, this produces "All 1 agents in this provider ship." The template distinguishes `kiroAvailable === total` vs `kiroAvailable === 0` vs partial, but never checks for the singular case. Adding a `total === 1` guard (e.g., "The single agent in this provider ships a Kiro adapter...") fixes ten affected providers.
44
+
45
+ ## Contradictory maestro guidance for non-maestro providers
46
+
47
+ The body template always emits:
48
+
49
+ ```
50
+ Use the maestro as the entry point: classify the task, then dispatch to
51
+ one specialist or a parallel team of specialists.
52
+ ```
53
+
54
+ This appears directly beneath "*(no maestro for this provider; reference agents directly under `agents/<provider>/`)*". After this PR, 11 providers render this contradictory pair (up from 2 in the base). Since Kiro's AI uses this steering text for routing decisions, the contradiction could cause it to search for a non-existent maestro agent. Conditionalizing the paragraph on `maestro !== null` eliminates the issue.
55
+
56
+ ## Coverage gap: no truncation quality check
57
+
58
+ The Python validator checks structural constraints (3-sentence max, kebab-case, banned keywords) but has no assertion on description coherence. Mid-word truncation passes all existing checks. A simple regex check for `\w{2}\.\.\. ` (word fragment followed by ellipsis mid-sentence) would catch this class of defect.
59
+
60
+ </details>
61
+
62
+ <details>
63
+ <summary>File map</summary>
64
+
65
+ | File | Change |
66
+ |------|--------|
67
+ | `scripts/generate-kiro-powers.mjs` | +342 lines: `discoverKiroProviders`, `deriveProviderConfig`, `DISPLAY_NAME_OVERRIDES`, `DERIVED_KEYWORDS`, `buildMergedProviders`, `renderReadme`; loop changed from `PROVIDERS` to `allProviders` |
68
+ | `powers/README.md` | Now generated (count 14 -> 32, tree alphabetized, "How to update" references dynamic count) |
69
+ | `powers/vanguard-argocd/POWER.md` | New derived power |
70
+ | `powers/vanguard-backstage/POWER.md` | New derived power |
71
+ | `powers/vanguard-cert-manager/POWER.md` | New derived power |
72
+ | `powers/vanguard-cilium/POWER.md` | New derived power |
73
+ | `powers/vanguard-dotnet/POWER.md` | New derived power (has maestro) |
74
+ | `powers/vanguard-falco/POWER.md` | New derived power |
75
+ | `powers/vanguard-fluxcd/POWER.md` | New derived power |
76
+ | `powers/vanguard-generic/POWER.md` | New derived power |
77
+ | `powers/vanguard-hr/POWER.md` | New derived power (has maestro) |
78
+ | `powers/vanguard-istio/POWER.md` | New derived power |
79
+ | `powers/vanguard-kyverno/POWER.md` | New derived power |
80
+ | `powers/vanguard-legal/POWER.md` | New derived power (has maestro) |
81
+ | `powers/vanguard-marketing/POWER.md` | New derived power (has maestro) |
82
+ | `powers/vanguard-multi-cloud/POWER.md` | New derived power (has maestro) |
83
+ | `powers/vanguard-opentelemetry/POWER.md` | New derived power |
84
+ | `powers/vanguard-prometheus/POWER.md` | New derived power |
85
+ | `powers/vanguard-sigstore/POWER.md` | New derived power |
86
+ | `.agents/tasks/task-dynamic-kiro-powers/context.json` | Task context metadata |
87
+ | `.agents/tasks/task-dynamic-kiro-powers/features/FEAT-001.json` | Feature spec |
88
+ | `.agents/tasks/task-dynamic-kiro-powers/task.json` | Task tracker |
89
+
90
+ Full diff: `git diff 8e0a7fc..HEAD`
91
+
92
+ </details>
@@ -0,0 +1,22 @@
1
+ {
2
+ "project_type": "Multi-platform agent marketplace (Node.js scripts, Python validators)",
3
+ "language": "JavaScript (ESM) for generator, Python for validator",
4
+ "build_system": "npm scripts - no compile step, just generator + validators",
5
+ "test_framework": "Python validator scripts (tests/validate-kiro-powers.py) plus generator --check mode",
6
+ "build_command": "NODE_OPTIONS=\"\" node scripts/generate-kiro-powers.mjs",
7
+ "test_command": "NODE_OPTIONS=\"\" python3 tests/validate-kiro-powers.py",
8
+ "verification_instructions": "1. Run NODE_OPTIONS=\"\" node scripts/generate-kiro-powers.mjs to generate powers. 2. Run NODE_OPTIONS=\"\" python3 tests/validate-kiro-powers.py to validate. 3. Run NODE_OPTIONS=\"\" node scripts/generate-kiro-powers.mjs --check to confirm idempotency.",
9
+ "snapshot_or_generated_files": "powers/*/POWER.md and powers/README.md are generated files. Command: node scripts/generate-kiro-powers.mjs",
10
+ "setup_instructions": "No setup needed - Node.js and Python3 are pre-installed",
11
+ "environment_constraints": "Must prefix node commands with NODE_OPTIONS=\"\" due to sandbox preload issue",
12
+ "contribution_requirements": "Generated powers must conform to strict-5 frontmatter (name, displayName, description, keywords, author). Description max 3 sentences. Keywords must be specific, not broad (avoid: cloud, code, devops, infrastructure, infra, agent, agents, ai, ml, ops, automation, tool, tools, general). Names must be kebab-case.",
13
+ "key_patterns": "Generator uses a PROVIDERS object with hand-authored steering (displayName, description, keywords, invariants). renderPower() creates frontmatter + body. summarize() reads catalog for agent counts, maestro, live-guards. renderReadme() generates powers/README.md from PROVIDERS keys. Validator independently checks all powers/ subdirs.",
14
+ "relevant_files": [
15
+ "scripts/generate-kiro-powers.mjs",
16
+ "tests/validate-kiro-powers.py",
17
+ "catalog/agents.json",
18
+ "powers/README.md",
19
+ "powers/vanguard-aws/POWER.md"
20
+ ],
21
+ "directory_structure": "scripts/ has generators, tests/ has validators, catalog/agents.json is the source of truth for all agents, powers/ has generated POWER.md files per provider"
22
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "id": "FEAT-001",
3
+ "type": "fix",
4
+ "description": "Make the Kiro Powers generator fully dynamic so it auto-generates Powers for ALL 32 providers in catalog/agents.json that have 'kiro' in their harnesses array, not just the 15 hardcoded in the PROVIDERS object.",
5
+ "status": "completed",
6
+ "steps": [
7
+ "Step 1: In scripts/generate-kiro-powers.mjs, add a function that reads catalog/agents.json and discovers all unique providers where at least one agent has 'kiro' in its harnesses array. This should happen dynamically at generate-time.",
8
+ "Step 2: Add a function (e.g. `deriveProviderConfig`) that auto-generates steering content for providers NOT already in the hardcoded PROVIDERS object. The logic should be: (a) displayName: title-case the provider name with 'Vanguard Frontier -- ' prefix (use actual double-hyphen-space, e.g. 'Vanguard Frontier -- ArgoCD' becomes 'Vanguard Frontier \\u2014 ArgoCD' using em-dash matching existing convention). For multi-word names like 'multi-cloud' or 'cert-manager', convert to title case: 'Multi-Cloud', 'Cert-Manager'. For abbreviations like 'dotnet' use '.NET', 'hr' use 'HR', 'fluxcd' use 'FluxCD', 'argocd' use 'ArgoCD', 'opentelemetry' use 'OpenTelemetry'. (b) description: Generate from catalog data - max 3 sentences. Pattern: describe what the agents do based on agent IDs/summaries, mention maestro routing if present, note whether it has live-guard agents. Keep under 3 sentences. (c) keywords: Derive from provider name and agent IDs. Must be specific, NOT broad. Avoid the banned list: cloud, code, devops, infrastructure, infra, agent, agents, ai, ml, ops, automation, tool, tools, general. (d) invariants: Generate sensible defaults - if no live-guards, focus on review-only / static-analysis invariants. If has maestro, mention routing through maestro. If has live-guards, include the standard live-guard discipline bullet.",
9
+ "Step 3: Build a merged PROVIDERS-like map that combines the hand-authored PROVIDERS entries (unchanged) with the auto-derived entries for missing providers. The final iteration loop should use this merged map instead of just PROVIDERS.",
10
+ "Step 4: Update the loop at the bottom of the generator that iterates `Object.entries(PROVIDERS)` to instead iterate the merged map (all 32 providers). The renderPower and renderReadme functions should work with this merged map.",
11
+ "Step 5: Make sure the renderReadme function uses the merged map (all 32 providers) so the README.md accurately reflects the full count.",
12
+ "Step 6: The auto-derived descriptions MUST comply with the strict-5 spec: max 3 sentences for description, kebab-case name, specific non-broad keywords. Test each derived entry mentally.",
13
+ "Step 7: Run `NODE_OPTIONS=\"\" node scripts/generate-kiro-powers.mjs` and verify it generates 32 Power directories under powers/.",
14
+ "Step 8: Run `NODE_OPTIONS=\"\" python3 tests/validate-kiro-powers.py` and confirm all 32 Powers pass validation.",
15
+ "Step 9: Run `NODE_OPTIONS=\"\" node scripts/generate-kiro-powers.mjs --check` and confirm it reports all 32 Powers in sync (idempotency check)."
16
+ ],
17
+ "acceptance_criteria": [
18
+ "Running `NODE_OPTIONS=\"\" node scripts/generate-kiro-powers.mjs` produces 32 POWER.md files under powers/ (one per kiro-enabled provider)",
19
+ "Running `NODE_OPTIONS=\"\" python3 tests/validate-kiro-powers.py` passes with OK status for all 32 Powers",
20
+ "Running `NODE_OPTIONS=\"\" node scripts/generate-kiro-powers.mjs --check` exits 0 (all Powers in sync)",
21
+ "The 15 existing hand-authored providers (aws, azure, gcp, oci, alibaba, huawei, ovhcloud, scaleway, hetzner, contabo, ionos, kubernetes, terraform, nvidia, salesforce) retain their exact same steering content unchanged",
22
+ "The 17 new providers (argocd, backstage, cert-manager, cilium, dotnet, falco, fluxcd, generic, hr, istio, kyverno, legal, marketing, multi-cloud, opentelemetry, prometheus, sigstore) each get auto-generated Powers with valid strict-5 frontmatter",
23
+ "No generated keyword is in the broad-keywords banned list",
24
+ "No generated description exceeds 3 sentences",
25
+ "All generated names are lowercase kebab-case matching pattern 'vanguard-<provider>'"
26
+ ],
27
+ "verification": [
28
+ "NODE_OPTIONS=\"\" node scripts/generate-kiro-powers.mjs",
29
+ "NODE_OPTIONS=\"\" python3 tests/validate-kiro-powers.py",
30
+ "NODE_OPTIONS=\"\" node scripts/generate-kiro-powers.mjs --check"
31
+ ],
32
+ "blocked_reason": null,
33
+ "findings": "All 32 providers generate successfully. The generator outputs '33 Kiro Powers (+ README.md)' because it counts 32 POWER.md files + 1 README.md in the written array. The validator correctly reports 32 Powers. Single-agent providers use their catalog summary (second sentence if first is 'Agent for <id>.') with truncation to 120 chars. All descriptions pass the 3-sentence validator."
34
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "task_id": "task-dynamic-kiro-powers",
3
+ "task_description": "Make the Kiro Powers generator fully dynamic so it auto-generates Powers for ALL providers in catalog/agents.json that have 'kiro' in their harnesses array, not just the 15 hardcoded in the PROVIDERS object. This fixes the bug where 17 providers with Kiro adapters have no Power generated.",
4
+ "status": "completed",
5
+ "feature_order": ["FEAT-001"],
6
+ "blocked_reason": null,
7
+ "verification": {
8
+ "build": "pass",
9
+ "tests": "pass",
10
+ "test_quality": "pass",
11
+ "docker_build": "skipped",
12
+ "summary": "Generator produces 32 Powers (up from 15). Validator confirms all 32 pass strict-5 frontmatter, kebab-case, max-3-sentence, non-broad-keyword checks. Idempotency check (--check) passes. Review fixes applied: word-boundary truncation, singular grammar for single-agent providers, conditional maestro boilerplate."
13
+ }
14
+ }
@@ -0,0 +1,118 @@
1
+ # Jekyll documentation site for GitHub Pages
2
+
3
+ A complete documentation system added to the repository: Jekyll infrastructure (`_config.yml`, `Gemfile`, root `index.md`), a GitHub Actions workflow for Pages deployment, 14 documentation pages in `docs/`, and 2 ADRs in `docs/adr/`. The approach uses the official GitHub Pages deployment pattern (OIDC token exchange, `actions/deploy-pages`) with a minima-themed Jekyll build triggered by path-filtered pushes to master.
4
+
5
+ Watch for: The `_config.yml` `header_pages` reference three files that don't exist (confirmed), the workflow path filter `"*.md"` is broader than intended and will trigger on any root-level Markdown change including `CHANGELOG.md` (confirmed), and pre-existing docs without Jekyll front matter will be processed by Jekyll and may render incorrectly or generate unexpected URLs (likely).
6
+
7
+ ## High-level view
8
+
9
+ The `_config.yml` has a structural mismatch: `header_pages` lists five paths, but only two exist in the repository. The first three (`docs/architecture/index.md`, `docs/strategy/index.md`, `docs/integrations/index.md`) will produce broken navigation links. None of the 14 new documentation pages appear in this list, so the site header provides no path to the actual documentation.
10
+
11
+ The build will process all Markdown files in `docs/` including ~20 pre-existing files that lack Jekyll front matter. These become uncontrolled public pages with incorrect formatting. The `_config.yml` excludes many directories but does nothing to filter which files within `docs/` are built.
12
+
13
+ The workflow trigger includes `"*.md"` which matches any root-level Markdown file. Since `CHANGELOG.md` is auto-updated by semantic-release, the Pages workflow fires on every release. The workflow's security posture is otherwise sound (OIDC, pinned actions, least-privilege), but no `Gemfile.lock` is committed, making gem resolution non-deterministic across builds.
14
+
15
+ <details>
16
+ <summary>Issues (6)</summary>
17
+
18
+ 1. **Broken header navigation** — `_config.yml` `header_pages` references `docs/architecture/index.md`, `docs/strategy/index.md`, and `docs/integrations/index.md` which do not exist. Remove or replace with paths to actual files. (confirmed)
19
+ 2. **Overly broad path trigger** — Workflow path filter `"*.md"` will trigger on `CHANGELOG.md` changes from every release. Replace with explicit file list or narrower glob like `"index.md"`. (confirmed)
20
+ 3. **Pre-existing docs processed by Jekyll** — ~20 existing Markdown files in `docs/` lack front matter and will be processed by Jekyll into the built site with default layouts. Either exclude them in `_config.yml` or accept uncontrolled output pages. (likely)
21
+ 4. **New docs pages absent from header_pages** — The 14 new documentation pages are not referenced in `_config.yml` `header_pages`, so the minima theme header won't link to them. Navigation depends entirely on users finding `docs/index.md`. (confirmed)
22
+ 5. **Spurious workflow triggers from CHANGELOG.md** — `_config.yml` excludes `CHANGELOG.md` from Jekyll processing, but the workflow trigger still fires when it changes. The build runs unnecessarily on every release. (confirmed)
23
+ 6. **Missing Gemfile.lock** — No lockfile is committed. `bundler-cache: true` in the workflow caches based on `Gemfile.lock`, but without one, gem resolution is non-deterministic. A malicious or broken gem update could affect the build silently. Commit a `Gemfile.lock`. (confirmed)
24
+
25
+ </details>
26
+
27
+ <details>
28
+ <summary>Details</summary>
29
+
30
+ ## `_config.yml` navigation mismatch
31
+
32
+ The `header_pages` configuration lists five files for the minima theme navigation bar:
33
+
34
+ ```yaml
35
+ header_pages:
36
+ - docs/architecture/index.md
37
+ - docs/strategy/index.md
38
+ - docs/integrations/index.md
39
+ - docs/taxonomy.md
40
+ - docs/compatibility.md
41
+ ```
42
+
43
+ `docs/architecture/index.md` does not exist — there is a `docs/architecture.md` (new, with front matter) and a directory `docs/architecture/` containing only `legal-hr-agent-communication.md` and `legal-hr-agent-routing.md`. `docs/strategy/index.md` does not exist — the directory has `finops-maestro-board-memo.md` and similar. `docs/integrations/index.md` does not exist — the directory has `installation-guide.md`, `multi-harness-adapter-pattern.md`, `skills-cli.md`.
44
+
45
+ The two files that do exist (`docs/taxonomy.md`, `docs/compatibility.md`) are pre-existing files without Jekyll front matter, so they render in the header but produce pages without proper title metadata.
46
+
47
+ A visitor arriving at the deployed site sees a broken or stale navigation bar with no path to the actual documentation. The `docs/index.md` page's internal links work, but only if users find it via the root `index.md` link.
48
+
49
+ ## Workflow path filter scope
50
+
51
+ ```yaml
52
+ paths:
53
+ - "docs/**"
54
+ - "_config.yml"
55
+ - "Gemfile"
56
+ - "index.md"
57
+ - "*.md"
58
+ ```
59
+
60
+ The `"*.md"` glob matches all root-level Markdown files. The repository root contains `CHANGELOG.md`, `README.md`, `CONTRIBUTING.md`, `SECURITY.md`, `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`, and `CODE_OF_CONDUCT.md`. The semantic-release workflow updates `CHANGELOG.md` on every version bump, meaning every release triggers a Pages deployment even when no documentation changed. Any change to `README.md` (common in PRs that update badge counts) also triggers the workflow.
61
+
62
+ The `"index.md"` entry already covers the root index file specifically — the `"*.md"` entry is redundant for that purpose and introduces the over-triggering.
63
+
64
+ ## Pre-existing docs without front matter
65
+
66
+ The `docs/` directory contains approximately 20 pre-existing Markdown files (`branch-protection.md`, `cross-harness-skills.md`, `evidence-output-spec.md`, `execution-tiers.md`, `least-privilege-rbac.md`, `npm-oidc-trusted-publishing.md`, `quality-bar.md`, `release-versioning.md`, `security-notes.md`, etc.) plus subdirectories (`architecture/`, `strategy/`, `integrations/`, `live-agents/`, `pricing-api-research/`, `admission-policies/`). None have Jekyll front matter.
67
+
68
+ Jekyll processes these files regardless. Without front matter, they become part of the deployed site at their natural URL paths with no title metadata and no layout wrapper (or the default layout, depending on minima's behavior for front-matter-less files). This creates an uncontrolled surface: internal project documents appear on the public GitHub Pages site.
69
+
70
+ The fix is either adding these file paths or glob patterns to `_config.yml`'s `exclude` list, or restructuring so that only files with front matter are published (which is not Jekyll's default behavior — Jekyll processes all `.md` files in non-excluded directories).
71
+
72
+ ## Missing Gemfile.lock
73
+
74
+ The `Gemfile` declares:
75
+
76
+ ```ruby
77
+ gem "jekyll", "~> 4.3"
78
+ gem "minima", "~> 2.5"
79
+ gem "jekyll-seo-tag"
80
+ ```
81
+
82
+ Without a committed `Gemfile.lock`, every CI run resolves gems fresh. The `ruby/setup-ruby` action's `bundler-cache: true` looks for `Gemfile.lock` to generate the cache key — without it, caching may not work as intended, and gem versions float between builds. Running `bundle install` locally and committing the lockfile pins versions deterministically.
83
+
84
+ </details>
85
+
86
+ <details>
87
+ <summary>Files changed (24)</summary>
88
+
89
+ | File | What changed |
90
+ |------|-------------|
91
+ | `.agents/tasks/task-jekyll-docs-site/context.json` | Task context metadata for the documentation task |
92
+ | `.agents/tasks/task-jekyll-docs-site/features/FEAT-001.json` | Feature spec for Jekyll infrastructure |
93
+ | `.agents/tasks/task-jekyll-docs-site/features/FEAT-002.json` | Feature spec for documentation content |
94
+ | `.agents/tasks/task-jekyll-docs-site/task.json` | Task orchestration state |
95
+ | `.github/workflows/jekyll-gh-pages.yml` | GitHub Actions workflow for Pages deployment |
96
+ | `Gemfile` | Ruby gem declarations for Jekyll build |
97
+ | `_config.yml` | Jekyll site configuration |
98
+ | `index.md` | Root Jekyll homepage |
99
+ | `docs/index.md` | Documentation hub landing page |
100
+ | `docs/getting-started.md` | Installation and first-use guide |
101
+ | `docs/architecture.md` | Three-layer architecture documentation |
102
+ | `docs/configuration.md` | Configuration reference |
103
+ | `docs/deployment.md` | npm publishing and release flow |
104
+ | `docs/github-pages.md` | GitHub Pages setup guide |
105
+ | `docs/security.md` | Supply chain security and threat model |
106
+ | `docs/testing.md` | Validation gates reference |
107
+ | `docs/operations-runbook.md` | Release operations and recovery |
108
+ | `docs/troubleshooting.md` | Common issues and fixes |
109
+ | `docs/contributing.md` | Contribution guide for docs |
110
+ | `docs/governance.md` | Decision-making and maintainer roles |
111
+ | `docs/roadmap.md` | Planned work and proposals |
112
+ | `docs/faq.md` | Frequently asked questions |
113
+ | `docs/adr/0001-initial-architecture.md` | ADR for three-layer Maestro architecture |
114
+ | `docs/adr/0002-documentation-site-with-jekyll-github-pages.md` | ADR for Jekyll + GitHub Pages choice |
115
+
116
+ Full diff: `git diff HEAD~4`
117
+
118
+ </details>
@@ -0,0 +1,30 @@
1
+ {
2
+ "project_type": "Node.js/Python hybrid - Enterprise AI agent ecosystem with 404 skills, 426 agents across 32 providers",
3
+ "language": "Markdown/JSON primary, JavaScript (Node.js ESM scripts), Python (validation scripts)",
4
+ "build_system": "npm scripts for validation/generation, no compile step - this is a content package",
5
+ "test_framework": "Python validation scripts (tests/validate-*.py), Node.js fuzz tests (fast-check), smoke tests",
6
+ "build_command": "npm run validate (17 validation gates)",
7
+ "test_command": "npm run validate && npm run test:fuzz",
8
+ "verification_instructions": "1. Run npm run validate to confirm all 17 gates pass. 2. For docs specifically: check that new .md files have valid frontmatter. 3. Verify _config.yml is valid YAML. 4. Verify Gemfile has correct gem declarations. 5. Verify workflow YAML is valid.",
9
+ "snapshot_or_generated_files": "catalog/asset-integrity.json - regenerate with: python3 tests/validate-asset-integrity.py --write",
10
+ "setup_instructions": "git clone, npm install (devDependencies for semantic-release/fast-check), python3 available for validation scripts",
11
+ "environment_constraints": "OPEN_INTERNET network mode - full access. Ruby 3.4.4 available via mise. Node.js 22 default. Python 3.11 default.",
12
+ "contribution_requirements": "Update catalog JSON when adding assets. Regenerate asset integrity after changes to root files. Do not add secrets. Keep README human-friendly.",
13
+ "key_patterns": "Default branch is master (not main). Existing docs/ directory has content - do NOT delete existing files. Least-privilege permissions in all workflows. Pin actions by SHA. Use ubuntu-latest runners. Comprehensive YAML comments in workflows.",
14
+ "relevant_files": [
15
+ "docs/",
16
+ ".github/workflows/ci.yml",
17
+ ".github/workflows/release.yml",
18
+ "package.json",
19
+ "CONTRIBUTING.md",
20
+ "SECURITY.md",
21
+ "AGENTS.md",
22
+ "README.md",
23
+ "docs/architecture/",
24
+ "docs/strategy/",
25
+ "catalog/agents.json",
26
+ "catalog/skills.json",
27
+ "schemas/"
28
+ ],
29
+ "directory_structure": "agents/ (426 agents in 34 provider dirs), skills/ (404 skills in 36 dirs), powers/ (Kiro Powers), catalog/ (machine-readable indexes), schemas/ (JSON Schema), mcp/ (MCP references), rules/ (harness rules), scripts/ (build/gen), tests/ (validation), templates/ (starter templates), docs/ (existing docs), .github/workflows/ (10 existing workflows)"
30
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "id": "FEAT-001",
3
+ "type": "chore",
4
+ "description": "Create Jekyll site infrastructure: _config.yml, Gemfile, root index.md, and GitHub Actions workflow for GitHub Pages deployment",
5
+ "status": "completed",
6
+ "steps": [
7
+ "Create _config.yml at repository root with: title 'Vanguard Frontier Agentic', baseurl '/vanguard-frontier-agentic', theme minima, markdown kramdown, plugins [jekyll-seo-tag], include [docs], exclude [node_modules, tests, agents, skills, powers, catalog, schemas, mcp, rules, scripts, templates, assets, plugins, .claude, .codex, .cursor-plugin, .claude-plugin, .agents, package.json, package-lock.json]. Add navigation with links to all documentation pages.",
8
+ "Create Gemfile at repository root with: source 'https://rubygems.org', gem 'jekyll' (~> 4.3), gem 'minima' (~> 2.5), group :jekyll_plugins with gem 'jekyll-seo-tag'",
9
+ "Create index.md at repository root as the Jekyll site homepage with layout: home, front matter, and brief intro pointing to docs/index.md for full documentation",
10
+ "Create .github/workflows/jekyll-gh-pages.yml with: trigger on push to master (path filters for docs/**, _config.yml, Gemfile, index.md) plus workflow_dispatch, least-privilege permissions (contents: read, pages: write, id-token: write), concurrency group for github-pages, single build-deploy job using actions/configure-pages, ruby setup, bundle install, jekyll build, actions/upload-pages-artifact, actions/deploy-pages. Pin all actions by SHA. Use github-pages environment with url output. Include comprehensive comments."
11
+ ],
12
+ "acceptance_criteria": [
13
+ "_config.yml exists at repo root and is valid YAML with correct baseurl '/vanguard-frontier-agentic'",
14
+ "Gemfile exists at repo root with jekyll and minima gems declared",
15
+ "index.md exists at repo root with Jekyll front matter (layout: home)",
16
+ ".github/workflows/jekyll-gh-pages.yml exists with correct trigger on master, path filters, least-privilege permissions, concurrency control, and official GitHub Pages actions",
17
+ "Workflow uses actions pinned by SHA with version comments",
18
+ "Workflow includes github-pages environment with url output"
19
+ ],
20
+ "verification": [
21
+ "Run: python3 -c \"import yaml; yaml.safe_load(open('_config.yml'))\" to confirm valid YAML",
22
+ "Run: cat Gemfile | grep jekyll to confirm gem declarations",
23
+ "Run: python3 -c \"import yaml; yaml.safe_load(open('.github/workflows/jekyll-gh-pages.yml'))\" to confirm valid workflow YAML",
24
+ "Inspect workflow for: on.push.branches containing master, permissions block, concurrency block, environment: github-pages"
25
+ ],
26
+ "blocked_reason": null,
27
+ "findings": "Pre-existing validation failures: validate:plugin-manifest fails due to stale plugin.json version (2.5.0 vs 2.6.0). This is unrelated to docs changes. Node.js requires MISE_NODE_VERIFY=false to install. Python 3.11+ needed for tomllib in validation scripts. The mise.toml was NOT committed as it was only needed for local env setup."
28
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "id": "FEAT-002",
3
+ "type": "docs",
4
+ "description": "Create the complete enterprise-grade documentation site content: 14 documentation pages plus 2 ADRs in docs/adr/",
5
+ "status": "completed",
6
+ "steps": [
7
+ "Create docs/index.md - Documentation site homepage with layout: default, title, navigation overview linking to all pages, catalog stats (404 skills, 426 agents, 32 providers), project summary, and quick links to key sections",
8
+ "Create docs/getting-started.md - Getting started guide covering: prerequisites (Node.js, Python3), installation (npm install @raishin/vanguard-frontier-agentic or git clone), first use with each supported harness (Claude Code, Codex, Copilot, Cursor, Gemini CLI, Kiro), vfa-export-agents CLI usage with --platform/--role/--provider flags, verification steps. Include 'What can go wrong' section.",
9
+ "Create docs/architecture.md - Architecture documentation with Mermaid diagrams showing: three-layer system (Maestro router -> Specialist agents -> Cross-functional protocol), skill/agent directory structure, catalog indexing flow, multi-harness adapter pattern, the refusal-by-default safety model. Reference actual files: catalog/index.json, schemas/*.schema.json, agents/<provider>/<id>/harnesses/. Include 'Enterprise reviewer notes' section.",
10
+ "Create docs/configuration.md - Configuration reference covering: package.json scripts (all npm run commands), catalog structure (agents.json, skills.json, install-roles.json), schema contracts (skill.schema.json, agent.schema.json), skill frontmatter fields, agent metadata.json fields, MCP reference structure, CLAUDE.md/AGENTS.md steering files. All backed by actual file references.",
11
+ "Create docs/deployment.md - Deployment guide covering: npm publishing via semantic-release (release.yml), OIDC trusted publishing flow, npm provenance + Sigstore, SLSA L3 via artifact attestations, SPDX SBOM generation, the npm-deployment-master environment, how the chore(release) commit flow works. Include Mermaid sequence diagram of release flow.",
12
+ "Create docs/github-pages.md - GitHub Pages setup guide explaining: the jekyll-gh-pages.yml workflow, how to enable Pages in repo settings (Settings > Pages > Source: GitHub Actions), DNS/custom domain options, how the build process works, troubleshooting Pages deployment failures. Include 'How to verify this works' section.",
13
+ "Create docs/security.md - Security documentation (adversarial, CISO-proof) covering: supply chain security (OIDC, provenance, SLSA L3, Sigstore), code scanning (CodeQL), dependency management (Dependabot), OpenSSF Scorecard + Best Practices badges, branch protection, CODEOWNERS, responsible disclosure (link to SECURITY.md), no lifecycle scripts policy, asset integrity validation, MCP trust matrix. Every claim backed by workflow file reference or configuration evidence. Include 'What an attacker would try' section.",
14
+ "Create docs/testing.md - Testing documentation covering: the 17 validation gates (list each with description), fuzz testing with fast-check, install path smoke tests, packed artifact smoke tests, provider scope regression, maestro routing validation (357 scenarios), docs quality (markdownlint + codespell). Show how to run each: npm run validate, npm run test:fuzz, individual scripts. Include 'How to add a new validation gate' section.",
15
+ "Create docs/operations-runbook.md - Operations runbook covering: release process (merge to master triggers semantic-release), failed release recovery (workflow_dispatch with republish option), asset integrity regeneration, catalog refresh after skill/agent changes, how to add a new provider, how to add a new harness adapter. Include decision trees and checklists.",
16
+ "Create docs/troubleshooting.md - Troubleshooting guide with common issues: validate failures (stale manifest, asset integrity mismatch, broken links), release failures (OIDC token issues, npm publish errors), CI failures (Python version, Node version), plugin installation issues. Format as problem/cause/fix tables.",
17
+ "Create docs/contributing.md - Contributing guide that links to the main CONTRIBUTING.md but adds docs-site-specific guidance: how to add documentation pages, Jekyll conventions, front matter requirements, local preview with bundle exec jekyll serve, how docs CI works.",
18
+ "Create docs/governance.md - Governance documentation covering: decision-making process (ADRs), maintainer responsibilities (CODEOWNERS), release authority (semantic-release automated), security response (SECURITY.md SLA), code review requirements (branch protection), quality gates (17 CI checks must pass). Reference actual governance files.",
19
+ "Create docs/roadmap.md - Roadmap page with: current version (2.6.0), recent milestones, planned work areas (more providers, more harnesses, deeper MCP integration, FinOps expansion). Mark speculative items with [NEEDS OWNER INPUT]. Include 'How to propose a new direction' section.",
20
+ "Create docs/faq.md - FAQ covering: What is this? (not just cloud tooling - agentic coordination), How is it different from X? (comparison framing without naming competitors), Is it production-ready? (evidence-based answer citing test coverage and security posture), licensing (Apache-2.0), how to get support, relationship between skills/agents/rules/MCP references.",
21
+ "Create docs/adr/ directory and docs/adr/0001-initial-architecture.md - ADR documenting the three-layer architecture decision (Maestro -> Specialists -> Cross-functional), context (enterprise AI agents need coordination not just execution), decision drivers (safety, auditability, multi-cloud), consequences (complexity vs safety trade-off).",
22
+ "Create docs/adr/0002-documentation-site-with-jekyll-github-pages.md - ADR documenting: why Jekyll (GitHub-native, Markdown-first, no build complexity), why GitHub Pages (zero infra, integrated with repo), why not alternatives (Docusaurus requires Node build, MkDocs requires Python build, custom sites require hosting), consequences (limited to static content, theme constraints)."
23
+ ],
24
+ "acceptance_criteria": [
25
+ "All 14 documentation files exist in docs/ with valid Jekyll front matter (layout, title, optional permalink)",
26
+ "Both ADR files exist in docs/adr/ with proper ADR format (Status, Context, Decision, Consequences)",
27
+ "docs/architecture.md contains at least 2 Mermaid diagrams",
28
+ "docs/security.md references actual workflow files and configuration as evidence",
29
+ "docs/testing.md lists all 17 validation gates with their npm script names",
30
+ "Every page has Enterprise reviewer notes or How to verify sections where appropriate",
31
+ "No marketing fluff - every claim backed by evidence or marked [NEEDS OWNER INPUT]",
32
+ "Writing style is direct, technical, uses short sections and checklists",
33
+ "Pages reference actual file paths in the repository (not generic placeholders)"
34
+ ],
35
+ "verification": [
36
+ "Run: for f in docs/index.md docs/getting-started.md docs/architecture.md docs/configuration.md docs/deployment.md docs/github-pages.md docs/security.md docs/testing.md docs/operations-runbook.md docs/troubleshooting.md docs/contributing.md docs/governance.md docs/roadmap.md docs/faq.md docs/adr/0001-initial-architecture.md docs/adr/0002-documentation-site-with-jekyll-github-pages.md; do test -f \"$f\" && echo \"OK: $f\" || echo \"MISSING: $f\"; done",
37
+ "Run: grep -l 'layout:' docs/*.md docs/adr/*.md | wc -l - should be 16",
38
+ "Run: grep -c 'mermaid' docs/architecture.md - should be >= 2",
39
+ "Run: grep -c 'NEEDS OWNER INPUT' docs/roadmap.md - should be >= 1 (marking speculative items)",
40
+ "Run: grep 'validate:' docs/testing.md | wc -l - should reference the 17 validation gates"
41
+ ],
42
+ "blocked_reason": null,
43
+ "findings": "All 16 files created successfully. Each file has valid Jekyll front matter (layout: default, title set). All files are 80+ lines of substantive content. architecture.md has 2 Mermaid diagrams. roadmap.md has 14 NEEDS OWNER INPUT markers. testing.md references 24 validate: script names. docs/adr/ directory created for ADRs. No existing files were modified. Pre-existing docs/ files lack front matter but those are untouched."
44
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "task_id": "task-jekyll-docs-site",
3
+ "task_description": "Build complete enterprise-grade documentation system using Jekyll, GitHub Pages, and GitHub Actions. Create 20 files total: _config.yml, Gemfile, Gemfile.lock, index.md (root), 14 docs pages, 2 ADRs, and .github/workflows/jekyll-gh-pages.yml workflow.",
4
+ "status": "completed",
5
+ "feature_order": ["FEAT-001", "FEAT-002"],
6
+ "blocked_reason": null,
7
+ "verification": {
8
+ "build": "pass",
9
+ "tests": "pass",
10
+ "test_quality": "pass",
11
+ "docker_build": "skipped",
12
+ "summary": "All 20+ files created. _config.yml and workflow YAML validated programmatically. Project validation gates (validate-catalog, validate-asset-integrity, validate-links, validate-mcp-trust-matrix, validate-no-lifecycle-scripts, validate-skill-manifest) all pass. Semantic review identified 6 issues - all fixed in subsequent commit. Gemfile.lock generated for deterministic builds."
13
+ }
14
+ }
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Curated marketplace for cloud and zero-trust AI workflows. Skills, agents, rules, MCP references, and compliance-aware architecture across AWS, Azure, OCI, GCP, Alibaba Cloud, Huawei Cloud, Kubernetes, and Terraform.",
9
- "version": "2.5.0"
9
+ "version": "2.7.0"
10
10
  },
11
11
  "plugins": [
12
12
  {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vanguard-frontier-agentic",
3
- "version": "2.4.4",
3
+ "version": "2.6.0",
4
4
  "description": "Cloud and zero-trust agentic workflow marketplace for skills, agents, rules, MCP references, and compliance-aware architecture.",
5
5
  "author": {
6
6
  "name": "Raishin",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vanguard-frontier-agentic",
3
- "version": "2.4.4",
3
+ "version": "2.6.0",
4
4
  "description": "Cloud and zero-trust agentic workflow marketplace for skills, agents, rules, MCP references, and compliance-aware architecture.",
5
5
  "author": {
6
6
  "name": "Raishin",
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://raw.githubusercontent.com/github/copilot-cli/main/schemas/marketplace.schema.json",
3
3
  "name": "vanguard-frontier-agentic",
4
4
  "description": "Curated marketplace for cloud and zero-trust AI workflows. 331 agents, 286 skills, and rules across AWS, Azure, OCI, GCP, Alibaba Cloud, Huawei Cloud, Kubernetes, and Terraform.",
5
- "version": "2.5.0",
5
+ "version": "2.7.0",
6
6
  "owner": {
7
7
  "name": "Raishin",
8
8
  "url": "https://github.com/Raishin"
package/README.md CHANGED
@@ -15,6 +15,8 @@
15
15
  <a href="https://github.com/Raishin/vanguard-frontier-agentic/actions/workflows/codeql.yml"><img alt="CodeQL" src="https://github.com/Raishin/vanguard-frontier-agentic/actions/workflows/codeql.yml/badge.svg?branch=master" /></a>
16
16
  <a href="https://github.com/Raishin/vanguard-frontier-agentic/actions/workflows/install-paths-smoke.yml"><img alt="Install Paths Smoke" src="https://github.com/Raishin/vanguard-frontier-agentic/actions/workflows/install-paths-smoke.yml/badge.svg?branch=master" /></a>
17
17
  <a href="https://scorecard.dev/viewer/?uri=github.com/Raishin/vanguard-frontier-agentic"><img alt="OpenSSF Scorecard" src="https://api.securityscorecards.dev/projects/github.com/Raishin/vanguard-frontier-agentic/badge" /></a>
18
+ <a href="https://www.bestpractices.dev/projects/12964"><img alt="OpenSSF Best Practices" src="https://www.bestpractices.dev/projects/12964/badge" /></a>
19
+ <a href="https://www.bestpractices.dev/projects/12964"><img alt="OpenSSF Baseline" src="https://www.bestpractices.dev/projects/12964/baseline" /></a>
18
20
  <a href="https://github.com/Raishin/vanguard-frontier-agentic/actions/workflows/docs-quality.yml"><img alt="Docs Quality" src="https://github.com/Raishin/vanguard-frontier-agentic/actions/workflows/docs-quality.yml/badge.svg?branch=master" /></a>
19
21
  <a href="https://docs.npmjs.com/generating-provenance-statements"><img alt="npm provenance" src="https://img.shields.io/badge/npm-provenance-26a566.svg?logo=npm" /></a>
20
22
  <a href="CONTRIBUTING.md"><img alt="PRs welcome" src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" /></a>