Skip to content

Keep only formatting skills and verify skill value independently - #985

Merged
sbroenne merged 2 commits into
mainfrom
sbroenne-skill-test-value
Oct 2, 2026
Merged

sbroenne merged 2 commits into
mainfrom
sbroenne-skill-test-value

Conversation

@sbroenne

@sbroenne sbroenne commented Oct 2, 2026 •

Copy link
Copy Markdown
Owner

Summary

Keep only two optional report-formatting skills, move general Excel guidance into documentation while preserving website addresses, and adopt pytest-skill-engineering 1.0.3 with independently verified skill-value comparisons.

The completed broad-skill comparison found equal correctness across 48 unique cases, with all 24 treatment cases successfully reading skills, but 23.4% more recorded MCP tokens and 72.4% more CLI tokens. The new narrow formatting skills remain unproven; no new paid calls were made during delivery.

Type of Change

  • 🐛 Bug fix (non-breaking change which fixes an issue)
  • ✨ New feature (non-breaking change which adds functionality)
  • 💥 Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • 📚 Documentation update
  • 🔧 Maintenance (dependency updates, code cleanup, etc.)

Related Issues

Closes: N/A; user-directed work.
Relates to sbroenne/pytest-skill-engineering#114, the separate upstream case study and reproducible example. It is not merged by this request.

Changeset

  • Added a changeset (npx changeset) describing this change for end users — see .changeset/README.md
  • Not applicable (docs/tests/CI/dependency-only) — added skip-changelog label instead

Changes Made

  • Replace broad skill templates with excel-cli-report-formatting and excel-mcp-report-formatting. Each short entry ships with one selected formatting reference; general workflows and recovery guides live in docs/reference and docs/guides.
  • Update skill preparation, plugin/release packaging, publication comparisons, extension packaging, installation guidance, and website maps/navigation. Preserve plugin identities, existing website addresses and reference-index anchors; document standalone-skill migration and retain immutable historical-release comparison support.
  • Remove obsolete template build tasks and dependencies. No Core command method or CLI/MCP tool/action/parameter contract changes; the advertised surface remains 31 tools and 326 operations.
  • Remove 24 weak live-test files and obsolete retry/judge/report machinery. Add paired comparisons, no-send discovery, explicit paid-attempt accounting, durable interruption evidence, and independent saved-workbook checks. Publish only sanitized historical evidence; native traces and benchmark workbooks remain private.
  • Add an unrun 24-case narrow-formatting comparison and checker regressions, including rejection of a misleading literal percentage. Keep skill availability/reading, workbook correctness and nullable usage separate.
  • Rebase onto current main, preserve its AGENTS.md/shared-rule migration, update moved guidance links, and resolve the lock conflict without retaining an orphan dependency.
  • Address all three review findings in 32fa7fc: reuse the tracked peer workbook, count only successful skill reads, and require identical verified task/repetition sets before publishing token percentages. Add explicit exclusion reasons and failing-before/passing-after regressions. Regenerated historical measurements remain unchanged.

Testing Performed

  • If Core/ComInterop/Service/CLI/MCP runtime paths or their generators changed: ran & .\scripts\Test-E2E.ps1 locally and confirmed it completed with no failures or unresolved issues
  • Excel E2E not applicable because only documentation/configuration/Excel-free tooling changed
  • Ran the relevant feature-specific integration tests and recorded the exact command and result below
  • Tested manually with various Excel files
  • Verified cleanup of this test's owned Excel sessions without terminating unrelated Excel processes (if applicable)
  • Tested error conditions (missing files, invalid arguments, etc.)
  • All existing commands still work
  • VBA script execution tested (if applicable)
  • XLSM file format validation tested (if applicable)
  • VBA trust setup tested (if applicable)
  • Build produces zero warnings

Test Commands

