diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cca56b6..f23fcc7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -195,18 +195,24 @@ jobs: shell: bash run: | set -euo pipefail + notes="docs/releases/$TAG.md" + if [[ -f "$notes" ]]; then + note_args=(--notes-file "$notes") + else + note_args=(--generate-notes) + fi if [[ "$EXISTING_RELEASE" == "true" ]]; then gh release upload "$TAG" dist/* --clobber elif [[ "$EXISTING_TAG" == "true" ]]; then gh release create "$TAG" dist/* \ --verify-tag \ --title "AgentConfigScore $TAG" \ - --generate-notes + "${note_args[@]}" else gh release create "$TAG" dist/* \ --target "$GITHUB_SHA" \ --title "AgentConfigScore $TAG" \ - --generate-notes + "${note_args[@]}" fi - name: Update rolling v0 branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 6249615..f783082 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ ## Unreleased +No changes yet. + +## v0.23.0 + +The English core workflow is packaged as a local deterministic linter and CI +regression gate. This remains a Beta release, not a semantic quality or security +certification. See the [release notes](docs/releases/v0.23.0.md) for installation, +compatibility changes, and known limits. + ### Added - An offline installed-package acceptance journey covering both console aliases and the module entrypoint, setup, reports, pass/fail regression behavior, baseline-policy bypass protection and operational failures. CI exercises the wheel on Linux, Windows and macOS; manual publication now waits for the full source suite and all installed acceptance jobs. diff --git a/CITATION.cff b/CITATION.cff index eb9d48c..c5d3d20 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -2,8 +2,8 @@ cff-version: 1.2.0 message: "If you use AgentConfigScore in research, please cite this software." title: "AgentConfigScore: deterministic lint and regression checks for AI coding-agent instructions" type: software -version: 0.22.0 -date-released: 2026-09-07 +version: 0.23.0 +date-released: 2026-10-07 authors: - family-names: Lin given-names: Zhibo diff --git a/README.md b/README.md index 56ce0f4..0f485fe 100644 --- a/README.md +++ b/README.md @@ -609,7 +609,7 @@ The Action emits outputs before returning its final regression status. Use `if: - [x] installed-wheel end-to-end acceptance on Linux, Windows and macOS in CI - [x] source and installed-package gates before publication - [x] user guide, exit-code reference and troubleshooting -- [ ] next package cut after version/changelog review +- [x] versioned English core package with release notes and compatibility guidance - [ ] optional Simplified and Traditional Chinese documentation and README language switch - [ ] optional semantic contradiction plugin diff --git a/docs/releases/v0.23.0.md b/docs/releases/v0.23.0.md new file mode 100644 index 0000000..ee5fe0c --- /dev/null +++ b/docs/releases/v0.23.0.md @@ -0,0 +1,74 @@ +# AgentConfigScore v0.23.0 + +This release packages the English core workflow: a dependency-free, local +instruction linter and baseline-aware CI regression gate. It remains **Beta**. +No accuracy comparison with AI review or independent user validation is claimed. + +## Install or upgrade + +```bash +python -m pip install --upgrade "agent-config-score==0.23.0" +agent-config-score --version +``` + +Expected version: `AgentConfigScore 0.23.0`. Python 3.10+ is required; Git is +needed for `diff`. Both console aliases (`agent-config-score`, `acs`) and the +PATH-independent `python -m agent_config_score` entrypoint are available. + +## What is included + +- Shared Markdown context for more conservative handling of explicit prohibited + command blocks/lists, matching code fences and command-option parsing. +- Local Markdown-link checks relative to the instruction file. +- Narrow English rules for explicitly false success reports and bulk environment + transfers. These are evidence-based lint signals, not general intent detection. +- Baseline-owned regression policy and expiring suppressions, local `diff` and + `compare`, initialization, integration doctor, rule inspection and reports. +- An optional copy-ready PR-comment workflow; posting is opt-in, not an automatic + action of the scanner. +- Windows Unicode Git-path fixes and concise diagnostics for invalid UTF-8 + integration files or unwritable reports. +- A [user guide](https://github.com/LE0-Lin/AgentConfigScore/blob/v0.23.0/docs/user-guide.md) + covering setup, exit codes and troubleshooting, plus a + [documentation index](https://github.com/LE0-Lin/AgentConfigScore/blob/v0.23.0/docs/README.md). +- Installed-wheel acceptance on Linux, Windows and macOS, required before + publication alongside the full source regression suite. + +## Compatibility and adoption + +Existing command names, configuration version 1 and JSON field names remain +unchanged. Rule additions and interpretation fixes can change scores and findings +on the same input compared with v0.22.0. Review new signals when upgrading; a +score change is not a new real-world accuracy measurement. + +The new stable rule IDs are `false-success-report` and `broad-environment-upload`. +They are included in rule inspection, suppression schema and SARIF metadata. +Operational filesystem/encoding failures return exit `2`; doctor error checks +return `1`. These failures are not clean scan results. + +For reproducible CI, pin the Action to `LE0-Lin/AgentConfigScore@v0.23.0` (or its +verified commit). `@v0` remains a rolling pre-1.0 reference and can change on a +later release. The tool applies the baseline policy to both trees so a PR cannot +use its own weaker policy or new suppression to approve itself. + +Existing generated workflows do not need to be reinitialized merely to upgrade +the installed package. Review whether they use a fixed Action version or rolling +`v0`, since those determine the CI tool separately from your local installation. + +## Evidence and known limits + +Maintained deterministic contracts and synthetic installed-package journeys +verify expected engineering behavior; they do not establish real-world precision, +recall or usefulness. The unresolved AI pilot and failed source acquisitions +remain explicitly unscored; research preparation is separate from the runtime. + +An A 100 means no active deterministic rule matched, **not** semantic perfection +or a security approval. Arbitrary paraphrases, contradictions and other-language +instruction semantics still need review. Read the +[limitations](https://github.com/LE0-Lin/AgentConfigScore/blob/v0.23.0/docs/limitations.md) +and [full changelog](https://github.com/LE0-Lin/AgentConfigScore/blob/v0.23.0/CHANGELOG.md). + +Simplified and Traditional Chinese documentation/language links are the next +optional milestone; they are **not included in v0.23.0**. Translating documentation +will not by itself add Chinese semantic detection or change machine-readable +interfaces. diff --git a/docs/user-guide.md b/docs/user-guide.md index 4ddc3f2..e24f654 100644 --- a/docs/user-guide.md +++ b/docs/user-guide.md @@ -16,10 +16,10 @@ agent-config-score --version agent-config-score --help ``` -`acs` is a shorter alias. Development source also supports -`python -m agent_config_score` with the same product commands; this module -entrypoint is not present in the already published v0.22.0. It will be included -in the next package release. Check [releases](https://github.com/LE0-Lin/AgentConfigScore/releases) +`acs` is a shorter alias. Version 0.23.0 and later also support +`python -m agent_config_score` with the same product commands, without relying +on the console script's PATH setup. Older versions do not provide this module +entrypoint. Check [releases](https://github.com/LE0-Lin/AgentConfigScore/releases) before assuming a change on `main` is available on PyPI or the rolling `v0` ref. ## 2. Initialize in your repository @@ -140,7 +140,7 @@ Nothing is uploaded. Review and sanitize the draft yourself before sharing. | Symptom | What to check | |---|---| -| Command is not found | Install into the active Python environment; confirm its Scripts/bin directory is on PATH. The next package also provides `python -m agent_config_score`. | +| Command is not found | Install into the active Python environment; confirm its Scripts/bin directory is on PATH. In v0.23.0+, use `python -m agent_config_score` as a PATH-independent alternative. | | Configuration / workflow encoding error | Save the file as UTF-8; do not copy a UTF-16 file into the integration. | | Cannot write HTML, SARIF or Markdown | Choose a writable file path, not an existing directory; inspect parent-directory permissions. | | `diff` cannot detect a baseline | Check `doctor`, then pass an available default-branch ref explicitly. | diff --git a/pyproject.toml b/pyproject.toml index 8c1c168..9626d38 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "agent-config-score" -version = "0.22.0" +version = "0.23.0" description = "Deterministic lint and regression gate for AGENTS.md, Claude, Cursor, Copilot, and Gemini instructions." readme = "README.md" requires-python = ">=3.10" diff --git a/src/agent_config_score/__init__.py b/src/agent_config_score/__init__.py index 5963297..8b301a7 100644 --- a/src/agent_config_score/__init__.py +++ b/src/agent_config_score/__init__.py @@ -1 +1 @@ -__version__ = "0.22.0" +__version__ = "0.23.0" diff --git a/tests/test_release_workflow.py b/tests/test_release_workflow.py index aef8bfb..e60e1d2 100644 --- a/tests/test_release_workflow.py +++ b/tests/test_release_workflow.py @@ -68,6 +68,24 @@ def test_privileged_third_party_publish_action_is_commit_pinned(self): workflow, ) + def test_current_package_has_versioned_release_notes_and_changelog(self): + source = (ROOT / "src" / "agent_config_score" / "__init__.py").read_text(encoding="utf-8") + version = re.search(r'^__version__ = "([^"]+)"$', source, re.MULTILINE).group(1) + notes = ROOT / "docs" / "releases" / f"v{version}.md" + self.assertTrue(notes.is_file()) + content = notes.read_text(encoding="utf-8") + self.assertIn(f"agent-config-score=={version}", content) + self.assertIn(f"AgentConfigScore {version}", content) + self.assertIn("Beta", content) + self.assertIn(f"## v{version}\n", (ROOT / "CHANGELOG.md").read_text(encoding="utf-8")) + + def test_release_prefers_reviewed_notes_with_a_generated_fallback(self): + workflow = WORKFLOW.read_text(encoding="utf-8") + self.assertIn('notes="docs/releases/$TAG.md"', workflow) + self.assertIn('note_args=(--notes-file "$notes")', workflow) + self.assertIn("note_args=(--generate-notes)", workflow) + self.assertEqual(workflow.count('"${note_args[@]}"'), 2) + if __name__ == "__main__": unittest.main()