원클릭으로
edgion-skills
Root navigation for the Edgion knowledge base. Read this first, then drill into the relevant subtree.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Root navigation for the Edgion knowledge base. Read this first, then drill into the relevant subtree.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | edgion-skills |
| description | Root navigation for the Edgion knowledge base. Read this first, then drill into the relevant subtree. |
Kubernetes gateway built on Rust + Pingora + Gateway API. Controller–Gateway separation with gRPC config sync. Supports HTTP/1.1, HTTP/2, gRPC, TCP, UDP, TLS, WebSocket, and includes a plugin system, load balancing, and TLS/mTLS.
01-architecture/02-features/03-coding/*.skill — invokable workflow with a step-numbered structure. Must carry YAML frontmatter (name:, description:). Loaded as a slash command or by name (see ~/.claude/commands/fix-issue.md for a working example).SKILL.md — directory entry point. Routes to sub-files; not invoked directly.*.md — reference or decision-rule document. Loaded on demand by an upstream skill via "first read X" hints.<workflow>_<role>.md shape (e.g., new_feature_work_flow_templates.md); they are referenced from the parent .skill and not loaded independently.| What you want to learn | Direct entry |
|---|---|
| System architecture — relationship between the four Controller/Gateway/Center/Ctl binaries, internal modules, development guides | 01-architecture/SKILL.md |
| Binary startup and deployment — CLI arguments, deployment modes | 02-features/01-binary-and-deployment/ |
| Config Schema — Controller (YAML) / Gateway (YAML) configuration | 02-features/02-config/ |
| Controller authentication & authorization — admin login, cli token RBAC, the (verb,kind) engine, middleware onion, default Center policy | 01-architecture/01-controller/11-authentication-authorization.md |
| Resource feature Schema — Gateway/Route/TLS/Plugin/Backend/LinkSys | 02-features/03-resources/ |
Webhook provider — backendRef target, request-templating allow-list (origin/custom + presence), consumer path_override API, secret resolution flow | 01-architecture/03-controller-gateway-link/webhook.md |
| Observability — Access Log, Metrics, protocol logs | 02-features/04-observability/ |
| Annotation reference — all edgion.io/* keys | 02-features/05-annotations/ |
| Coding conventions — log IDs, log safety, observability | 03-coding/SKILL.md |
Grouped-list design pattern — *_groups schema, rolling-upgrade serde, first-wins, group-in-ok-log iron rule | 01-architecture/00-common/04-grouped-list-pattern.md |
| Integration testing — architecture, running, adding test cases | 05-testing/01-integration-testing.md |
| Global review — security/correctness/observability checklists + closed false-positive entries | 10-fully-review/SKILL.md |
| User documentation conventions — writing conventions for authoring/reviewing docs/ documentation | 11-doc/SKILL.md |
| Pre-commit / local checks (fmt + check + clippy + check-agent-docs) | 09-misc/SKILL.md |
| GitHub Actions / Docker / Release — tag pushes, Docker images, release-notes files | 09-misc/cicd/02-github-workflow.md |
| Dev-deployment hot-swap — native image + shell loop + cross-compilation + kubectl cp | 09-misc/03-dev-deploy-hot-replace.md |
For finer-grained locators inside the architecture (Controller/Gateway/Link/resources/plugin development/route matching, etc.) see 01-architecture/SKILL.md.
Verbed entries for the most common developer workflows. The Quick locator above answers "where is X documented?"; this table answers "I want to do Y, where do I start?".
| Task | Entry point |
|---|---|
| Add a new resource type | 01-architecture/01-controller/09-add-new-resource/00-guide.md |
| Develop a new HTTP plugin | 01-architecture/02-gateway/12-edgion-plugin-dev.md |
| Develop a new Stream plugin | 01-architecture/02-gateway/13-stream-plugin-dev.md |
| Debug a runtime issue (404 / 421 / 502 / 503 / Unknown kind) | 06-tracing/00-debugging.md |
| Debug a Controller → Gateway sync issue | 01-architecture/03-controller-gateway-link/SKILL.md |
| Add a new edgion.io/* annotation | 02-features/05-annotations/00-annotations-overview.md |
| Run pre-commit / local checks (fmt + check + clippy + check-agent-docs) | 09-misc/SKILL.md |
| Review a PR (per-feature) | 04-review/SKILL.md |
| Run a global codebase review | 10-fully-review/SKILL.md |
| Symptom | Where |
|---|---|
Gateway logs Unknown kind after Controller restart | 01-architecture/01-controller/03-config-center/02-kubernetes/00-lifecycle.md |
| Routing returns 404 / 421 / 502 / 503 | 06-tracing/00-debugging.md |
Only "non-obvious, not visible from the code itself, and previously got wrong" constraints are listed here.
| Constraint | Location | Details |
|---|---|---|
| PluginConditions regex must be compiled in preparse | conditions/types.rs, edgion_plugins/mod.rs | compiled_regex is #[serde(skip)] and is None after deserialization. compile_conditions() must be invoked during the EdgionPlugins::preparse() phase to finish compilation, otherwise Regex::new() is triggered on every request. When adding a new condition type with a regex, also extend the match arm in Condition::compile(). See 05-plugin-system.md §Condition execution for details. |
| gRPC H2 grpc-status must be placed in trailers | Pingora H2 response path | Placing it in response headers causes tonic to return Internal(13); it must go in trailers. |
| Tracing is forbidden on the data-plane request/connection hot path | skills/03-coding/01-log-safety.md iron rule 3 | The request/connection processing path may only use access log / PluginLog / ctx.err_log / Metrics; any tracing:: macro (including debug!) is forbidden. Exceptions: configuration loading paths, process startup/shutdown, and access-log send failures in pg_logging.rs. Applies to plugin run_request / run_upstream_response / TLS proxy / stream proxy across the board. |
No PluginLog in the UpstreamResponseBodyFilter body phase | traits/upstream_response_body_filter.rs, conditions/evaluator.rs | The trait signature deliberately omits &mut PluginLog; the body phase is invoked once per chunk, and any heap allocation per chunk (PluginLog / String / Vec) accumulates as O(chunks×plugins). When adding a new body-phase filter / wrapper, do not write logs; condition evaluation should use the evaluate_sync_silent chain rather than evaluate_detail_sync, and ExtensionRef should go through resolve_runtime_silent. A long-stream memory leak (issue g2-001) was once introduced because ExtensionRef accidentally called start_edgion_plugins_log. See 05-plugin-system.md §No PluginLog in body phase for details. |
ConfHandler.partial_update MUST produce a real incremental diff, never merge-into-full-then-full-set | 01-architecture/02-gateway/11-conf-handler-guidelines.md:30 | The trait signature compiles a "merge + full rebuild" body, but doing so loses updates. If incremental is not yet implemented, mark with // TODO: incremental rebuild rather than emulating via full_set. |
| ConfHandler logs MUST NOT contain Secret / TLS resource bodies | 01-architecture/02-gateway/11-conf-handler-guidelines.md:52-54 | Logs may record metadata (key name, counts, affected scope) and error messages only. The full spec must never appear in any log line. |
Project-wide norms — not hard rules like the table above. Prefer these defaults; deviate with reason and document it.
plugin_log.push_err(...) on the data plane, tracing::warn!/error! on the control plane), not panic! / debug_assert!(false, ...) / unreachable!(). Exceptions: startup/init, exhaustive-match dead arms, data-corruption fail-fast. See 03-coding/02-rust-coding-rules.md §Rule 5. Cross-codebase audit: tasks/todo/graceful-degrade-audit.md.| # | Directory | Purpose |
|---|---|---|
| 01 | architecture/ | System architecture + development guides: Controller, Gateway, gRPC sync, resource processing, plugin/resource/connector development |
| 02 | features/ | Feature and configuration reference: binary deployment, configuration Schema, resource feature Schema, observability, annotations |
| 03 | coding/ | Coding conventions: log IDs, log safety, observability (Access Log / Metrics / Tracing) |
| 04 | review/ | Review notes: false-positive determinations, observability audits |
| 05 | testing/ | Testing: unit tests, integration tests, K8s tests, special-purpose tests |
| 06 | tracing/ | Debugging — symptom-to-tool guide: Admin API, edgion-cli, common runtime issues (not distributed tracing) |
| 07 | tasks/ | Task management: directory rules, templates, lifecycle phases, completion checklists |
| 08 | kubernetes/ | Kubernetes-related: Gateway API compatibility, API version upgrade strategy |
| 09 | misc/ | Miscellaneous (TLS troubleshooting, etc.) |
| 10 | fully-review/ | Global review guide: per-dimension checklists, security misjudgement rules, closed entries |
| 11 | 11-doc/ | User documentation conventions: directory layout, writing style, page templates, multilingual, version management, review checklist |
See 07-tasks/SKILL.md for the full lifecycle phase table (Analysis → Design → Implementation → Test → Review).
Located under docs/, organized by language (en, zh-CN). Directory-level README.md
files and docs/.vitepress/config.ts are the maintained navigation sources.
When authoring or reviewing user documentation, follow the writing conventions in 11-doc/SKILL.md.
Conventions shared by the in-repo binaries (edgion-controller, edgion-gateway, edgion-cli) — project overview, command line / directory / config-path conventions, Core layering conventions, resource system.
KubernetesCenter implementation — K8s Reflector watching, leader election, HA mode, ResourceController lifecycle, status writeback.
ConfigCenter subsystem — ConfCenter trait abstraction, FileSystemCenter and KubernetesCenter implementations, unified Workqueue + ResourceProcessor pipeline.
edgion-controller control plane architecture — overall design, startup/shutdown, Admin API, ConfigCenter, Workqueue, ResourceProcessor, Requeue, CacheServer, ACME service.
Route matching overview — multi-stage pipeline (Listener→Domain→Path→DeepMatch), per-listener isolation, registration flow, atomic swap.
TLS subsystem overview — TLS Store, SNI matching, certificate management, BoringSSL/OpenSSL backend selection.