# Record each exact command and its result (passed, failed, or not run with reason).
# Configuration/docs-only work: record the relevant checks; Excel tests are not required.
dotnet restore Sbroenne.ExcelMcp.sln
# Passed.
dotnet build Sbroenne.ExcelMcp.sln -c Release --no-restore
# Passed: zero warnings and errors. Normal review-fix commit hooks rebuilt successfully too.
& .\scripts\check-com-leaks.ps1
& .\scripts\check-success-flag.ps1
& .\scripts\check-dynamic-casts.ps1
& .\scripts\check-workbook-package-access.ps1
& .\scripts\check-doc-counts.ps1 -SkipBuild
# All passed.
& .\scripts\Invoke-ExcelFreeTests.ps1 -Local -Contracts
# Passed: 57 Core, 53 CLI, 9 MCP contract tests; also passed in review-fix commit hooks.
& .\scripts\Test-E2E.ps1 -SkipBuild
# Passed sequentially with desktop Excel: 16 CLI checks, graceful-save acceptance,
# and the MCP all-tools workflow. Normal commit hooks reran these successfully
# for both the initial changes and the review-fix commit.
uv lock --project llm-tests --check --offline
# Passed after rebase: 55 packages resolved; lock matches the manifest.
uv run --project llm-tests --frozen pytest llm-tests\test_aggregate_skill_value.py llm-tests\test_eval_harness.py llm-tests\test_skill_value.py llm-tests\test_skill_value_checks.py llm-tests\test_skill_value_preparation.py llm-tests\test_skill_discovery.py llm-tests\test_spreadsheetbench.py llm-tests\test_cli_mcp_server.py llm-tests\test_cli_result_assertions.py llm-tests\test_consent_scenarios.py -q
# Passed after rebase, before review fixes: 88 passed, 24 gated paid cases skipped,
# 73 subtests passed; no model sends.
uv run --project llm-tests --frozen pytest llm-tests\test_aggregate_skill_value.py llm-tests\test_owned_workbook_cleanup.py -q
# Passed after review fixes: 12 tests and 3 subtests, including live Excel cleanup
# and unique-wrapper tracking. Relevant regressions failed before the fixes.
uv run --project llm-tests --frozen python llm-tests\aggregate_skill_value.py llm-tests\TestResults\skill-value-real-world-1.0.3-20261001-2202 llm-tests\TestResults\skill-value-real-world-1.0.3-20261002-resume llm-tests\TestResults\skill-value-real-world-1.0.3-20261002-journaled --output llm-tests\evidence\real-world-1.0.3.json
# Passed: only exclusion metadata and scope wording changed; all published
# historical cases, successful reads and token measurements remain unchanged.

# From gh-pages, after rebase:
& .\.venv\Scripts\python.exe -m mkdocs build --strict --clean
& .\.venv\Scripts\python.exe audit_site.py
& .\.venv\Scripts\python.exe check_deploy_paths.py
# All passed: 56 audited pages; 48 mirrored sources covered by 24 deploy paths.

# From vscode-extension:
npm run package
# Passed: prepared compile, lint, type checks, 16 tests, x64/ARM64 VSIX builds.
# Inspected both VSIXs: only the MCP formatting skill and selected reference ship.

Normal commit hooks were never bypassed. Initial delivery also passed 64 skill-generation/packaging/script tests and 367 MCP tests. Earlier formatting checker proofs and four no-send narrow-skill discovery checks passed.

Not run: new paid formatting-skill comparisons. Existing unrelated moderate npm audit findings were not changed.

Screenshots (if applicable)

N/A; optional guidance, test evidence, and packaging rather than a UI change.

Core Commands Coverage Checklist ⚠️

Does this PR add or modify Core Commands methods? [ ] Yes [x] No

If YES, verify all steps completed:

  • Updated the annotated Core Commands interface and implementation
  • Built Release so source generators refreshed Service, CLI, and MCP surfaces
  • Ran scripts\Invoke-ExcelFreeTests.ps1 -Local -Contracts
  • Verified CLI and MCP names, parameters, defaults, validation, and results match
  • Updated focused integration tests for the affected entry points
  • Updated canonical guidance in docs/reference, affected formatting skills, and user documentation when behavior changed

Coverage Impact: +0 methods; no Core command coverage change.

Checklist

  • Code follows project style guidelines
  • Self-review of code completed
  • Code builds with zero warnings
  • Appropriate error handling added
  • Updated help text (if adding new commands)
  • Updated README.md (if needed)
  • Follows AGENTS.md and the applicable COM safety guide
  • Uses batch API with proper disposal (using var batch or await using var batch)
  • Properly handles 1-based Excel indexing
  • Escapes user input with .EscapeMarkup()
  • Returns consistent exit codes (0 = success, 1+ = error)

Additional Notes

The historical comparison consumed 50 reserved attempts for 48 completed unique cases under a separately approved 100-attempt resumed ceiling. Two interrupted attempts have unknown usage; they are excluded from token percentages, not counted as zero. Earlier comparisons are not pooled. The configured live event callback received zero events, so no live journaling benefit is claimed. Fixed checkers independently verified completed workbook outputs.

Skill entries are about 1.6 KB each; prepared packages contain two Markdown files, about 10 KB combined. General documentation is no longer loaded as a default skill. Old standalone skill names require replacement after a separately authorized publication. This PR does not publish a release or marketplace update.

All three original review threads have been answered and resolved. Merge remains gated on checks for the updated head.

