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
65 changes: 63 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -156,11 +156,12 @@ jobs:
version="${RELEASE_TAG#v}"
asset_dir="${PRODUCT_NAME}-${TARGET}-v${version}"
doc_dir="dist/${asset_dir}/share/doc/${PRODUCT_NAME}"
mkdir -p "dist/${asset_dir}/bin" "$doc_dir"
mkdir -p "dist/${asset_dir}/bin" "$doc_dir" "dist/${asset_dir}/share/${PRODUCT_NAME}"
cp "target/${TARGET}/release/csgraph" "dist/${asset_dir}/bin/"
cp "target/${TARGET}/release/code-system-graph-hooks" "dist/${asset_dir}/bin/"
cp LICENSE NOTICE THIRD_PARTY_NOTICES.md README.md SECURITY.md "$doc_dir/"
cp -R docs "$doc_dir/"
cp -R crates/code-system-graph-hooks/agent-integration-template "dist/${asset_dir}/share/${PRODUCT_NAME}/"
cp scripts/install.sh scripts/uninstall.sh "dist/${asset_dir}/"
tar -C dist -czf "dist/${asset_dir}.tgz" "${asset_dir}"
rm -rf "dist/${asset_dir}"
Expand All @@ -185,11 +186,13 @@ jobs:
$assetDir = "$env:PRODUCT_NAME-$env:TARGET-v$version"
$binDir = "dist\$assetDir\bin"
$docDir = "dist\$assetDir\share\doc\$env:PRODUCT_NAME"
New-Item -ItemType Directory -Path $binDir, $docDir -Force
$shareDir = "dist\$assetDir\share\$env:PRODUCT_NAME"
New-Item -ItemType Directory -Path $binDir, $docDir, $shareDir -Force
Copy-Item "target\$env:TARGET\release\csgraph.exe" $binDir
Copy-Item "target\$env:TARGET\release\code-system-graph-hooks.exe" $binDir
Copy-Item LICENSE, NOTICE, THIRD_PARTY_NOTICES.md, README.md, SECURITY.md $docDir
Copy-Item docs "$docDir\docs" -Recurse
Copy-Item crates\code-system-graph-hooks\agent-integration-template "$shareDir\agent-integration-template" -Recurse
Compress-Archive -Path "dist\$assetDir" -DestinationPath "dist\$assetDir.zip" -Force
Remove-Item "dist\$assetDir" -Recurse -Force

Expand All @@ -209,6 +212,64 @@ jobs:
if (-not (Test-Path (Join-Path $binDir "code-system-graph-hooks.exe"))) {
throw "code-system-graph-hooks.exe is missing from the archive"
}
$template = Join-Path $extracted "$assetDir\share\$env:PRODUCT_NAME\agent-integration-template\agent-plugin\plugin.json"
if (-not (Test-Path $template)) {
throw "agent-integration-template is missing from the archive"
}
@(
"mcp.json",
"generated.gitignore",
"metadata\skill-description.txt",
"metadata\openai-display-name.txt",
"metadata\openai-default-prompt.txt",
"skills\code-system-graph\SKILL.md",
"skills\code-system-graph\references\operating-guide.md"
) | ForEach-Object {
$templateFile = Join-Path (Split-Path -Parent $template) $_
if (-not (Test-Path $templateFile)) {
throw "agent-integration-template is missing agent-plugin\$_"
}
}
if (-not (Test-Path (Join-Path (Split-Path -Parent (Split-Path -Parent $template)) "native-hooks\strict-gate.sh"))) {
throw "agent-integration-template is missing native-hooks\strict-gate.sh"
}
$smoke = Join-Path $env:RUNNER_TEMP "code-system-graph-plugin-smoke"
New-Item -ItemType Directory -Path (Join-Path $smoke "repo\src") -Force
Set-Content -Path (Join-Path $smoke "repo\src\lib.rs") -Value "pub fn smoke() {}"
Set-Content -Path (Join-Path $smoke "code-system-graph.yaml") -Value @"
version: 1
name: release-plugin-smoke
repos:
app:
path: repo
"@
$csgraph = Join-Path $binDir "csgraph.exe"
& $csgraph scan --config (Join-Path $smoke "code-system-graph.yaml") --database (Join-Path $smoke "graph.db") | Out-Null
& $csgraph plugin create --output (Join-Path $smoke "plugin") --config (Join-Path $smoke "code-system-graph.yaml") --database (Join-Path $smoke "graph.db") | Out-Null
if (-not (Test-Path (Join-Path $smoke "plugin\plugin.json"))) {
throw "generated plugin is missing plugin.json"
}
if (-not (Test-Path (Join-Path $smoke "plugin\.gitignore"))) {
throw "generated portable plugin is missing .gitignore"
}
if (-not (Test-Path (Join-Path $smoke "plugin\.local\code-system-graph\mcp-binding.json"))) {
throw "generated portable plugin is missing its local binding"
}
if (Get-ChildItem (Join-Path $smoke "plugin") -File -Recurse | Select-String -Pattern '\{\{[A-Z0-9_]+\}\}' -Quiet) {
throw "generated plugin contains an unresolved template variable"
}
$base = Join-Path $smoke "base-plugin"
New-Item -ItemType Directory -Path (Join-Path $base ".codex-plugin") -Force | Out-Null
New-Item -ItemType Directory -Path (Join-Path $base "skills\release-system-graph") -Force | Out-Null
Set-Content -Path (Join-Path $base "plugin.json") -Value '{"name":"release-base","version":"1.0.0","description":"Release smoke base"}'
Set-Content -Path (Join-Path $base "mcp.json") -Value '{"mcpServers":{"release-code-system-graph":{"type":"stdio","command":"csgraph","args":["mcp","--binding","${PLUGIN_ROOT}/.local/code-system-graph/mcp-binding.json"],"env":{"CODE_SYSTEM_GRAPH_MCP_ADMIN":"0"}}}}'
Set-Content -Path (Join-Path $base ".codex-plugin\plugin.json") -Value '{"name":"release-base","version":"1.0.0","mcpServers":{"release-code-system-graph":{"type":"stdio","command":"csgraph","args":["mcp","--binding","${PLUGIN_ROOT}/.local/code-system-graph/mcp-binding.json"],"env":{"CODE_SYSTEM_GRAPH_MCP_ADMIN":"0"}}}}'
Set-Content -Path (Join-Path $base ".gitignore") -Value '/.local/'
Set-Content -Path (Join-Path $base "skills\release-system-graph\SKILL.md") -Value "---`nname: release-system-graph`ndescription: Release smoke routing skill.`n---"
& $csgraph plugin create --output $base --mcp-server-name release-code-system-graph --routing-skill release-system-graph --config (Join-Path $smoke "code-system-graph.yaml") --database (Join-Path $smoke "graph.db") | Out-Null
if (-not (Test-Path (Join-Path $base ".local\code-system-graph\mcp-binding.json"))) {
throw "local MCP binding is missing"
}

