Skip to content

refactor(agents)!: consolidate supply-chain reviewers and align data-science-engineering vocabulary - #2720

Open
Bill Berry (WilliamBerryiii) wants to merge 21 commits into
mainfrom
refactor/agent-catalog-consolidation
Open

refactor(agents)!: consolidate supply-chain reviewers and align data-science-engineering vocabulary#2720
Bill Berry (WilliamBerryiii) wants to merge 21 commits into
mainfrom
refactor/agent-catalog-consolidation

Conversation

@WilliamBerryiii

@WilliamBerryiii Bill Berry (WilliamBerryiii) commented Aug 14, 2026

Copy link
Copy Markdown
Member

Summary

Consolidates an overlapping corner of the agent catalog and aligns the data-science package vocabulary. Three related changes travel together; they share no files and are separable by commit.

  1. Retire the duplicate supply-chain reviewer. Supply Chain Reviewer and SSSC Reviewer both assessed the single supply-chain-security skill across the same audit, diff, and plan modes. SSSC Reviewer is the load-bearing one — two prompts, the vex-draft workflow, an instructions applyTo glob, the vex skill, a vex-detect user message, the documented security model, and a PowerShell eval fixture all bind to it. Supply Chain Reviewer had none of those bindings.
  2. Align the data-science vocabulary. Package becomes data-science-engineering, the coach becomes the Data Science and Engineering Coach, and five skills drop the ds- prefix.
  3. Promote privacy, Responsible AI, and telemetry to cross-cutting concerns in the coach.

Dependency Reviewer was evaluated and deliberately left standalone.

Why the duplicate wasn't just deleted

Supply Chain Reviewer was the only agent that actually dispatched the assessment pipeline. SSSC Reviewer declared four subagents in frontmatter but assessed inline and never called them. A plain delete would have discarded adversarial verification of FAIL/PARTIAL findings and orphaned supply-chain-skill-assessor.agent.md, whose sole dispatcher was the file being removed.

So the pipeline was ported first (Codebase ProfilerSupply Chain Skill AssessorFinding Deep Verifier), then the duplicate was removed. Report Generator was deliberately excluded: its report roots are hard-coded to .copilot-tracking/security, so adopting it would have reintroduced the exact report-root collision this consolidation removes. SSSC Reviewer continues authoring its own nine-section report into .copilot-tracking/sssc-reviews/.

Things reviewers should know

  • Supply Chain Reviewer shared Security Reviewer's report namespace — identical directory, filename pattern, and sequence counter. Its removal resolves that collision as a side effect.
  • The cross-cutting change is a defect fix, not a feature. marketplace.json already shipped privacy-standards, rai-standards, rai-planner, and telemetry-foundations in this package, and the job registry already named three of them. But the coach's stop rules said to "stop rather than cross a seven-skill boundary" — contradicting the registry it is told to load. rai-standards was routed nowhere at all.
  • project-planning shipped SSSC Reviewer without the subagents it now dispatches. Marketplace closure keys on handoffs, not the agents list, so plugin:validate would not have caught this. The package now carries the three subagents plus security-reviewer-formats.
  • The published package identity changed. Already-installed users will see data-science-engineering / HVE Core - Data Science and Engineering.

Deliberately preserved

Identifier Why
DS_CATALOG_V1, its schema $id, and its schema/template filenames Cross-package document contract; hve-core/architecture-diagrams reads it, and users may have authored catalogs with it
Feasibility interchange schema identifier Same reasoning
data-workstream-session-v1 state schema version Durable identifier inside live user session files
.copilot-tracking/ds/ session root Pairs with the existing .copilot-tracking/dt/ convention; renaming would silently orphan in-flight user sessions

Rename history

Every rename is a committed git mv separate from its content rewrite. Because this repo squashes PRs, branch commits do not reach main and only final-tree similarity determines rename detection — so verification is a merge-base check rather than a branch-only git log --follow:

git diff -M --find-renames --summary $(git merge-base HEAD origin/main)...HEAD
# 76 renames detected

Validation

Lane Result
lint:plugin-output, lint:tables, lint:md, lint:ps, lint:yaml, lint:json Pass
lint:frontmatter (897 files) Pass, 0 errors / 0 warnings
plugin:validate (10 plugins) Pass
lint:hooks, lint:version-consistency (627 pinned actions) Pass
lint:py (16 skills), validate:skills (72 skills) Pass
lint:ai-artifacts, lint:models Pass
lint:asset-docs Pass, 0 errors (215 pre-existing repo-wide stub warnings)
docs:generate:check (235 pages) Zero drift
lint:links, lint:md-links Not run locally; long-running link checks left to CI

