diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json index 16380bf..f845f98 100644 --- a/.agents/plugins/marketplace.json +++ b/.agents/plugins/marketplace.json @@ -4,7 +4,7 @@ "displayName": "Artic" }, "description": "Reference-driven AI-native design docs for homepage generation.", - "version": "0.5.0", + "version": "0.6.0", "author": "baskduf", "plugins": [ { diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 5d22bfe..f3a4044 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -2,7 +2,7 @@ "name": "artic", "display_name": "Artic", "description": "Reference-driven AI-native design docs for homepage generation.", - "version": "0.5.0", + "version": "0.6.0", "author": "baskduf", "plugins": [ { diff --git a/CHANGELOG.md b/CHANGELOG.md index 59b590d..4717d48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## 0.6.0 - 2026-06-20 + +### Added +- Added source-role metadata across the Artic catalog so references declare whether they are visual, system, implementation, behavior, QA, asset, legal, or copy guidance. +- Preserved source-role metadata in init reference outputs and source plans for downstream agent strategy authoring. + +### Changed +- Gated role-grounded source selection with source-role eligibility and explicit-context metadata so implementation, asset, legal, and system references do not leak into unrelated visual guidance. +- Reduced default source over-selection so Polaris, shadcn/ui, Tailwind, and similar implementation sources are selected only when the project context supports their role. + ## 0.5.0 - 2026-06-20 ### Removed diff --git a/README.ja.md b/README.ja.md index f9f853b..dd6bb9f 100644 --- a/README.ja.md +++ b/README.ja.md @@ -62,7 +62,7 @@ codex plugin marketplace add baskduf/artic 安定したインストールが必要な場合はリリースタグに固定します: ```bash -codex plugin marketplace add baskduf/artic@v0.5.0 +codex plugin marketplace add baskduf/artic@v0.6.0 ``` プラグインブラウザから `codex-artic` をインストールします: diff --git a/README.ko.md b/README.ko.md index df2e523..38e30a8 100644 --- a/README.ko.md +++ b/README.ko.md @@ -62,7 +62,7 @@ codex plugin marketplace add baskduf/artic 안정적인 설치가 필요하면 릴리즈 태그로 고정: ```bash -codex plugin marketplace add baskduf/artic@v0.5.0 +codex plugin marketplace add baskduf/artic@v0.6.0 ``` 플러그인 브라우저에서 `codex-artic` 설치: diff --git a/README.md b/README.md index f61dd2f..0dcab1e 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ codex plugin marketplace add baskduf/artic Pin a released version when you want a stable install: ```bash -codex plugin marketplace add baskduf/artic@v0.5.0 +codex plugin marketplace add baskduf/artic@v0.6.0 ``` Install `codex-artic` from the plugin browser: diff --git a/README.zh-CN.md b/README.zh-CN.md index ea08b03..0768a9e 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -62,7 +62,7 @@ codex plugin marketplace add baskduf/artic 需要稳定安装时固定到发布标签: ```bash -codex plugin marketplace add baskduf/artic@v0.5.0 +codex plugin marketplace add baskduf/artic@v0.6.0 ``` 在插件浏览器中安装 `codex-artic`: diff --git a/README.zh-TW.md b/README.zh-TW.md index 186b56f..8fcb0b6 100644 --- a/README.zh-TW.md +++ b/README.zh-TW.md @@ -62,7 +62,7 @@ codex plugin marketplace add baskduf/artic 需要穩定安裝時固定到發布標籤: ```bash -codex plugin marketplace add baskduf/artic@v0.5.0 +codex plugin marketplace add baskduf/artic@v0.6.0 ``` 在外掛瀏覽器中安裝 `codex-artic`: diff --git a/plugins/claude-artic/.claude-plugin/plugin.json b/plugins/claude-artic/.claude-plugin/plugin.json index 6130a70..f875fbd 100644 --- a/plugins/claude-artic/.claude-plugin/plugin.json +++ b/plugins/claude-artic/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "claude-artic", - "version": "0.5.0", + "version": "0.6.0", "description": "Artic design onboarding skill for Claude Code.", "skills": [ { diff --git a/plugins/claude-artic/skills/artic/SKILL.md b/plugins/claude-artic/skills/artic/SKILL.md index ef459ad..1bacef8 100644 --- a/plugins/claude-artic/skills/artic/SKILL.md +++ b/plugins/claude-artic/skills/artic/SKILL.md @@ -1,7 +1,7 @@ --- name: artic description: "Use when creating or improving a homepage/website and design rules are missing or weak. Artic is an agent design-direction protocol: @artic init interviews the user, @artic start authors strategy artifacts, then the compiler produces AI-native DESIGN.md docs from reusable reference principles." -version: 0.5.0 +version: 0.6.0 author: Hermes Agent license: MIT metadata: diff --git a/plugins/claude-artic/skills/artic/scripts/artic_init.py b/plugins/claude-artic/skills/artic/scripts/artic_init.py index e274c02..b786029 100644 --- a/plugins/claude-artic/skills/artic/scripts/artic_init.py +++ b/plugins/claude-artic/skills/artic/scripts/artic_init.py @@ -312,7 +312,7 @@ def create_init_outputs(root: Path, args: argparse.Namespace) -> dict: ] brief = { - "artic_version": "0.5.0", + "artic_version": "0.6.0", "project": { "name": normalized_project["name"], "type": "homepage", @@ -345,7 +345,7 @@ def create_init_outputs(root: Path, args: argparse.Namespace) -> dict: "source_plan": source_plan, "synthesis": "Use selected sources as compatible patterns; localize prose according to the brief language contract while preserving source names and protected terms.", } - state = {"artic_version": "0.5.0", "last_generated_at": now, "status": "initialized", "language": lang, "intent_path": ".artic/intent.json"} + state = {"artic_version": "0.6.0", "last_generated_at": now, "status": "initialized", "language": lang, "intent_path": ".artic/intent.json"} write(root / ".artic" / "intent.json", json.dumps(intent, indent=2, ensure_ascii=False) + "\n") write(root / ".artic" / "brief.json", json.dumps(brief, indent=2, ensure_ascii=False) + "\n") diff --git a/plugins/claude-artic/skills/artic/scripts/artic_start.py b/plugins/claude-artic/skills/artic/scripts/artic_start.py index e4cb2bb..d5bf190 100644 --- a/plugins/claude-artic/skills/artic/scripts/artic_start.py +++ b/plugins/claude-artic/skills/artic/scripts/artic_start.py @@ -393,7 +393,7 @@ def update_state(root: Path, brief: dict[str, Any]) -> None: state = loaded except json.JSONDecodeError: state = {} - state.update({"artic_version": str(brief.get("artic_version") or state.get("artic_version") or "0.5.0"), "last_generated_at": datetime.now(timezone.utc).isoformat(), "status": "generated", "language": brief_language(brief), "strategy_path": ".artic/strategy.json"}) + state.update({"artic_version": str(brief.get("artic_version") or state.get("artic_version") or "0.6.0"), "last_generated_at": datetime.now(timezone.utc).isoformat(), "status": "generated", "language": brief_language(brief), "strategy_path": ".artic/strategy.json"}) write(state_path, json.dumps(state, indent=2, ensure_ascii=False) + "\n") diff --git a/plugins/claude-artic/skills/artic/scripts/scaffold_artic_files.py b/plugins/claude-artic/skills/artic/scripts/scaffold_artic_files.py index dae725e..84296e7 100755 --- a/plugins/claude-artic/skills/artic/scripts/scaffold_artic_files.py +++ b/plugins/claude-artic/skills/artic/scripts/scaffold_artic_files.py @@ -100,7 +100,7 @@ def scaffold(root: Path, project_name: str, locale: str = "en-US") -> None: "forbidden_copy_elements": ["logos", "trademarks", "proprietary illustrations", "exact layouts", "source copywriting"], } brief = { - "artic_version": "0.5.0", + "artic_version": "0.6.0", "project": { "name": project_name, "type": "homepage", @@ -139,7 +139,7 @@ def scaffold(root: Path, project_name: str, locale: str = "en-US") -> None: ], "synthesis": "Clean SaaS hierarchy with token discipline and mobile-first accessibility.", } - state = {"artic_version": "0.5.0", "last_generated_at": now, "status": "scaffolded", "language": language, "intent_path": ".artic/intent.json", "strategy_path": ".artic/strategy.json"} + state = {"artic_version": "0.6.0", "last_generated_at": now, "status": "scaffolded", "language": language, "intent_path": ".artic/intent.json", "strategy_path": ".artic/strategy.json"} write(root / ".artic" / "intent.json", json.dumps(intent, indent=2, ensure_ascii=False) + "\n") write(root / ".artic" / "strategy.json", json.dumps(strategy, indent=2, ensure_ascii=False) + "\n") write(root / ".artic" / "brief.json", json.dumps(brief, indent=2, ensure_ascii=False) + "\n") diff --git a/plugins/codex-artic/.codex-plugin/plugin.json b/plugins/codex-artic/.codex-plugin/plugin.json index f6f54d4..73c7f1c 100644 --- a/plugins/codex-artic/.codex-plugin/plugin.json +++ b/plugins/codex-artic/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "codex-artic", - "version": "0.5.0", + "version": "0.6.0", "description": "Artic design onboarding skill for Codex.", "skills": [ { diff --git a/plugins/codex-artic/skills/artic/SKILL.md b/plugins/codex-artic/skills/artic/SKILL.md index ef459ad..1bacef8 100644 --- a/plugins/codex-artic/skills/artic/SKILL.md +++ b/plugins/codex-artic/skills/artic/SKILL.md @@ -1,7 +1,7 @@ --- name: artic description: "Use when creating or improving a homepage/website and design rules are missing or weak. Artic is an agent design-direction protocol: @artic init interviews the user, @artic start authors strategy artifacts, then the compiler produces AI-native DESIGN.md docs from reusable reference principles." -version: 0.5.0 +version: 0.6.0 author: Hermes Agent license: MIT metadata: diff --git a/plugins/codex-artic/skills/artic/scripts/artic_init.py b/plugins/codex-artic/skills/artic/scripts/artic_init.py index e274c02..b786029 100644 --- a/plugins/codex-artic/skills/artic/scripts/artic_init.py +++ b/plugins/codex-artic/skills/artic/scripts/artic_init.py @@ -312,7 +312,7 @@ def create_init_outputs(root: Path, args: argparse.Namespace) -> dict: ] brief = { - "artic_version": "0.5.0", + "artic_version": "0.6.0", "project": { "name": normalized_project["name"], "type": "homepage", @@ -345,7 +345,7 @@ def create_init_outputs(root: Path, args: argparse.Namespace) -> dict: "source_plan": source_plan, "synthesis": "Use selected sources as compatible patterns; localize prose according to the brief language contract while preserving source names and protected terms.", } - state = {"artic_version": "0.5.0", "last_generated_at": now, "status": "initialized", "language": lang, "intent_path": ".artic/intent.json"} + state = {"artic_version": "0.6.0", "last_generated_at": now, "status": "initialized", "language": lang, "intent_path": ".artic/intent.json"} write(root / ".artic" / "intent.json", json.dumps(intent, indent=2, ensure_ascii=False) + "\n") write(root / ".artic" / "brief.json", json.dumps(brief, indent=2, ensure_ascii=False) + "\n") diff --git a/plugins/codex-artic/skills/artic/scripts/artic_start.py b/plugins/codex-artic/skills/artic/scripts/artic_start.py index e4cb2bb..d5bf190 100644 --- a/plugins/codex-artic/skills/artic/scripts/artic_start.py +++ b/plugins/codex-artic/skills/artic/scripts/artic_start.py @@ -393,7 +393,7 @@ def update_state(root: Path, brief: dict[str, Any]) -> None: state = loaded except json.JSONDecodeError: state = {} - state.update({"artic_version": str(brief.get("artic_version") or state.get("artic_version") or "0.5.0"), "last_generated_at": datetime.now(timezone.utc).isoformat(), "status": "generated", "language": brief_language(brief), "strategy_path": ".artic/strategy.json"}) + state.update({"artic_version": str(brief.get("artic_version") or state.get("artic_version") or "0.6.0"), "last_generated_at": datetime.now(timezone.utc).isoformat(), "status": "generated", "language": brief_language(brief), "strategy_path": ".artic/strategy.json"}) write(state_path, json.dumps(state, indent=2, ensure_ascii=False) + "\n") diff --git a/plugins/codex-artic/skills/artic/scripts/scaffold_artic_files.py b/plugins/codex-artic/skills/artic/scripts/scaffold_artic_files.py index dae725e..84296e7 100755 --- a/plugins/codex-artic/skills/artic/scripts/scaffold_artic_files.py +++ b/plugins/codex-artic/skills/artic/scripts/scaffold_artic_files.py @@ -100,7 +100,7 @@ def scaffold(root: Path, project_name: str, locale: str = "en-US") -> None: "forbidden_copy_elements": ["logos", "trademarks", "proprietary illustrations", "exact layouts", "source copywriting"], } brief = { - "artic_version": "0.5.0", + "artic_version": "0.6.0", "project": { "name": project_name, "type": "homepage", @@ -139,7 +139,7 @@ def scaffold(root: Path, project_name: str, locale: str = "en-US") -> None: ], "synthesis": "Clean SaaS hierarchy with token discipline and mobile-first accessibility.", } - state = {"artic_version": "0.5.0", "last_generated_at": now, "status": "scaffolded", "language": language, "intent_path": ".artic/intent.json", "strategy_path": ".artic/strategy.json"} + state = {"artic_version": "0.6.0", "last_generated_at": now, "status": "scaffolded", "language": language, "intent_path": ".artic/intent.json", "strategy_path": ".artic/strategy.json"} write(root / ".artic" / "intent.json", json.dumps(intent, indent=2, ensure_ascii=False) + "\n") write(root / ".artic" / "strategy.json", json.dumps(strategy, indent=2, ensure_ascii=False) + "\n") write(root / ".artic" / "brief.json", json.dumps(brief, indent=2, ensure_ascii=False) + "\n") diff --git a/pyproject.toml b/pyproject.toml index 93b4348..2c98767 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "artic" -version = "0.5.0" +version = "0.6.0" description = "Reference-driven AI-native design docs for homepage generation" readme = "README.md" requires-python = ">=3.9" diff --git a/skills/artic/SKILL.md b/skills/artic/SKILL.md index ef459ad..1bacef8 100644 --- a/skills/artic/SKILL.md +++ b/skills/artic/SKILL.md @@ -1,7 +1,7 @@ --- name: artic description: "Use when creating or improving a homepage/website and design rules are missing or weak. Artic is an agent design-direction protocol: @artic init interviews the user, @artic start authors strategy artifacts, then the compiler produces AI-native DESIGN.md docs from reusable reference principles." -version: 0.5.0 +version: 0.6.0 author: Hermes Agent license: MIT metadata: diff --git a/skills/artic/scripts/artic_init.py b/skills/artic/scripts/artic_init.py index e274c02..b786029 100644 --- a/skills/artic/scripts/artic_init.py +++ b/skills/artic/scripts/artic_init.py @@ -312,7 +312,7 @@ def create_init_outputs(root: Path, args: argparse.Namespace) -> dict: ] brief = { - "artic_version": "0.5.0", + "artic_version": "0.6.0", "project": { "name": normalized_project["name"], "type": "homepage", @@ -345,7 +345,7 @@ def create_init_outputs(root: Path, args: argparse.Namespace) -> dict: "source_plan": source_plan, "synthesis": "Use selected sources as compatible patterns; localize prose according to the brief language contract while preserving source names and protected terms.", } - state = {"artic_version": "0.5.0", "last_generated_at": now, "status": "initialized", "language": lang, "intent_path": ".artic/intent.json"} + state = {"artic_version": "0.6.0", "last_generated_at": now, "status": "initialized", "language": lang, "intent_path": ".artic/intent.json"} write(root / ".artic" / "intent.json", json.dumps(intent, indent=2, ensure_ascii=False) + "\n") write(root / ".artic" / "brief.json", json.dumps(brief, indent=2, ensure_ascii=False) + "\n") diff --git a/skills/artic/scripts/artic_start.py b/skills/artic/scripts/artic_start.py index e4cb2bb..d5bf190 100644 --- a/skills/artic/scripts/artic_start.py +++ b/skills/artic/scripts/artic_start.py @@ -393,7 +393,7 @@ def update_state(root: Path, brief: dict[str, Any]) -> None: state = loaded except json.JSONDecodeError: state = {} - state.update({"artic_version": str(brief.get("artic_version") or state.get("artic_version") or "0.5.0"), "last_generated_at": datetime.now(timezone.utc).isoformat(), "status": "generated", "language": brief_language(brief), "strategy_path": ".artic/strategy.json"}) + state.update({"artic_version": str(brief.get("artic_version") or state.get("artic_version") or "0.6.0"), "last_generated_at": datetime.now(timezone.utc).isoformat(), "status": "generated", "language": brief_language(brief), "strategy_path": ".artic/strategy.json"}) write(state_path, json.dumps(state, indent=2, ensure_ascii=False) + "\n") diff --git a/skills/artic/scripts/scaffold_artic_files.py b/skills/artic/scripts/scaffold_artic_files.py index dae725e..84296e7 100755 --- a/skills/artic/scripts/scaffold_artic_files.py +++ b/skills/artic/scripts/scaffold_artic_files.py @@ -100,7 +100,7 @@ def scaffold(root: Path, project_name: str, locale: str = "en-US") -> None: "forbidden_copy_elements": ["logos", "trademarks", "proprietary illustrations", "exact layouts", "source copywriting"], } brief = { - "artic_version": "0.5.0", + "artic_version": "0.6.0", "project": { "name": project_name, "type": "homepage", @@ -139,7 +139,7 @@ def scaffold(root: Path, project_name: str, locale: str = "en-US") -> None: ], "synthesis": "Clean SaaS hierarchy with token discipline and mobile-first accessibility.", } - state = {"artic_version": "0.5.0", "last_generated_at": now, "status": "scaffolded", "language": language, "intent_path": ".artic/intent.json", "strategy_path": ".artic/strategy.json"} + state = {"artic_version": "0.6.0", "last_generated_at": now, "status": "scaffolded", "language": language, "intent_path": ".artic/intent.json", "strategy_path": ".artic/strategy.json"} write(root / ".artic" / "intent.json", json.dumps(intent, indent=2, ensure_ascii=False) + "\n") write(root / ".artic" / "strategy.json", json.dumps(strategy, indent=2, ensure_ascii=False) + "\n") write(root / ".artic" / "brief.json", json.dumps(brief, indent=2, ensure_ascii=False) + "\n") diff --git a/tests/test_artic_package.py b/tests/test_artic_package.py index 47f7712..3c61b73 100644 --- a/tests/test_artic_package.py +++ b/tests/test_artic_package.py @@ -215,7 +215,7 @@ def test_readmes_document_version_and_update_commands(): def test_active_files_do_not_keep_previous_release_version_literals(): - previous_literals = ("0.4.1", "v0.4.1") + previous_literals = ("0.5.0", "v0.5.0") checked_roots = [ ROOT / "README.md", ROOT / "README.ko.md",