chore(skills): CLAUDE.md prompt-rule compliance + script-first onboarding design#236
Open
coseto6125 wants to merge 11 commits into
Open
chore(skills): CLAUDE.md prompt-rule compliance + script-first onboarding design#236coseto6125 wants to merge 11 commits into
coseto6125 wants to merge 11 commits into
Conversation
64f8345 to
42b0bd4
Compare
coseto6125
added a commit
that referenced
this pull request
May 21, 2026
Branch protection requires Code Quality / Test×3 / Supply-chain / Lint Actions workflows to report success on every PR. `paths-ignore` skipped the whole workflow on docs-only PRs — those required checks then never reported success and the PR sat in `BLOCKED` forever (PRs #236, #278). Drop the path-filter on both push and pull_request triggers. The cost on a real docs-only PR is bounded by the cargo build cache; the first PR after a Cargo.lock change pays the full cost but subsequent ones hit the warm cache. This is cheaper than maintaining a synthetic skip-job that pretends success — and it gives docs PRs the same correctness guarantee as code PRs (no chance of an inadvertent code change sneaking into a "chore(docs)" PR and skipping CI, the original #226 hazard the paths-ignore comment alluded to). The `.github/workflows/*` change in this same PR triggers CI on #278 itself, unblocking the doc-restoration commit that landed alongside it.
coseto6125
added a commit
that referenced
this pull request
May 21, 2026
* docs(plans): restore symbol-graph-core-roadmap from session jsonl The original 51 KB / 822-line roadmap draft was authored in a worktree that was subsequently deleted before its branch was pushed to origin. The branch was then pruned from local refs and `git fsck`'d dangling commits don't contain the file — the doc was effectively lost from git history. Reconstructed by replaying the original Write tool call (line 1087 of the session jsonl, 38 KB base body) plus 23 of 24 subsequent Edits captured in the same session. One Edit was skipped because its old_string was already absent at restore time — almost certainly a hunk that was reverted later in the same session. Added a single restoration-note callout + a status snapshot table mapping each T-task to its shipped / in-flight / pending state and PR number. The body itself is verbatim from the reconstruction; nothing was rewritten, only the metadata block at the top was changed to flag the restoration. Source jsonl (referenced for provenance; not committed): ~/.claude/projects/-home-enor-code-graph-nexus--claude-worktrees-rename-cgn-to-ecp/9289733a-d3f9-4333-88f0-42190a9e88df.jsonl This makes the roadmap an actual repo artefact again so future agents (and the remaining ~50 pending T-tasks) have the design rationale, the D1-D7 decision log, and the dependency graph available without having to scrape session logs. * ci: drop paths-ignore so required checks always report Branch protection requires Code Quality / Test×3 / Supply-chain / Lint Actions workflows to report success on every PR. `paths-ignore` skipped the whole workflow on docs-only PRs — those required checks then never reported success and the PR sat in `BLOCKED` forever (PRs #236, #278). Drop the path-filter on both push and pull_request triggers. The cost on a real docs-only PR is bounded by the cargo build cache; the first PR after a Cargo.lock change pays the full cost but subsequent ones hit the warm cache. This is cheaper than maintaining a synthetic skip-job that pretends success — and it gives docs PRs the same correctness guarantee as code PRs (no chance of an inadvertent code change sneaking into a "chore(docs)" PR and skipping CI, the original #226 hazard the paths-ignore comment alluded to). The `.github/workflows/*` change in this same PR triggers CI on #278 itself, unblocking the doc-restoration commit that landed alongside it.
3 tasks
coseto6125
added a commit
that referenced
this pull request
May 21, 2026
…deadlock) (#287) * ci: short-circuit heavy jobs on docs-only PRs (preserve required-check semantics) Adds a `detect-changes` job that classifies PR changes via shell-based git diff against `github.base_ref`. Downstream code-quality / test / audit jobs gate every heavy step on `needs.detect-changes.outputs.code == 'true'` but still RUN as jobs — so branch protection's required-check list keeps seeing SUCCESS on docs-only PRs (e.g. #286 roadmap refresh) instead of burning ~10 min × 3 OS on cargo nextest + ~2 min on audit/deny. Why not paths-ignore? paths-ignore skips the whole workflow → required checks never report → docs-only PRs stuck `BLOCKED` (the #236 / #278 deadlock). Why not job-level `if: false` for docs? Same problem: SKIPPED ≠ SUCCESS for branch protection's required list. Why this design (step-level `if:`)? Job-level execution stays unconditional (SUCCESS reports), but the heavy steps short-circuit when `code != true`. Each job's first step prints a visible "✓ Docs-only PR — skipping ..." log line so it's obvious in the Actions UI what happened. Code-relevant path classification (positive list — anything else is treated as docs/config/license-only): crates/ Cargo.toml Cargo.lock .github/ scripts/ rust-toolchain* deny.toml clippy.toml rustfmt.toml `actionlint` keeps running unconditionally — it lints the workflow YAML itself (always present), and the ~30s cost is negligible. Push-to-main events always default to `code=true` regardless of detected paths (merge commits must get full validation). * ci: fix actionlint SC2001 (replace sed with while loop)
coseto6125
added a commit
that referenced
this pull request
May 21, 2026
… sync (#296) * ci: short-circuit heavy jobs on docs-only PRs (preserve required-check semantics) Adds a `detect-changes` job that classifies PR changes via shell-based git diff against `github.base_ref`. Downstream code-quality / test / audit jobs gate every heavy step on `needs.detect-changes.outputs.code == 'true'` but still RUN as jobs — so branch protection's required-check list keeps seeing SUCCESS on docs-only PRs (e.g. #286 roadmap refresh) instead of burning ~10 min × 3 OS on cargo nextest + ~2 min on audit/deny. Why not paths-ignore? paths-ignore skips the whole workflow → required checks never report → docs-only PRs stuck `BLOCKED` (the #236 / #278 deadlock). Why not job-level `if: false` for docs? Same problem: SKIPPED ≠ SUCCESS for branch protection's required list. Why this design (step-level `if:`)? Job-level execution stays unconditional (SUCCESS reports), but the heavy steps short-circuit when `code != true`. Each job's first step prints a visible "✓ Docs-only PR — skipping ..." log line so it's obvious in the Actions UI what happened. Code-relevant path classification (positive list — anything else is treated as docs/config/license-only): crates/ Cargo.toml Cargo.lock .github/ scripts/ rust-toolchain* deny.toml clippy.toml rustfmt.toml `actionlint` keeps running unconditionally — it lints the workflow YAML itself (always present), and the ~30s cost is negligible. Push-to-main events always default to `code=true` regardless of detected paths (merge commits must get full validation). * ci: fix actionlint SC2001 (replace sed with while loop) * fix(builder, rename): simplify memory allocs and correct collision index sync
claude/simplify still referenced the retired `gnx` binary and the non-existent `gnx scan` / `gnx search` commands. codex/simplify was already modernized for the `ecp review` aggregator (impact + coverage + tool-map + shape-check + diff in one call). Mirror that content into the Claude variant so both stay in sync. After this change `skill_sample/` has zero `cgn / gnx / code-graph-nexus` residue, and the two simplify variants are byte-identical.
… design
Two changes bundled because both touch the ecp + ecp-onboard skill
prompts and both were flagged in the same review:
1) CLAUDE.md prompt-writing guide compliance:
- skill_sample/claude/SKILL.md: reorder "Decisions" before "Tool
selection" (abstract rules first); rewrite "Never find-replace"
and "don't add :Method filter" as positive instructions; remove
non-existent `ecp scan` rows; fix factual errors in title /
cache path / default graph / `ecp find --mode` description.
- docs/skills/ecp-onboard/SKILL.md & ONBOARDING.md & guides/04-mcp.md
& guides/05-summary.md: collapse the duplicate "Hard don't list"
into Directives; rewrite each negative phrase as a positive
instruction; dedupe the "never silently retry" rule that appeared
in both Directives and the Hard list.
2) Script-first onboarding design (raised by reviewer):
- Directive 5 now states the wizard never edits IDE config files
directly; scriptable IDEs (claude / codex / gemini) flow through
`ecp admin <agent> install <component>`; unscriptable IDEs
(Cursor / Zed / VS Code) get a paste snippet, not an auto-write.
- Phase 04 Step 4 records `mode: scripted` vs `paste-snippet` per
IDE; Phase 04 Step 5 confirms the Phase 05 plan (specific
commands + specific paste targets) before any apply.
- Phase 05 Step 4 ("Write MCP configs" → "Apply IDE integrations")
replaces the `jq` direct-write with the per-agent install call;
summary template entries reflect "ran command" vs "emitted
snippet" instead of "wrote file".
- Directive 1 strengthened: before any apply step, restate exact
files / paths the action will touch and wait for confirmation.
Also fixes a pre-existing end-of-file corruption in ONBOARDING.md +
guides/05-summary.md (an extra "rwrite the summary)" line + dangling
code fence) and updates obsolete `_shared/cli/<version>/admin-index.md`
references to the flat `_shared/cli/admin-index.md` layout that
actually exists on disk.
Linux / macOS / Windows badges link to the GitHub releases page (all
three are real targets in release.yml: x86_64-linux, aarch64-linux,
x86_64-apple-darwin, aarch64-apple-darwin, x86_64-pc-windows-msvc).
Agent badges link to the relevant skill / install doc:
- Claude Code → skill_sample/claude/SKILL.md
- Codex CLI → skill_sample/codex/ecp/SKILL.md
- Cursor → docs/skills/ecp-onboard/guides/04-mcp.md
(MCP paste-snippet flow; no scripted installer yet)
Mirrored the badge block into docs/readme_i18n/README_zh-TW.md to keep
the two READMEs in sync.
Trust signals (Scorecard, Star History) go above compatibility shields — matches the convention in most security-conscious READMEs and makes the security score the first thing readers see.
Star History is a community/social signal — render it as a full-size chart in a dedicated `## Star History` section at the end of the README rather than as a small badge at the top. Trust signal (OpenSSF Scorecard) stays at the top alone.
Hero, sectioning, and tone reworked to match the "CLI for agents"
identity instead of the generic SaaS-emoji README template.
Visual:
- ASCII box hero with the tool's positioning + the 4 numbers that
actually matter (cold index / query p50 / languages / edge policy)
- Section headers reframed as `── name ──` instead of emoji prefixes
- Hero metric card immediately below badges; trust signal (Scorecard)
isolated above platform/agent compatibility badges
Content:
- Mission rewritten as 4 punch-line bullets (stateless / honest /
token-cheap / polyglot) instead of long paragraphs
- Added "30-second demo" section showing a real `ecp impact` TOON
output — the README finally has a show-don't-tell anchor
- "vs. upstream gitnexus" kept visible (positioning) but scalability
sub-tables collapsed into <details> (reference, not pitch)
- CLI surface: agent commands stay visible (value prop); admin
commands collapsed
- Codex CLI native integration (50+ niche lines) collapsed into
<details>; the agent-facing scripted path (`ecp admin <agent>
install`) stays in the MCP server section
- License paragraph slimmed; the 9-dep acknowledgments list
collapsed into <details>
zh-TW README rewritten in lockstep so the two stay structurally
identical. Internal links audited — all point to real files.
… / pt-BR)
The English README at repo root remains the source of truth; each
translation mirrors its section structure 1-for-1. ASCII hero box,
badges, metrics card, command names, flag names, JSON snippets, and
table numbers stay identical across all locales.
New files:
docs/readme_i18n/README_zh-CN.md (Simplified Chinese, derived
from zh-TW via opencc tw2sp)
docs/readme_i18n/README_es.md (Spanish)
docs/readme_i18n/README_ru.md (Russian)
docs/readme_i18n/README_ja.md (Japanese — です/ます polite form)
docs/readme_i18n/README_ko.md (Korean — 합니다 polite form)
docs/readme_i18n/README_pt-BR.md (Brazilian Portuguese)
docs/readme_i18n/README_hi.md (Hindi — Devanagari prose around
English technical terms)
docs/readme_i18n/CONTRIBUTING.md (guide for contributing
translations + quality bar +
add/remove-locale flow)
Picker: every README now has a language-switcher line right under the
metrics block, with the current locale shown bolded (no link) and the
other 8 linked. All relative paths verified against the actual file
layout (../../README.md from translations, ./README_xx.md between
translations, ./docs/readme_i18n/README_xx.md from root English).
Quality note: zh-CN / zh-TW / es / ru / pt-BR / ja / ko are
near-native-fluent. Hindi is best-effort with technical terminology
kept in English (Devanagari for technical CLI/library names is awkward
and not standardized in the Indian dev community). Native-speaker
review PRs welcome — the new CONTRIBUTING.md explains the flow.
The previous brutalist redesign violated CLAUDE.md's priority order
('Signal density — every byte of output costs context window. No
prose, no UI cruft.' / 'When perf and prettiness conflict, perf wins.').
Hero had 7 visual blocks before any content; section headers carried
'── name ──' decoration that added bytes without information.
Tightenings applied uniformly across the English source + 8 translations:
- Drop the 6-line ASCII box hero — H1 already names the project.
- Inline the 4-line metric card as a single backtick string:
`cold index 2.60 s · query p50 142 ms · 31 languages · BlindSpot
edges (no hallucinated dispatch) · 60× upstream gitnexus`
- Strip `## ── name ──` decoration on every section header → plain
`## name`. Saves ~80 bytes per file across 13 headers.
- Strip inter-section `---` HRs. Keep only two boundary HRs (hero →
content and content → Star History) per file. GitHub's `##`
rendering provides the visual separation already.
- Replace the synthetic `validateUser` demo with a real ecp symbol:
`parse_with_budget` (crates/ecp-analyzer/src/parse_budget.rs:28).
The actual 22-language polyglot fan-out — every per-language
`parser.rs` calls into the budget primitive — is the value prop
ecp is selling, so showing it instead of a fabricated auth example
honours the 'Never fabricate' principle from CLAUDE.md and gives
readers a real signal of polyglot reach.
Result: -366 lines total (264 in / 630 out) across 9 files. English
README 377 → 307; each translation 377 → 340.
The Phase 1 rename moved codex/cgn → codex/ecp but inadvertently dropped claude/cgn without porting. This restores the claude-side sample by porting cgn/SKILL.md → ecp/SKILL.md with command/flag references updated to current ecp surface, frontmatter name/description rewritten, and layout aligned with the layered structure used by codex/ecp/SKILL.md (Directive layer + Tool Selection table). Changes: - Frontmatter: name cgn → ecp, description updated to reference ecp - All commands: cgn → ecp - Flag updates: --direction upstream → --direction up (current ecp) - Removed: scan command (no longer in ecp) - Paths: ~/.cgn/ → ~/.ecp/, code-graph-nexus-rs → egent-code-plexus - Structure: added Layer 1/2/3 hierarchy from codex/ecp pattern
…CP snippets - README.md + zh-TW: add manual mcp.json snippet block for Cursor / Windsurf / Cline (the three hosts without scripted installer). Per-IDE config path table inside <details>. - skill_sample/claude/ecp/SKILL.md: refresh NodeKind / RelType lists to cover schema additions on origin/main since the branch diverged — EnumVariant, PathLiteral, TransactionScope, Annotation, Struct/Enum/Trait /Impl/Namespace/Module/SchemaField/EventTopic node kinds + Decorates / OpensTxScope / UsesPathLiteral / MirrorsField / Publishes / Subscribes / EventTopicMirror / Overrides rel types.
d75685d to
a4ed2ad
Compare
Bump workspace package + all 4 crates + intra-workspace path-dep pins
+ Cargo.lock from 0.3.0 to 0.4.0 in preparation for the v0.4.0 tag.
Versions touched:
- workspace.package.version (Cargo.toml)
- ecp-core, ecp-analyzer, ecp-cli per-crate versions
- ecp-mcp inherits via workspace.version
- intra-workspace path-deps: ecp-analyzer -> ecp-core,
ecp-cli -> {ecp-core, ecp-analyzer, ecp-mcp}
Scope of v0.4.0 (covered in the release notes when the tag is cut):
49 commits between v0.3.0 (PR #330 close-out) and this PR — cypher
perf wins (Accumulator + predicate pushdown + kind-CSR + walk_rel
closure + Binding VarMap), MCP host distribution paths (#395),
GitHub-native auto-merge replaces Mergify (#401), `ecp insight`
telemetry, `ecp dev pr-analyze`, schema-bindings rollouts,
benchmark realign with hot-path query coverage, and the RTK-style
skill rewrite landed in PR #419.
This was referenced May 24, 2026
coseto6125
added a commit
that referenced
this pull request
May 25, 2026
Rewrite the main README around a single positioning — a code-intelligence graph built for AI agents, not humans. New hero (tagline + stat badges + language switcher), a three-failure-mode opening (token waste / broken refactors / hallucinated deps) distilled into a problem→answer table, and design principles tied to mechanisms (mmap, rkyv, BlindSpot). All benchmark numbers, CLI surface, and the honest release-status caveat are preserved. Add full i18n parity with PR #236's language set: zh-TW (rewritten), plus new zh-CN, ja, ko, es, pt-BR, ru, hi under docs/readme_i18n/. Each carries the 8-language switcher, correct ../ / ../../ relative link targets, localized number formats where idiomatic (pt-BR 22.645 / 2,6 s), and identical structure to the English source. Final English version selected by iterating 20 variants across 5 design routes, then ranking with 10 evaluation passes (hook / scannability / credibility / differentiation / fact-check / link-integrity / visual / completeness / newcomer-conversion / holistic). Winner: balanced-hybrid v20. The query-latency figure is unified to <175 ms (the measured 174.2 ms worst case) across hero, badge, and the vs-GitNexus table — fixing the prior <170/<150 ms mismatch.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two related fixes to the ecp + ecp-onboard skill prompts:
1. CLAUDE.md prompt-writing guide compliance
skill_sample/claude/simplify/SKILL.mdmirrored from the moderncodex/simplify(already used theecp reviewaggregator); the Claude variant still referenced the retiredgnxbinary and non-existentgnx scan/gnx search. After this change, both simplify variants are byte-identical.skill_sample/claude/SKILL.md:Never find-replaceanddon't add :Method filteras positive instructions.ecp scanrows (command never shipped).egent-code-plexus-rs→egent-code-plexus); cache path (~/.ecp/<repo-name>__<hash>/); default graph (.ecp/graph.bin);ecp findmode description (defaultexact, not auto-picked).docs/skills/ecp-onboard/{SKILL,ONBOARDING,guides/04-mcp,guides/05-summary}.md:each rule appears exactly once).Never X/Do not Xas a positive instruction.never silently retrywhich appeared in both Directives and Hard list.2. Script-first onboarding design (
ecp admin <agent> install)The current onboarding had the wizard write IDE config files directly via
jq/cat. The CLI already has scriptable installers (ecp admin claude install,ecp admin codex install,ecp admin gemini install) that handle every write + merge + backup. The wizard now:ecp admin <agent> install <component>. Unscriptable IDEs (Cursor / Zed / VS Code) get a paste snippet, not an auto-write.mode: scriptedvspaste-snippetper IDE.Write MCP configs→Apply IDE integrations) replaces thejqdirect-write with the per-agent install call. Summary template entries reflect "ran command" vs "emitted snippet".3. Drive-by fixes
ONBOARDING.md+guides/05-summary.md(rwrite the summary)line + dangling code fence)._shared/cli/<version>/admin-index.mdreferences updated to the flat_shared/cli/admin-index.mdlayout that exists on disk.Test plan
grep -rE 'cgn |gnx|code-graph-nexus' skill_sample/ docs/skills/returns nothing (one legitimate registry dir-name hit excluded)grep -rE 'jq .*mcpServers|cat > .target.|cp .*\.mcp\.json' docs/skills/ skill_sample/returns nothing — no direct config-file writes remaingrep -rE 'MUST NOT' docs/skills/ skill_sample/returns nothing — negative phrasing replacedgrep -rE 'Hard "don' docs/skills/ skill_sample/returns nothing — duplicate list removeddiff skill_sample/claude/simplify/SKILL.md skill_sample/codex/simplify/SKILL.mdis emptyecp admin claude/codex/gemini install --helpconfirms the new directives reference real commandsecp find --helpconfirms--mode exact|fuzzy|bm25(defaultexact) — matches the rewritten Tool-selection rowecp scan --helperrors (command was never shipped) — matches the removal ofecp scanrows