Two issues surfaced during validation and were fixed: an initial package version bump to 4.0.0 was rejected because package versions are lockstep with root package.json, and table formatting drifted across ten files (format:tables applied).

Generated output

docs/reference/ was regenerated with docs:generate; the docs/plugins/ marker region belongs to a different generator (plugin:generate) and was refreshed with an external staging root. The generator preserved eight renamed reference pages as orphans because they carried authored tails — those tails were carried forward before the orphans were removed, so no hand-written "When to use it" content was lost.

Review notes

  • The three changes are separable by commit if you prefer to review them independently.
  • An independent hve-builder review gate ran against the coach rewrite and returned Revise; all six findings were applied, including one real inconsistency where the RAI trigger differed between the agent and the registry.

Related issues

Closes #2733. SSSC Reviewer diff mode now resolves its changed-files list from a defined producer, including a degraded path that stays in diff mode when pr-reference cannot be activated, the reviewer documentation matches that contract, and an isolated diff-mode stimulus locks the behavior.

🤖 Crafted with precision by ✨Copilot following brilliant human instruction, then carefully refined by our team of discerning human reviewers.

…viewer

Port the Codebase Profiler, Supply Chain Skill Assessor, and Finding Deep Verifier stages from the duplicate Supply Chain Reviewer so its removal costs no capability. Reconcile the frontmatter agents list with what the body dispatches, and define the status and verdict translation into the nine-section SSSC report contract. Report Generator is excluded; SSSC Reviewer keeps authoring its own report.
SSSC Reviewer now owns supply-chain posture review after P01 ported its assessment and verification pipeline. Remove the duplicate agent, drop it from the security and hve-core-all packages, repoint the code-review supply-chain fork to sssc-reviewer, and clear its eval registry entries. Reconcile the project-planning package, which shipped SSSC Reviewer without the subagents it now dispatches. Also requalify two stale references to the removed agent.
Pure git mv with no content changes so renames stay detectable and reviewable. Package becomes data-science-engineering, the coach agent file and its slug-derived eval files take the new stem, five skills drop the ds- prefix, and the foundation skill is renamed. DS_CATALOG_V1, the feasibility interchange identifier, and the .copilot-tracking/ds/ session root are deliberately unchanged. References are rewritten in the next commit.
…g rename

Update marketplace identity and component paths, instruction applyTo globs, skill names and prose, Python package names, cross-package references, eval registries, hand-written docs, and repository configuration to the new package, skill, and agent names. Rename the coaching disclaimer heading to Data Science and Engineering Coaching. Rewrite the moved security docs page as an accurate SSSC Reviewer page with the three-stage pipeline. DS_CATALOG_V1, its schema id and filenames, the feasibility interchange identifier, the session schema_version, and the .copilot-tracking/ds/ root are unchanged.
…ncerns

The package shipped privacy-standards, rai-standards, rai-planner, and telemetry-foundations while the coach listed only the seven data-science skills and its stop rules forbade crossing that boundary, contradicting the registry it loads. rai-standards was routed nowhere. Define the three concerns by trigger in the job registry, make the registry their single source of truth, replace the count-based stop rule with an authority-based one, and refresh the coach eval expectations. Concerns surface and offer choices; the durable-write scan gate remains the only blocking gate.
@WilliamBerryiii
Bill Berry (WilliamBerryiii) requested a review from a team as a code owner August 14, 2026 23:29
…g-consolidation

# Conflicts:
#	docs/plugins/project-planning.md
#	docs/reference/README.md
#	docs/reference/agents/README.md
#	docs/reference/agents/security/supply-chain-reviewer.md
#	docs/reference/prompts/README.md
#	docs/reference/prompts/data-science-engineering/synth-data-generate.md
#	docs/reference/skills/README.md
@github-actions

github-actions Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

OpenSSF Scorecard