Move general Excel guidance into documentation while preserving website URLs. Ship only the MCP and CLI report-formatting skills, update all distribution surfaces, adopt pytest-skill-engineering 1.0.3, and retain paired comparisons with saved-workbook verification and honest historical evidence.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 2, 2026 07:50
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

Dependency Review

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

OpenSSF Scorecard

PackageVersionScoreDetails
pip/github-copilot-sdk 1.0.16 UnknownUnknown
pip/mcp 2.2.0 UnknownUnknown
pip/mcp-types 2.2.0 UnknownUnknown
pip/pytest-skill-engineering 1.0.3 UnknownUnknown
pip/tomlkit 0.15.1 UnknownUnknown
pip/websockets 17.1 UnknownUnknown

Scanned Files

  • llm-tests/uv.lock
  • src/ExcelMcp.Build.Tasks/ExcelMcp.Build.Tasks.csproj

Copilot AI commented Oct 2, 2026

Copy link
Copy Markdown

One or more custom setup steps configured for this repository failed during this Copilot code review run:

Verify setup tools and Excel-free boundary

Setup steps run before each review. If the review above is missing context, or no review was posted at all, the failing step above may be the cause. See the workflow run for failure details, fix your setup steps configuration, and re-request a review.

Note

You can configure setup steps for Copilot code review separately from Copilot cloud agent with a copilot-code-review.yml file. Read the docs for details.

Copilot AI 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.

Copilot review overview

🟡 Changes recommended

Evidence aggregation can report unmatched or failed skill reads, and the cleanup proof can double-release a COM wrapper.

Review effort: Balanced
Findings: 3 Medium severity

Open (3)
What changed in this PR

Replaces broad Excel skills with narrowly scoped report-formatting skills, moves general guidance into documentation, and strengthens independent skill-value evaluation.

Changes:

  • Introduces MCP and CLI report-formatting skills and updates packaging/publication.
  • Migrates general guidance to docs/reference while preserving website routes.
  • Upgrades and restructures LLM evaluation, evidence, and workbook verification.