- name: Upload release asset
uses: actions/upload-artifact@v7
Expand Down
41 changes: 41 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,47 @@
All notable public changes to Code System Graph are documented in this file. Code System Graph follows Semantic
Versioning.

## [1.0.3] - 2026-08-09

### Added

- Added `executionPolicy.maxCodeGraphCorroborationAnchorsPerRepo`, retaining the 50-anchor default
while supporting smaller positive limits and explicit `-1` unlimited mode.
- Added opt-in per-repository `useGitignore` with workspace-over-local precedence, nested Git rule
semantics, observable configuration origins, and shared native, OpenAPI, and watch discovery.
Watched workspaces now reload ignore matchers and directory watches after enabled `.gitignore`
files change.
- Added `csgraph plugin create` and a versioned Agent Plugins 1.0.0 template for generating portable
read-only MCP packages with stable clone-independent identities, YAML-safe workspace metadata,
workspace-verifying routing guidance, and an ignored developer-local runtime binding.
- Added existing-plugin composition mode, `csgraph plugin uninstall`, and `csgraph mcp --binding`.
Managed MCP entries, routing skills, receipts, and local bindings can be installed and removed
without changing unrelated plugin components; modified or unowned content is never deleted. New
local bindings and receipts record the generating `csgraph` version, exact executable
fingerprint, and build-time source commit/dirty state when available.
- Complete plugins generate one client-neutral Agent Skill. Existing Codex plugins additionally
receive optional UI metadata in `agents/openai.yaml`; portable-only plugins do not. Every managed
skill file is validated and owned by the integration receipt.
- Native Claude Code, Codex, and Gemini prompt hooks now act only as intent-based skill selectors;
the packaged Agent Skill remains the single detailed MCP procedure. Cursor and Antigravity
project rules are documented as fallbacks when their clients cannot load that skill.
- Consolidated the portable Agent Plugin, canonical skill, native classifier signals, dynamic hook
guidance, static fallback rules, strict gate, and host-facing text under one visible
`agent-integration-template/` tree; Rust no longer carries editable routing prose or shell bodies.
- Reduced Agent Skill and hook prompt noise with task-oriented tool selection, progressive loading
of maintenance guidance, and narrower English and Spanish routing signals that ignore generic
coding prompts.
- Plugin creation and binding failures now preserve the standard CLI exit classifications for
invalid input, missing paths, conflicts, and internal failures.

### Release engineering

- Added schema validation, idempotency and conflict coverage, Unicode and space-path coverage,
YAML-frontmatter validation, stable exit-code coverage, local-binding ownership checks, MCP
handshakes for complete and existing-plugin profiles, and watched `.gitignore` reload coverage.
- Included the complete versioned Agent integration template tree in Unix and Windows release
archives and smoke validation.

## [1.0.2] - 2026-08-05

### Performance and reliability
Expand Down
Loading