Scorecard details
PackageVersionScoreDetails
pip/atheris 3.1.0 🟢 6.1
Details
CheckScoreReason
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Packaging⚠️ -1packaging workflow not detected
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
Code-Review🟢 7Found 23/30 approved changesets -- score normalized to 7
Maintained⚠️ 23 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2
SAST⚠️ 0no SAST tool detected
Binary-Artifacts🟢 10no binaries found in the repo
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing🟢 10project is fuzzed
Signed-Releases⚠️ -1no releases found
License🟢 10license file detected
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
Security-Policy🟢 10security policy file detected
pip/attrs 26.1.0 UnknownUnknown
pip/colorama 0.4.6 UnknownUnknown
pip/coverage 7.15.3 UnknownUnknown
pip/iniconfig 2.3.0 UnknownUnknown
pip/jsonschema 4.26.0 UnknownUnknown
pip/jsonschema-specifications 2025.9.1 UnknownUnknown
pip/packaging 26.2 UnknownUnknown
pip/pluggy 1.6.0 UnknownUnknown
pip/pygments 2.20.0 UnknownUnknown
pip/pytest 9.1.1 UnknownUnknown
pip/pytest-cov 7.1.0 UnknownUnknown
pip/pyyaml 6.0.3 UnknownUnknown
pip/referencing 0.37.0 UnknownUnknown
pip/rpds-py 2026.6.3 UnknownUnknown
pip/ruff 0.16.1 UnknownUnknown
pip/tomli 2.4.1 UnknownUnknown
pip/typing-extensions 4.16.0 UnknownUnknown
pip/atheris 3.1.0 🟢 6.1
Details
CheckScoreReason
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Packaging⚠️ -1packaging workflow not detected
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
Code-Review🟢 7Found 23/30 approved changesets -- score normalized to 7
Maintained⚠️ 23 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2
SAST⚠️ 0no SAST tool detected
Binary-Artifacts🟢 10no binaries found in the repo
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing🟢 10project is fuzzed
Signed-Releases⚠️ -1no releases found
License🟢 10license file detected
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
Security-Policy🟢 10security policy file detected
pip/attrs 26.1.0 UnknownUnknown
pip/colorama 0.4.6 UnknownUnknown
pip/coverage 7.15.3 UnknownUnknown
pip/iniconfig 2.3.0 UnknownUnknown
pip/jsonschema 4.26.0 UnknownUnknown
pip/jsonschema-specifications 2025.9.1 UnknownUnknown
pip/packaging 26.2 UnknownUnknown
pip/pluggy 1.6.0 UnknownUnknown
pip/pygments 2.20.0 UnknownUnknown
pip/pytest 9.1.1 UnknownUnknown
pip/pytest-cov 7.1.0 UnknownUnknown
pip/pyyaml 6.0.3 UnknownUnknown
pip/referencing 0.37.0 UnknownUnknown
pip/rpds-py 2026.6.3 UnknownUnknown
pip/ruff 0.16.1 UnknownUnknown
pip/tomli 2.4.1 UnknownUnknown
pip/typing-extensions 4.16.0 UnknownUnknown
npm/express-rate-limit 8.6.2 UnknownUnknown
npm/ip-address 10.5.0 🟢 6.9
Details
CheckScoreReason
Code-Review⚠️ 0Found 0/30 approved changesets -- score normalized to 0
Security-Policy🟢 10security policy file detected
Maintained🟢 1026 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
Token-Permissions🟢 9detected GitHub workflow tokens with excessive permissions
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
Pinned-Dependencies🟢 8dependency not pinned by hash detected -- score normalized to 8
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
License🟢 10license file detected
Fuzzing⚠️ 0project is not fuzzed
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Signed-Releases⚠️ -1no releases found
Packaging🟢 10packaging workflow detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
npm/express-rate-limit 8.6.2 UnknownUnknown
npm/ip-address 10.5.0 🟢 6.9
Details
CheckScoreReason
Code-Review⚠️ 0Found 0/30 approved changesets -- score normalized to 0
Security-Policy🟢 10security policy file detected
Maintained🟢 1026 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
Token-Permissions🟢 9detected GitHub workflow tokens with excessive permissions
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
Pinned-Dependencies🟢 8dependency not pinned by hash detected -- score normalized to 8
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
License🟢 10license file detected
Fuzzing⚠️ 0project is not fuzzed
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Signed-Releases⚠️ -1no releases found
Packaging🟢 10packaging workflow detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0