File Description
vscode-extension/​README.md Documents optional formatting skill
vscode-extension/​package.json Registers renamed MCP skill
vscode-extension/​DEVELOPMENT.md Updates packaged-skill paths
vscode-extension/​AGENTS.md Updates extension guidance
tests/​README.md Revises LLM test documentation
tests/​ExcelMcp.SkillGeneration.Tests/​ReleaseMetadataScriptTests.cs Updates generated-skill fixture path
tests/​ExcelMcp.SkillGeneration.Tests/​PreCommitScriptTests.cs Tests new skill inputs
tests/​ExcelMcp.SkillGeneration.Tests/​PluginSkillVersionTests.cs Verifies scoped skill packages
tests/​ExcelMcp.SkillGeneration.Tests/​PluginPublicationCases.mjs Tests publication migration
tests/​ExcelMcp.SkillGeneration.Tests/​PluginBootstrapBuildTests.cs Updates plugin skill assertions
tests/​ExcelMcp.SkillGeneration.Tests/​McpbPackagingScriptTests.cs Updates packaging fixtures
tests/​ExcelMcp.SkillGeneration.Tests/​AutomationSafetyTests.cs Tests formatting reference preparation
tests/​ExcelMcp.McpServer.Tests/​Integration/​Tools/​CalculationGuidanceContractTests.cs Scans documentation references
src/​ExcelMcp.McpServer/​ExcelMcp.McpServer.csproj Removes obsolete skill build task
src/​ExcelMcp.Generators/​ServiceRegistryGenerator.cs Reframes manifest purpose
src/​ExcelMcp.CLI/​ExcelMcp.CLI.csproj Removes obsolete skill build task
src/​ExcelMcp.Build.Tasks/​SkillTemplateModel.cs Removes obsolete template model
src/​ExcelMcp.Build.Tasks/​ExcelMcp.Build.Tasks.csproj Removes obsolete project
skills/​templates/​SKILL.mcp.sbn Removes broad MCP template
skills/​excel-mcp-report-formatting/​SKILL.md Adds MCP formatting skill
skills/​excel-cli-report-formatting/​SKILL.md Adds CLI formatting skill
skills/​assets/​excel-mcp/​README.md Removes broad MCP asset
skills/​assets/​excel-cli/​references/​README.md Removes broad CLI references
skills/​assets/​excel-cli/​README.md Removes broad CLI asset
scripts/​Sync-PublishedPluginRepo.ps1 Validates new skill layout
scripts/​pre-commit.ps1 Tracks formatting source changes
scripts/​PluginContent.mjs Supports legacy/current layouts
scripts/​Get-ValidationPlan.ps1 Classifies formatting changes
scripts/​check-doc-counts.ps1 Validates formatting skill identity
scripts/​Build-ReleasePackages.ps1 Packages renamed skills
scripts/​Build-Plugins.ps1 Copies formatting skills
Sbroenne.ExcelMcp.sln Removes Build.Tasks project
mcpb/​README.md Updates skills documentation link
llm-tests/​workbook_assertions.py Extends workbook inspection
llm-tests/​Test-OwnedWorkbookCleanup.ps1 Adds cleanup proof
llm-tests/​test_spreadsheetbench_workbooks.py Adds workbook checker proofs
llm-tests/​test_skill_discovery.py Adds no-send discovery checks
llm-tests/​test_owned_workbook_cleanup.py Exercises exact cleanup
llm-tests/​test_formatting_value.py Tests formatting checkers
llm-tests/​test_consent_scenarios.py Tests failed-save handling
llm-tests/​test_cli_result_assertions.py Tightens execution evidence
llm-tests/​test_cli_mcp_server.py Checks SDK result shape
llm-tests/​test_aggregate_skill_value.py Tests evidence aggregation
llm-tests/​skill_discovery.py Implements SDK discovery
llm-tests/​pyproject.toml Pins evaluation framework 1.0.3
llm-tests/​mcp_tests/​test_mcp_table.py Removes weak live tests
llm-tests/​mcp_tests/​test_mcp_styling.py Removes weak styling tests
llm-tests/​mcp_tests/​test_mcp_screenshot_ab.py Removes screenshot A/B test
llm-tests/​mcp_tests/​test_mcp_sales_report_workflow.py Removes prose-heavy workflow
llm-tests/​mcp_tests/​test_mcp_range.py Removes weak range tests
llm-tests/​mcp_tests/​test_mcp_powerquery_datamodel.py Removes weak model tests
llm-tests/​mcp_tests/​test_mcp_financial_report_automation.py Removes weak report test
llm-tests/​mcp_tests/​test_mcp_file_worksheet.py Removes weak lifecycle test
llm-tests/​mcp_tests/​test_mcp_chart.py Removes weak chart test
llm-tests/​mcp_tests/​test_mcp_chart_collision_detection.py Removes weak collision tests
llm-tests/​mcp_tests/​test_mcp_calculation_mode.py Removes weak calculation tests
llm-tests/​extract_failures.py Removes obsolete report utility
llm-tests/​consent_scenarios.py Adds strict evidence and cleanup
llm-tests/​Close-OwnedWorkbook.ps1 Adds ROT-based cleanup
llm-tests/​cli/​test_cli_table.py Removes weak table tests
llm-tests/​cli/​test_cli_styling.py Removes weak styling tests
llm-tests/​cli/​test_cli_sales_report_workflow.py Removes weak workflow
llm-tests/​cli/​test_cli_range.py Removes weak range tests
llm-tests/​cli/​test_cli_powerquery_datamodel.py Removes weak model tests
llm-tests/​cli/​test_cli_pivottable_layout.py Removes weak layout tests
llm-tests/​cli/​test_cli_financial_report_automation.py Removes weak report test
llm-tests/​cli/​test_cli_file_worksheet.py Removes weak lifecycle test
llm-tests/​cli/​test_cli_consent.py Uses default tool policy
llm-tests/​cli/​test_cli_chart.py Removes weak chart test
llm-tests/​cli/​test_cli_calculation_mode.py Removes weak calculation test
llm-tests/​cli/​conftest.py Removes obsolete daemon fixture
llm-tests/​cli_mcp_server.py Returns explicit MCP text content
llm-tests/​cli_evidence.py Correlates CLI batch evidence
llm-tests/​aggregate_skill_value.py Produces sanitized comparison receipts
llm-tests/​AGENTS.md Defines evaluation safeguards
llm-tests/​.gitignore Ignores native reports
gh-pages/​mkdocs.yml Adds moved pages to navigation
gh-pages/​docs/​skills.md Updates skills metadata
gh-pages/​docs/​related-projects.md Revises evaluation description
gh-pages/​docs/​reference/​index.md Uses generated reference index
gh-pages/​docs/​reference/​calculation.md Adds calculation wrapper
gh-pages/​docs/​index.md Narrows workflow-quality claim
gh-pages/​docs/​guides/​claude-desktop.md Adds Claude wrapper
gh-pages/​check_deploy_paths.py Tracks reference sources
docs/​RELEASE-STRATEGY.md Renames skill release contents
docs/​reference/​xmlmap.md Adds XML map guidance
docs/​reference/​worksheet.md Adds worksheet guidance
docs/​reference/​workflows.md Adds workflow guidance
docs/​reference/​workbook.md Adds workbook guidance
docs/​reference/​window.md Adds window guidance
docs/​reference/​table.md Adds Table guidance
docs/​reference/​slicer.md Adds slicer guidance
docs/​reference/​screenshot.md Adds screenshot guidance
docs/​reference/​README.md Adds reference index
docs/​reference/​querytable.md Adds QueryTable guidance
docs/​reference/​powerquery.md Adds Power Query guidance
docs/​reference/​pivottable.md Adds PivotTable guidance
docs/​reference/​m-code-syntax.md Adds M syntax guidance
docs/​reference/​drawing.md Adds drawing guidance
docs/​reference/​dmv-reference.md Adds DMV guidance
docs/​reference/​datamodel.md Adds Data Model guidance
docs/​reference/​conditionalformat.md Adds formatting guidance
docs/​reference/​calculation.md Adds calculation guidance
docs/​reference/​analysis.md Adds what-if guidance
docs/​INSTALLATION.md Documents skill migration
docs/​INSTALLATION-MCP-SERVER.md Updates MCP skill identity
docs/​INSTALLATION-CLI.md Updates CLI skill identity
docs/​guides/​CLAUDE-DESKTOP.md Adds Claude setup guide
docs/​DEVELOPMENT.md Updates authoring link
docs/​COPILOT-PLUGIN-DISTRIBUTION.md Documents new packaging
docs/​CONTRIBUTING.md Updates guidance ownership
docs/​agents/​rules/​mcp-llm-guidance.md Defines current skill sources
docs/​agents/​rules/​excel-connection-types-guide.md Updates reference paths
docs/​agents/​development.md Updates contributor link
docs/​AGENT-SKILLS.md Documents scoped skills
Directory.Packages.props Removes obsolete dependencies
CONTEXT.md Updates sources of truth
AGENTS.md Removes Build.Tasks guidance
.github/​workflows/​publish-plugins.yml Validates current/legacy skills
.github/​workflows/​docs/​publish-plugins-setup.md Updates publication procedure
.github/​workflows/​docs/​awesome-copilot-update-setup.md Updates repository role
.github/​workflows/​deploy-gh-pages.yml Watches moved documentation
.github/​release-notes-template.md Updates skill installation notes
.github/​pull_request_template.md Updates guidance checklist
.github/​plugins/​marketplace-repo/​tests/​Test-Plugins.ps1 Tests renamed skill paths
.github/​plugins/​marketplace-repo/​README.md Documents new plugin layout
.github/​plugins/​excel-mcp/​README.md Describes optional MCP skill
.github/​plugins/​excel-cli/​README.md Describes optional CLI skill
.changeset/​narrow-formatting-skills.md Records user-visible migration

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread llm-tests/Test-OwnedWorkbookCleanup.ps1 Outdated
Comment thread llm-tests/aggregate_skill_value.py
Comment thread llm-tests/aggregate_skill_value.py Outdated
Count only successful skill reads, require matched verified task/repetition sets for token percentages, and record explicit comparison exclusions. Reuse the tracked peer workbook and prove no COM wrapper is tracked twice. Regenerated historical evidence retains all published measurements.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 2, 2026 08:22

