원클릭으로
xdr-eval
Audit a crate for raw byte arrays that should use rs-stellar-xdr types
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Audit a crate for raw byte arrays that should use rs-stellar-xdr types
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
One tick of a CI watchdog — check main-branch GHA status; spawn an agent to fix if failing and no investigation is in flight.
One tick of the henyey mainnet monitor — checks, metrics scan, deploy, status report
Continuous always-on orchestrator for the henyey project pipeline. Each pass queries the board, central-picks up to N actionable issues by priority, and fans out parallel foreground specialist sub-agents (triage/plan/do/review-pr) with the right Claude model per stage. Owns concurrency, conflict-avoidance, CI pipelining, sibling-nit consolidation, and a self-reflection pass that files pipeline-improvement issues. Replaces scripts/project-tick-loop.sh. Use when the operator asks to "run the loop", "process the board continuously", or "keep the pipeline going".
Single-pick dispatcher primitive for the henyey project pipeline. One tick = pick one actionable issue from the project board and dispatch the right specialist sub-agent for its current state. Used for manual single picks and `--issue=` recovery; the continuous orchestrator is `/project-loop`, which owns concurrency centrally. Use when the user asks to "run a tick", "pick up an issue", or "process one board item".
Run two parallel adversarial PR reviewers and combine their verdicts with external PR reviews (GH Copilot bot, humans, other bots) and CI state into a merge decision. Agent reviewers post structured comment verdicts (since the agent is the PR author and cannot self-approve via GH native review). External CHANGES_REQUESTED reviews block merge identically to agent CHANGES_REQUESTED. Operates on issues in `in-review`. Auto-merges with --admin on all-green (after filing follow-up issues for unaddressed inline review comments, so non-critical feedback is preserved as backlog instead of dropped); bounces to `ready-for-doing` on any request-changes or CI red; blocks after 3 bounce-backs on the same code state. At the lifetime cap (6 bounces since last `## Review: Reset`) the PR enters **force-converge mode**: if CI is green, the PR auto-merges and unresolved reviewer concerns become follow-up issues; only red/pending CI at the cap still blocks. Use when invoked by /project-tick with an issue in in-review, or manuall
Audit a Rust crate's adherence to its Stellar protocol spec (spec-driven, walks every normative claim)
| name | xdr-eval |
| description | Audit a crate for raw byte arrays that should use rs-stellar-xdr types |
| argument-hint | <crate-path> [--apply] |
Parse $ARGUMENTS:
$TARGET with it.--apply is present, set $MODE = apply. Otherwise set $MODE = review.Audit the Rust crate at $TARGET to find places where rs-stellar-xdr
(stellar_xdr::curr) types should be used instead of custom types, raw byte
arrays, or conversion boilerplate.
The codebase should prefer types from rs-stellar-xdr over defining new
types that duplicate them. Every custom wrapper or raw [u8; N] that stands
in for an XDR type adds cognitive overhead and conversion boilerplate.
Exceptions exist (see Legitimate Uses below), but each must be justified.
$MODE = review (default): Produce a ranked list of findings with
file:line references. Do NOT make any changes.$MODE = apply: Perform the replacements directly. For each change,
briefly state what you changed and why. Run cargo clippy -p <crate> and
cargo test -p <crate> after each logical group of changes to verify
correctness.For each finding, classify it into exactly one category:
[u8; 32] used where Hash, AccountId, NodeId, PoolId, or
ClaimableBalanceId would be appropriate. Common symptoms:
HashMap<[u8; 32], ...> or HashSet<[u8; 32]> where the bytes represent
a known XDR type.EntryStore<[u8; 32], ...> key type parameters.[u8; 32] that are populated from .0 access on an
XDR wrapper.account_id_to_bytes() or hash_to_key() that
extract .0 for map lookups.A custom struct Foo([u8; 32]) or struct Foo(pub [u8; N]) that is
functionally identical to an existing XDR type. Look for:
From / Into impls between the wrapper and the XDR type.A locally defined enum whose variants correspond 1:1 (or nearly so) to an
XDR enum, with conversion impls between them. For example, a custom
AssetKey that decomposes TrustLineAsset into raw byte fields.
From<XdrType> for CustomType and the reverse, where the custom type could
be eliminated entirely. Count the number of conversion impl blocks as a
measure of the overhead.
The same conversion logic (e.g., AccountId to [u8; 32]) defined in
multiple places across the crate or workspace. List all locations.
The following are acceptable and should not be reported:
ed25519_dalek / x25519_dalek
primitives (e.g., PublicKey, SecretKey, Signature in crates/crypto)
that add signing/verification behavior. These wrap crypto library types,
not XDR types.(AccountId, TrustLineAsset)) are fine — the concern is
when those components are decomposed into raw bytes.use stellar_xdr::curr::* statements
and the XDR types actually used in the crate.[u8; 32], [u8; 4],
[u8; 12], [u8; 56] in struct fields, type aliases, and generic
parameters. For each, determine whether an XDR type exists for that data.From/Into impls to XDR types.From/Into impls to XDR
enum types.*_to_bytes,
*_to_key, *_from_bytes, or that contain .0 access on XDR types
for the purpose of key extraction.$TARGET/src/ (production and test code).stellar-core/.crates/
workspace.Rank findings by impact:
Per finding:
### [RANK]. [CATEGORY] — one-line summary
- **Location**: file:line (and file:line if duplicated)
- **Current**: what the code does now
- **Proposed**: the XDR type that should replace it
- **Impact**: number of call sites / conversions that would be eliminated
- **Effort**: Low / Medium / High — estimated difficulty of the replacement
End with a summary table:
## Summary
| Category | Count | High | Medium | Low |
|----------|-------|------|--------|-----|
| RAW_BYTES | ... | ... | ... | ... |
| WRAPPER_TYPE | ... | ... | ... | ... |
| MIRROR_ENUM | ... | ... | ... | ... |
| CONVERSION_BOILERPLATE | ... | ... | ... | ... |
| DUPLICATE_HELPER | ... | ... | ... | ... |
When $MODE = apply:
[u8; 32] to Hash), update all
associated code: the collection type, insertion sites, lookup sites, and
remove the now-unnecessary conversion helpers.cargo clippy -p <crate> and
cargo test -p <crate>.