Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
4 changes: 2 additions & 2 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
74 changes: 74 additions & 0 deletions docs/releases/v0.23.0.md
Original file line number Diff line number Diff line change
@@ -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.
10 changes: 5 additions & 5 deletions docs/user-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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. |
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion src/agent_config_score/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "0.22.0"
__version__ = "0.23.0"
18 changes: 18 additions & 0 deletions tests/test_release_workflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Loading