Copilot AI commented Oct 2, 2026

Copy link
Copy Markdown

One or more custom setup steps configured for this repository failed during this Copilot code review run:

Verify setup tools and Excel-free boundary

Setup steps run before each review. If the review above is missing context, or no review was posted at all, the failing step above may be the cause. See the workflow run for failure details, fix your setup steps configuration, and re-request a review.

Note

You can configure setup steps for Copilot code review separately from Copilot cloud agent with a copilot-code-review.yml file. Read the docs for details.

Copilot AI 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.

Copilot review overview

🔵 Needs a closer look

The LLM testing documentation conflates the 24-execution default matrix with the 60-attempt accounting ceiling.

Review effort: Balanced
Findings: None

Resolved since last review (3)
Previously missed (1)

In code that hasn't changed since last review

Low severity Correct default matrix size and attempt ceiling

tests/​README.md:416

The default suite is formatting, and cases(None, "formatting") generates 24 executions; 60 is the default approved attempt ceiling, not the matrix size. Calling this a 60-execution matrix misstates both the expected paid run and the accounting model. Please describe the 24-execution default matrix separately from the 60-attempt ceiling.

@sbroenne
sbroenne merged commit 02f0b61 into main Oct 2, 2026
16 of 17 checks passed
@sbroenne
sbroenne deleted the sbroenne-skill-test-value branch October 2, 2026 08:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants