skills/srs-develop/SKILL.md
Code and documents are the only truth. Issue descriptions may be inaccurate. Pull requests may be misleading. Feature descriptions may be insufficient. Always ground your understanding in the actual source code and project documentation. Documents capture design intent, architecture rationale, and complex background that code alone cannot express — they are another form of code. When code and documents conflict, investigate rather than assume one is wrong.
⚠️ MANDATORY — Always execute this step first. Never skip the Task Router. Never jump directly to a task. Every request must be routed through this table before any work begins.
Route the user's request to exactly ONE task type. Follow that task only. Do not combine tasks.
| Task | When | Route To | Status |
|---|---|---|---|
| Develop Code | User wants to add, modify, refactor code, or update docs — any planned change | → Develop Code | ✅ Supported |
| Fix a Bug | User reports something broken, unexpected behavior, or an error | → Fix a Bug | ❌ Not yet supported |
| Learn Code | User wants to understand how code works — no changes intended | → Learn Code | ❌ Not yet supported |
| Review a PR | User wants to review an existing pull request | → Review a PR | ✅ Supported |
If the routed task is not yet supported, stop and tell the user:
Do NOT attempt unsupported tasks.
Prerequisite: You must arrive here via the Task Router. Do not execute this task directly — always complete the Task Router first to confirm this is the correct task type.
Not yet supported. Will be added in a future update.
Prerequisite: You must arrive here via the Task Router. Do not execute this task directly — always complete the Task Router first to confirm this is the correct task type.
Not yet supported. Will be added in a future update.
Prerequisite: You must arrive here via the Task Router. Do not execute this task directly — always complete the Task Router first to confirm this is the correct task type.
Scope: Walk the pending changes on the current branch (relative to develop), summarize them, sync any stale navigation docs, then bump the version and add a changelog entry once the user supplies the PR number.
Guiding rules
git add on your own. After each step, stop and wait for the user to review and stage the files they approve. Only run git commit when they say so.Step 1: Survey the changes
git diff develop --stat and git log develop..HEAD --oneline to get the shape of the branch.git diff develop -- <path> to understand what actually changed.Step 2: Correct stale navigation docs
.openclaw/memory/srs-codebase-map.md for entries covering any module touched in this PR.git add the files they accept, commit with a short message in the existing style, e.g. Claude: Sync srs-codebase-map with internal/<modules>..Step 3: Bump the version and update the changelog
internal/version/version.go — VersionRevision()trunk/src/core/srs_core_version7.hpp — VERSION_REVISIONtrunk/doc/CHANGELOG.md under ## SRS 7.0 Changelog, matching the existing format:
* v7.0, YYYY-MM-DD, Merge [#PR](URL): <Prefix>: <one-line summary>. v7.0.<rev> (#PR)
git add the version files and changelog, commit with a short message like Proxy: Bump to v7.0.<rev> for #<PR>..Prerequisite: You must arrive here via the Task Router. Do not execute this task directly — always complete the Task Router first to confirm this is the correct task type.
Scope: This task covers any planned code or documentation change — adding new features, modifying existing functionality, refactoring code, and updating documentation.
Important: The C++ media server (origin + edge) is in maintenance mode — only bug fixes are accepted, no new features. All new feature development happens in the next-generation Go server. You may reference the C++ server's code to understand how things were done before, but do not add features to it.
Service Router — Determine which Go service the feature targets. Route to exactly ONE service. Do not guess — if unclear, ask the user to clarify.
| Service | Route To | Status |
|---|---|---|
| Proxy server | → Proxy Server | ✅ Supported |
| Origin server | → Origin Server | ❌ Not yet supported |
| Edge server | → Edge Server | ❌ Not yet supported |
If the routed service is not yet supported, stop and tell the user:
The proxy server is a complex, growing product — not a small app. It has many modules, and more will be added over time. You cannot load all the code into context at once. The key to working on it is routing to the correct module first.
Step 1: Module Routing (MANDATORY)
memory/srs-codebase-map.md — both the Next-Generation Server Code section (code modules: cmd/ + internal/) and the Next-Generation Server Docs section (documentation: docs/proxy/).Only after the user confirms the routing do you proceed to Step 2.
Step 2: Understand the Module
Step 3: Implement and Verify
//go:generate go tool counterfeiter ... directive, regenerate fakes:
make generate
bash scripts/proxy-utest.sh --coverage
bash scripts/proxy-e2e-test.sh
bash scripts/proxy-e2e-cluster-test.sh
mode remote registered with the proxy + one upstream SRS origin, publishes RTMP via proxy→edge→origin, then plays the same stream with two concurrent RTMP players where the second joins after a delay as a late joiner on the active edge-pull):bash scripts/proxy-e2e-edge-test.sh
bash scripts/proxy-e2e-redis-test.sh
bash scripts/proxy-e2e-transmux-test.sh
scripts/setup-ffmpeg-with-whip.sh to build one into ~/.local/ if no SRT-capable ffmpeg is found:bash scripts/proxy-e2e-srt-test.sh
whip muxer (built with --enable-openssl); the script auto-runs scripts/setup-ffmpeg-with-whip.sh if no suitable ffmpeg is found:bash scripts/proxy-e2e-whip-test.sh
All script paths are relative to this skill's directory.
Not yet supported. This refers to the next-generation Go origin server workflow. The first-generation C++ origin server still exists, but it is in maintenance mode and only bug fixes are accepted there.
Not yet supported. Will be added in a future update.