eMuleBB Development Guide¶
This guide is the practical entry point for internal contributors and operators who make routine documentation updates and light code changes in the canonical workspace. Workspace Policy remains the authority for branch, worktree, build, test, release, and documentation rules. AI contributors should start with the Agent Checklist for the repeatable end-to-end operating path.
Contributor Model¶
Routine work happens on main in the relevant repo. App source edits belong in
EMULE_WORKSPACE_ROOT\workspaces\workspace\app\emulebb-main; the canonical
EMULE_WORKSPACE_ROOT\repos\emulebb checkout is the branch-store anchor, not the
normal edit location.
Use EMULE_WORKSPACE_ROOT style paths in maintained documentation and scripts.
Avoid machine-specific absolute paths in active docs.
The product line is eMule broadband edition, compactly eMuleBB. The first
public beta release line is 0.7.3; release tags use
emulebb-vMAJOR.MINOR.PATCH, and package assets use
emulebb-MAJOR.MINOR.PATCH-ARCH.zip.
Start Every Change¶
Before editing:
- Read Workspace Policy.
- Check
git status --short --branchin every repo that will be read for current-state decisions or edited. - Confirm whether the change is docs-only, backlog/docs metadata, light code, build orchestration, test harness, website, or org-profile work.
- Keep one coherent outcome per commit.
- Use current docs and source as truth, not historical handoff notes.
Where To Edit¶
| Change type | Primary location | Notes |
|---|---|---|
| Workspace policy | docs\WORKSPACE-POLICY.md |
Mandatory rules only; avoid workflow prose here. |
| Agent repeatability | docs\reference\AGENT-CHECKLIST.md |
End-to-end checklist for AI contributors. |
| Documentation taxonomy | docs\DOCS-POLICY.md |
Naming, nav, table, and docs-structure rules. |
| Contributor workflow | docs\reference\DEVELOPMENT-GUIDE.md |
Practical checklists for routine work. |
| Backlog process | docs\reference\BACKLOG-PROCESS.md |
Repeatable backlog mechanics and item lifecycle. |
| Active release/status docs | docs\active\... |
Current release, roadmap, and item state. |
| Product/user guides | docs\reference\GUIDE-*.md |
User-facing behavior after source and evidence agree. |
| REST docs | docs\rest\... |
Contract, adapter, and parity documentation. |
| App code | workspaces\workspace\app\emulebb-main |
Do not edit repos\emulebb for routine app work. |
| Build orchestration | repos\emulebb-build |
Use supported orchestration entry points. |
Supported Commands¶
Run workspace build, validation, test, live-test, and packaging work through
repos\emulebb-build orchestration:
cd $env:EMULE_WORKSPACE_ROOT\repos\emulebb-build
python -m emule_workspace validate
Do not run ad hoc direct MSBuild from the app worktree, srchybrid, or
repos\emulebb-build-tests.
Every app code change must rebuild both active x64 app configurations before commit:
python -m emule_workspace build app --variant main --config Debug --platform x64 --build-output-mode ErrorsOnly
python -m emule_workspace build app --variant main --config Release --platform x64 --build-output-mode ErrorsOnly
Documentation-only changes do not require an app build when they do not alter the build contract.
Markdown To HTML Publishing¶
Markdown in repos\emulebb-tooling\docs is the maintained source for the public
documentation site. MkDocs Material renders that Markdown to HTML at
https://emulebb.github.io/emulebb-tooling/.
Use this repeatable path when product, reference, release, REST, or policy docs need to be published as formatted HTML:
- Edit the owning Markdown source under
docs\. - Keep links and navigation current in
docs\INDEX.mdandmkdocs.ymlwhen adding or moving discoverable pages. - Run the local publish gate:
powershell
cd $env:EMULE_WORKSPACE_ROOT\repos\emulebb-tooling
python scripts\docs-publish-check.py
- Commit and push the Markdown source. The
Documentation SiteGitHub Actions workflow builds the same MkDocs site frommainand deploys the HTML to GitHub Pages.
Generated MkDocs output belongs under .local\mkdocs-site and must not be
committed. The static product homepage in repos\emulebb-pages is separate:
update it only after the source Markdown is current, then regenerate its
committed HTML through that repo's Jinja renderer.
Docs-Only Checklist¶
Use this for Markdown-only changes that do not alter build, source, release packaging, or API behavior.
- Read the policy and check repo status.
- Update the owning document, not a parallel note.
- Keep workspace-wide rules in policy and workflow instructions in guides.
- Use uppercase hyphen naming for non-item Markdown files.
- Keep broad tables readable in the browser; prefer short tables or existing MkDocs CSS behavior for unavoidable wide tables.
- Update
docs\INDEX.md,mkdocs.yml, or README links when discoverability changes. - Run:
cd $env:EMULE_WORKSPACE_ROOT\repos\emulebb-tooling
git diff --check
python scripts\docs-publish-check.py
Run python scripts\docs-item-taxonomy-check.py when active items, backlog
metadata, active indexes, or taxonomy status counts change.
Backlog And Roadmap Checklist¶
Use this when adding, moving, closing, or reclassifying backlog work.
- Start from Backlog Process.
- Revalidate the item against current
main, dependency pins, and workspace policy before implementation. - For GitHub-migrated future-roadmap work, treat the linked issue and public
eMuleBB Roadmapproject as workflow authority. - Keep local item docs as engineering specs and evidence, not workflow status
authority, when
workflow: githubis present. - Update active indexes and counts together with item metadata.
- Run the item taxonomy check before commit.
Light Code Checklist¶
Use this for small source, helper, or test-harness changes.
- Read the policy and check repo status in each touched repo.
- Make the smallest compatibility-preserving change that solves the issue.
- Prefer existing project helpers, platform APIs, or pinned dependencies over new custom parsing, encoding, path, crypto, protocol, date/time, compression, or structured-data logic.
- Keep app source edits in
workspaces\workspace\app\emulebb-main. - Update docs only when behavior, workflow, command-line surface, REST surface, or validation expectations change.
- Run
python -m emule_workspace validate. - For app code, run both required x64 app builds.
- Add targeted tests or evidence for the changed surface.
Evidence By Changed Surface¶
| Changed surface | Minimum evidence expectation |
|---|---|
| Docs-only or policy-only | git diff --check, docs structure check, MkDocs strict build |
| Active item metadata | Docs-only checks plus item taxonomy check |
| App code | Workspace validation plus both x64 app builds required by policy |
| Command-line parser | Parser seam/native coverage and guide updates |
| VPN or bind policy | Bind-resolution coverage, diagnostics review, and network-guide updates |
| UPnP or NAT mapping | Backend-selection coverage, failure-path diagnostics, and network/preference docs |
| REST/controller behavior | REST/OpenAPI drift checks, malformed/concurrent request coverage, and controller guide updates |
| Build or dependency policy | Full relevant build/validation matrix |
Do not cite hosted CI as a replacement for local release proof. Hosted CI is a fast baseline signal; live network, UI/resource, protocol parity, and package proof remain explicit release-campaign evidence.
CI And GitHub Checks¶
Shared baseline CI is owned by emulebb-tooling:
- reusable workflow:
.github/workflows/reusable-baseline.yml - stable ref:
ci/v8 - required check names:
baseline / baseline (windows-2022)baseline / baseline (windows-2025-vs2026)
Long-lived consumer branches should use the stable CI ref, not @main, and
must pass the same immutable tooling_ref into the reusable workflow.
Command-Line Surface¶
The app command line is part of the product contract and should stay documented when parser behavior changes:
emulebb.exe [options] [ed2k-link|magnet-link|collection-file|command]
Supported options:
| Option | Behavior |
|---|---|
--help, -h, /? |
Print command-line usage and exit |
-c <base-dir> |
Use an isolated eMule base directory; the path must be an absolute canonical Windows path |
-ignoreinstances |
Start without the running-instance guard unless the positional argument must be forwarded to an existing instance |
-AutoStart |
Mark the session as automatic startup |
-assertfile |
In Debug builds, write CRT assertion output to a file |
--generate-webserver-cert |
Generate a WebServer TLS certificate and exit |
--cert <path> |
Certificate output path for --generate-webserver-cert |
--key <path> |
Private-key output path for --generate-webserver-cert |
--host <dns-or-ip> |
Subject alternative name for generated certificate; repeatable |
Only one positional argument is supported. It may be an ed2k link, magnet
link, collection file, or command such as exit.
Parser contract:
- singleton options must not be repeated
-crequires an absolute canonical Windows path--generate-webserver-certrequires--certand--key--cert,--key, and--hostare valid only with--generate-webserver-cert--hostis repeatable for certificate subject alternative names- certificate generation does not accept a positional argument
- unknown options and invalid option values are command-line errors
Product Guide Refresh¶
Run a product-guide refresh when source behavior, command-line behavior, REST/controller behavior, network policy, packaging status, or product messaging changes.
- Start from policy and current active docs.
- Re-scan source truth before changing product claims.
- Update the product guide first, then focused guides that own the affected workflow.
- Update public touchpoints only when discoverability or external claims change.
- Keep claims bounded to shipped and evidenced behavior.
- Do not describe open, deferred, exploratory, or future backlog work as shipped.
- Do not publish release-package claims before package evidence exists.
- Validate as a docs-only slice unless the refresh is coupled to code changes.
For release campaign, package publication, provenance, and tagging operations, use the active release checklist and runbook instead of this guide.
Commit And Push¶
- Keep one coherent outcome per commit.
- Do not bundle unrelated docs, source, dependency, and release changes.
- Commit and push each completed slice before starting the next unrelated slice unless the user explicitly asks to hold local commits.
- Include tracked item IDs in feature, bug, refactor, and CI backlog commits.
- Record skipped validation with a concrete reason in the handoff or review notes.