Scanned Files

  • .github/skills/data-science-engineering/data-catalog/uv.lock
  • .github/skills/data-science-engineering/feasibility/uv.lock
  • .github/skills/data-science/ds-catalog/pyproject.toml
  • .github/skills/data-science/ds-catalog/uv.lock
  • .github/skills/data-science/ds-feasibility/uv.lock
  • docs/docusaurus/package-lock.json

@codecov-commenter

Codecov Comments Bot (codecov-commenter) commented Aug 15, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 84.60%. Comparing base (6f22d31) to head (1048d00).
⚠️ Report is 5 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #2720      +/-   ##
==========================================
+ Coverage   83.17%   84.60%   +1.43%     
==========================================
  Files         180       95      -85     
  Lines       32201    10763   -21438     
  Branches       25       25              
==========================================
- Hits        26782     9106   -17676     
+ Misses       5416     1654    -3762     
  Partials        3        3              
Flag Coverage Δ
docusaurus 89.92% <ø> (ø)
pester 83.49% <100.00%> (-0.72%) ⬇️
pytest 96.11% <ø> (+13.40%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
...gineering/data-catalog/scripts/validate_catalog.py 98.64% <ø> (ø)
...eering/feasibility/scripts/validate_feasibility.py 93.31% <ø> (ø)
scripts/linting/Validate-PlannerArtifacts.ps1 87.86% <100.00%> (+1.29%) ⬆️

... and 92 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

github-actions Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

Eval Execution

Status: Passed — no merge-blocking failures (105 advisory assertion failure(s) present)

  • Artifacts evaluated: 19
  • Specs run: 19
  • Assertions passed: 53
  • Assertions failed (blocking): 0
  • Assertions failed (advisory): 105
  • Failed specs (merge-blocking): 0
Artifact Kind Status Specs Passed Failed (blocking) Failed (advisory)
code-review-security agent ✅ pass 1 5 0 0
data-science-engineering-coach agent ⚠️ advisory-fail 1 0 0 60
sssc-reviewer agent ✅ pass 1 10 0 0
report-generator agent ⚠️ advisory-fail 1 0 0 10
experiment-designer agent ⚠️ advisory-fail 1 7 0 3
disclaimer-language instruction ❌ fail 1 0 0 0
untrusted-content-boundary instruction ❌ fail 1 0 0 0
uv-projects instruction ❌ fail 1 0 0 0
synth-data-generate prompt ✅ pass 1 3 0 0
analysis-authoring skill ⚠️ advisory-fail 1 0 0 3
data-catalog skill ⚠️ advisory-fail 1 0 0 3
data-science-engineering-foundation skill ⚠️ advisory-fail 1 1 0 2
dataops skill ⚠️ advisory-fail 1 6 0 6
evaluation-design skill ⚠️ advisory-fail 1 1 0 2
feasibility skill ⚠️ advisory-fail 1 3 0 3
ml-experimentation skill ⚠️ advisory-fail 1 0 0 3
copilot-otel-metrics skill ⚠️ advisory-fail 1 6 0 3
architecture-diagrams skill ✅ pass 1 3 0 0
experiment-design skill ⚠️ advisory-fail 1 8 0 7

Legend — ✅ clean · ⚠️ advisory failures only (non-blocking) · ⏭️ skipped · ❌ merge-blocking failure

Only Failed specs (merge-blocking) gates this PR. Advisory assertion failures are signal-quality checks captured during iteration; review them, but they do not block merge and may be acceptable.

…package

Two test fixtures referenced the old package name and were missed by the reference sweep. The architecture-diagrams catalog fixture path splits the package segment across its own line, so the path rewrite did not reach it. The marketplace closure test matched the package by its old name.
…ailable

Porting the assessment pipeline made subagent dispatch mandatory, including a hard stop when no skill remained. A reviewer installed without its subagents produced no findings at all, which is worse than the prior inline behavior and matches the packaging risk raised as PC-010. Each ported stage now degrades to direct assessment and records the reduced rigor in Limitations, so a report with findings and severities is always produced.

@jkim323 Jamie Kim (jkim323) left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Left a couple things for you to look at. Happy to review back - thanks for working on this consolidation effort!

Comment thread .github/plugin/marketplace.json
Comment thread .github/agents/security/sssc-reviewer.agent.md Outdated
Comment thread .github/agents/security/sssc-reviewer.agent.md Outdated
Comment thread .github/skills/hve-core/architecture-diagrams/SKILL.md
Comment thread .github/instructions/shared/disclaimer-language.instructions.md
…g-consolidation

# Conflicts:
#	.github/plugin/marketplace.json
#	docs/plugins/experimental.md
#	docs/plugins/hve-core-all.md
#	docs/plugins/security.md
#	docs/reference/README.md
#	docs/reference/agents/README.md
#	docs/reference/agents/data-science-engineering/data-science-engineering-coach.md
#	docs/reference/agents/security/supply-chain-reviewer.md
#	docs/reference/instructions/shared/untrusted-content-boundary.md
#	docs/reference/prompts/README.md
#	docs/reference/prompts/data-science-engineering/synth-data-generate.md
#	docs/reference/skills/README.md
#	docs/reference/skills/data-science-engineering/analysis-authoring.md
#	docs/reference/skills/data-science-engineering/data-catalog.md
#	docs/reference/skills/data-science-engineering/data-science-engineering-foundation.md
#	docs/reference/skills/data-science-engineering/dataops.md
#	docs/reference/skills/data-science-engineering/evaluation-design.md
#	docs/reference/skills/data-science-engineering/feasibility.md
#	docs/reference/skills/data-science-engineering/ml-experimentation.md
#	scripts/tests/lib/MarketplaceClosure.Tests.ps1
…ter merge

Main's single-plugin consolidation retired the per-package plugin documentation pages and the marketplace test suite. Both survived the merge as modify/delete conflicts resolved toward this branch, breaking frontmatter schema validation and the PowerShell test lane.
Comment thread .github/agents/security/sssc-reviewer.agent.md Outdated
Comment thread .github/agents/security/sssc-reviewer.agent.md Outdated
Comment thread .github/agents/security/sssc-reviewer.agent.md Outdated
Comment thread .github/agents/security/sssc-reviewer.agent.md
Comment thread evals/agent-behavior/README.md Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Went through this one in depth — agents, skills, docs, evals, and the generated surfaces — and ran the local validation lanes against the branch.

Approving. Both consolidations are architecturally right. Folding the supply-chain pipeline into SSSC Reviewer removes a genuinely duplicated orchestrator and keeps report authorship local instead of routing through Report Generator's incompatible template. Hoisting privacy, RAI, and telemetry into trigger-based cross-cutting concerns is a better model than the per-job table it replaces. Nothing below asks you to rethink either one — they are absorption-hygiene and rename-sweep gaps, all local text edits. Approving rather than blocking because you reliably close findings before merging.

I left seven inline comments — one High, five Medium, one Low.

Nice piece of work — the git mv-separate-from-rewrite discipline is what made 112 files reviewable.

Reviewed with AI assistance; every finding was independently verified against the diff and the referenced files before filing. Treat it as input to human review, not a substitute for it.

- complete SSSC Reviewer retry protocol and status/verdict translation
- emit the canonical SSSC Planning disclaimer verbatim
- drop coach copies of job-registry cross-cutting rules
- correct agent-behavior counts to 56 agents, 30 parents, 26 subagents
- fix last stale ds-catalog reference

🔧 - Generated by Copilot
@github-actions github-actions Bot mentioned this pull request Aug 22, 2026
- add degraded merge-base fallback when pr-reference is unavailable
- reconcile reviewer guide inputs, prerequisites, and quick start
- add isolated diff-mode regression stimulus and regenerate eval spec

🔒 - Generated by Copilot
The SSSC agent-behavior lane failed intermittently because its graders asserted output the evaluation sandbox cannot produce. The class-recipe stimulus rewarded invented findings and penalized honest reports that evidence was unavailable, and the diff stimulus required a claim of direct repository comparison that a sandbox without a repository cannot support.

Graders are now derived from measured responses across repeated local runs. The class-recipe stimulus checks the report path, supply-chain framework scope, a completion statement, self-consistency, and absence of source edits. The diff stimulus accepts an honest changed-file resolution basis and a collective file-retention statement.

Several patterns used a negated-period bound to span context, which cannot cross a sentence boundary and silently failed on correct output. Those bounds are corrected, and the no-source-edit guard is aligned with the reviewed RV-001 fix so a .json path no longer matches the .js alternative.

Validated by re-grading frozen transcripts offline and by five independent local runs: mean 97.3 percent, minimum 93.3 percent, no errored trials. A seventeen-case adversarial matrix confirms each regression still fails its designated grader.
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.

fix(agents): SSSC Reviewer diff mode consumes a changed-files list no workflow step produces

4 participants