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
17 changes: 17 additions & 0 deletions .githooks/pre-push
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash
# .githooks/pre-push
# Prevents direct git push to protected branches (develop, master)

protected_branches="^(develop|master)$"

while read local_ref local_oid remote_ref remote_oid; do
target_branch="${remote_ref#refs/heads/}"

if [[ "$target_branch" =~ $protected_branches ]]; then
echo "❌ [Direct Push Blocked] '$target_branch' 브랜치로 직접 push하는 것은 금지되어 있습니다."
echo " 반드시 feature/* 또는 fix/* 브랜치에서 PR(Pull Request)을 올려 병합하세요!"
exit 1
fi
done

exit 0
133 changes: 17 additions & 116 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,131 +4,32 @@ Lightweight human-readable summary of meaningful repository changes.

## Unreleased

- Fixed Windows CP1252 console encoding failure (`UnicodeEncodeError: 'charmap' codec can't encode character '\u2713'`) in `scripts/verify_examples.py` and `tests/integration/test_examples.py` by replacing non-ASCII symbols with ASCII tags (`[ok]`, `[error]`), reconfiguring stdout/stderr UTF-8 streams, and setting `PYTHONIOENCODING=utf-8` in subprocess calls.
- Added untracked manifest discovery (`discover_untracked_manifests`) in `scripts/sync_version.py` to automatically prevent untracked plugin/extension manifests from being added in PRs without version/description tracking.
- Added `.pre-commit-config.yaml` for local contributor pre-commit checks and updated `CONTRIBUTING.md` with manifest governance guidelines.
- Enhanced Antigravity CLI (`agy`) plugin manifest (`adapters/antigravity/plugin.json`) with `version` tracking integrated into `scripts/sync_version.py`, expanded unit test assertions in `test_antigravity_adapter.py` (including symlink layout simulation) and `test_readme.py`, and updated `README.md` documentation.
- Added `.githooks/pre-push` script to block direct local `git push` to protected branches (`develop`, `master`)
and direct contributors to use Pull Requests (`feature/*` / `fix/*`).
- Added Conventional Commits PR title validation job (`pr-title-check`) to GitHub Actions workflow (`.github/workflows/test.yml`)
to enforce standard title format (`feat:`, `fix:`, `docs:`, etc.) for pull requests.
- Updated `.github/PULL_REQUEST_TEMPLATE.md` with Conventional Commits title format guide and an explicit Examples Impact checklist
requiring example updates for `feat:` and `fix:` changes while skipping non-feature PRs.
- Fixed Windows CP1252 console encoding failure (`UnicodeEncodeError: 'charmap' codec can't encode character '\u2713'`) in `scripts/verify_examples.py` and `tests/integration/test_examples.py` by replacing non-ASCII symbols with ASCII tags (`[ok]`, `[error]`), reconfiguring stdout/stderr UTF-8 streams, and setting `PYTHONIOENCODING=utf-8` in subprocess calls.
- Added untracked manifest discovery (`discover_untracked_manifests`) in `scripts/sync_version.py` to automatically prevent untracked plugin/extension manifests from being added in PRs without version/description tracking.
- Added `.pre-commit-config.yaml` for local contributor pre-commit checks and updated `CONTRIBUTING.md` with manifest governance guidelines.
- Enhanced Antigravity CLI (`agy`) plugin manifest (`adapters/antigravity/plugin.json`) with `version` tracking integrated into `scripts/sync_version.py`, expanded unit test assertions in `test_antigravity_adapter.py` (including symlink layout simulation) and `test_readme.py`, and updated `README.md` documentation.

## v0.2.1 (2026-08-31)

- Redesigned and expanded `examples/` into representative, structured usage guides
(`basic-usage.md`, `check-constraints.md`, `graph-visualization.md`, and
`multilingual-adr.md`) with standardized Scenario, Input, What Happens, and Output sections.
- Added a full Korean documentation suite under [`examples/ko/`](examples/ko/README.md)
(including `basic-usage.md`, `check-constraints.md`, `graph-visualization.md`, and `multilingual-adr.md`).
- Created `scripts/verify_examples.py` and `tests/integration/test_examples.py` to
automatically verify that all documented example commands execute cleanly and to auto-update
example output snippets when core `adr.py` logic or schemas change.

- Added a `harness-parity` CI job that installs the real Codex CLI and
Gemini CLI and drives their own plugin/extension commands (marketplace
add, install, list) against this repo, then runs `preflight`/`init`/
`validate` from the installed snapshot on every push and pull request —
catching a broken adapter before a user hits it, not after.
- Verified the Antigravity CLI adapter end to end against the `agy` CLI
(validate/install/list plus the script layer); `adapters/antigravity/README.md`
corrected from "unverified" to a recorded transcript, matching the
Codex/Gemini adapters' documented depth.
- Added `CODE_OF_CONDUCT.md` and GitHub issue templates (bug report,
feature request) as public-repository readiness ahead of the eventual
switch to public.
- Recorded ADR-0011 for the relationship graph and public-readiness
decisions.
- Added ADR relationship graph navigation: `adr.py index` now embeds a Mermaid
graph in the generated decision log when relationships exist, and
`adr.py graph` exports standalone `relationships.mmd` plus a crisp SVG
navigation artifact without requiring Node, Mermaid CLI, or browser
rendering.
- Added public repository readiness docs: `CONTRIBUTING.md`, `SECURITY.md`,
and a pull request template covering ADR impact and local verification.
- Added `adr.py search`: finds an existing ADR by keyword (title **and**
body — `related`'s keyword match was title-only before), tags, status,
`--id`, or the real file path it governs, with deterministic best-match
ordering and `--limit`/`total`/`truncated` for bounding results. Added a
Relationships section (supersession chains + related lists, titles
alongside IDs) to the generated `docs/decisions/README.md`, localized
across all 8 catalogs, and `validate` checks for broken supersession
links, one-sided supersession edits, and supersession cycles.
- Added CHECK policy exceptions: `adr.py exception` validates and records a
schema-checked, owned, scoped, time-boxed exception; CHECK annotates a
matching finding with it but never suppresses or downgrades the finding —
an exception is visible evidence, not a silent pass.
- Promoted CHECK's violation classification to a stable `confidence` field
(`VERIFIED`/`VIOLATED`/`UNVERIFIABLE`) on every finding, instead of an
agent re-deriving it from documentation each run.
- Fixed a Windows-only bug where CHECK's git evidence gathering
(`diff.py`/`git_paths.py`) decoded subprocess output using the platform's
default locale encoding instead of UTF-8, garbling Unicode paths/content
on Windows CI while working correctly on macOS/Linux.
- Hardened `scripts/sync_version.py` against three silent-drift bugs
(a tracked manifest losing its version key, a manifest path outside the
repo root crashing instead of failing cleanly, non-ASCII manifest content
being escaped on write) and extended it to keep manifest `description`
fields in sync with `SKILL.md`'s frontmatter, the same way `version`
already was.
- Formalized `--json` as a documented no-op: every command has always
printed JSON regardless of the flag; `--help` now says so explicitly
instead of implying a choice that doesn't exist.
- Corrected repository ADR provenance and lifecycle: existing ADRs now name
an approved decision maker and locale, and ADR-0006 (repository-default
locale generation) supersedes ADR-0003 (index-only localization)
bidirectionally. This session's own design decisions were recorded as
ADR-0007..0010 (CHECK confidence field, exception mechanism, `--json`
contract, and a closed-as-not-applicable Codex tooling question).
- Bumped to v0.2.0.
- Added repository-configured deterministic ADR localization for eight locales
(`en`, `ko`, `ja`, `zh`, `fr`, `es`, `de`, `pt-BR`) across INIT, CREATE,
templates, prompts, and INDEX, with strict config/schema validation and
explicit override precedence.
- Added portable multilingual ADR creation: Unicode titles and bodies are
preserved, an approved semantic ASCII slug can be supplied, and non-ASCII
titles safely fall back to an ID-qualified `decision` filename.
- Hardened CHECK against false-clean results by failing closed on incomplete git
evidence, retaining both sides of renames and Unicode paths, detecting
working-tree deletions, exposing invalid ADRs, following Git ignore/path
semantics, and rejecting conflicting diff modes.
- Made relative ADR directories resolve consistently from `--root` for every
repository-scoped generation and validation command.
- Improved the repository's own ADR evidence and lifecycle history, including
the accepted ADR-0006 decision that supersedes the MVP index-only
localization decision ADR-0003.
- Expanded README, quickstart, and skill guidance with real multilingual
workflows and CHECK confidence boundaries, and added separate Korean v0.2.0
readiness and enterprise-adoption reports.
- Added the self-contained `skills/adr-toolkit/` package: deterministic
scaffolding/discovery commands (`init`, `discover`, `preflight`,
`validate`, `index`), ADR frontmatter/ID/lifecycle core logic, MADR
templates, and a no-agent `create --interactive` terminal wizard. Usable
three ways: Claude Code (deep integration), a generic manifest-free
fallback for any other harness, or standalone from the terminal. CI
(matrix-tested pytest) built in from the first commit.
- Added the RECORD workflow: deterministic significance scoring, related-ADR
search, evidence-first interviewing guidance, MADR drafting rules, and an
end-to-end RECORD fixture.
- Added validated ADR lifecycle commands for status changes, deprecation,
and bidirectional supersession, including dry-run and partial-write
safeguards.
- Added optional relationship fields to runtime and JSON Schema validation,
with parity coverage to prevent schema drift.
- Closed out Plan 2 with a final whole-branch review: hardened `related`,
`significance`, `status`, and `supersede` against malformed input
(bad frontmatter, non-list fields, missing IDs, bad JSON) and added a
supersede invariant requiring the superseding ADR to already be
`accepted`.
- Added the CHECK workflow: `diff`/`check` CLI commands, a `**`-aware glob
matcher, a `constraints:` block parser, and a 4-way finding
classification (Related/Review required/Verified violation/No applicable
constraint) matching a git diff against Accepted ADRs' structural
constraint rules and Superseded ADRs' affected paths. Closed out with a
final whole-branch review that fixed a git argument-injection
vulnerability and several "silently reports clean" gaps.
- Added five-language i18n for `index`'s generated `README.md`
(`--locale en|fr|ja|ko|zh`), light adapters for Codex CLI, Gemini CLI,
and Antigravity CLI (manifest formats verified against real
documentation, not guessed), a repo-root version-sync script, and a
tag-triggered release workflow. This closes out Plan 4 of 4 — the full
ADR Toolkit MVP is now complete on this branch.
- Released v0.1.0 and adopted a Git Flow branch policy
(`develop`/`master`/`feature`/`release`/`hotfix`, direct-tag release
automation), recorded in `AGENTS.md`.
- Dogfooded the toolkit on its own repo: initialized `docs/decisions/`
and recorded the four most significant architectural decisions made
while building it (CHECK's structural-only scope, i18n's index-only
scope, adapter packaging policy, the Git Flow adoption itself).
- Wrote the root `README.md` (previously a one-line stub) and
`examples/quickstart.md`, a full INIT → RECORD → CHECK walkthrough with
real command output, including CHECK catching a live rule violation and
clearing it after a fix.
25 changes: 5 additions & 20 deletions handoff.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,21 @@

## Current task (2026-09-01)

**AGY (`agy`) Plugin Integration & Adapter Enhancements.**
Working on branch `feature/agy-plugin-implements-2`:

- Enhanced Antigravity CLI (`agy`) plugin manifest (`adapters/antigravity/plugin.json`) with `version` field.
- Registered `adapters/antigravity/plugin.json` version tracking in `scripts/sync_version.py` (`MANIFEST_SPECS`).
- Added `discover_untracked_manifests()` in `scripts/sync_version.py` to automatically catch and block any untracked plugin/extension manifest added in PRs.
- Created `.pre-commit-config.yaml` for pre-commit verification and updated `CONTRIBUTING.md` with manifest governance rules.
- Updated unit test assertions in `tests/unit/test_antigravity_adapter.py` (including symlink layout simulation), `tests/unit/test_sync_version.py`, and `tests/unit/test_readme.py`.
- Updated `adapters/antigravity/README.md` and `README.md` documentation.
All session tasks (examples redesign, Korean docs, automated verification pipeline, `v0.2.1` release, AGY plugin enhancements, and `.githooks/pre-push` PR #7) are completed and merged/PR'd.

## Touched files

- `.githooks/pre-push`
- `.github/PULL_REQUEST_TEMPLATE.md`
- `.github/workflows/test.yml`
- `examples/` (`README.md`, `basic-usage.md`, `check-constraints.md`, `graph-visualization.md`, `multilingual-adr.md`)
- `examples/ko/` (`README.md`, `basic-usage.md`, `check-constraints.md`, `graph-visualization.md`, `multilingual-adr.md`)
- `scripts/verify_examples.py`
- `tests/integration/test_examples.py`
- `skills/adr-toolkit/VERSION`
- `skills/adr-toolkit/SKILL.md`
- `.claude-plugin/plugin.json`
- `adapters/gemini-cli/gemini-extension.json`
- `changelog.md`
- `handoff.md`

## Next step

1. Monitor CI run for `pr-title-check` and `examples-drift` on upcoming PRs into `develop`.
2. When new features (`feat:`) or bug fixes (`fix:`) are added in future PRs, run `python3 scripts/verify_examples.py --check` and `--update` to keep examples automatically in sync.
1. Merge PR #7 into `develop` once CI checks pass.
2. Resume next scheduled roadmap item or user feature request in a clean working state.

## Open risk

- None. All 396 tests, version drift checks, and example verification checks pass cleanly across Python 3.9 & 3.12.
- None. All unit and integration test suites pass across environments.
Loading