Trisolaris offline-voice fullflow skill for `D:\revolution4s\Trisolaris`. Use when the task needs to read requirement docs, analyze function points, write the test plan, generate or refresh formal Excel test cases, burn firmware with the local burn wrappers, validate behavior through `COM36`/`COM38`/`COM39`, drive the specified playback device, and sync evidence/reports for the CSK5062 xiaodu-fan workflow.
Resources
4Install
npx skillscat add zjashanda/trisolaris Install via the SkillsCat registry.
Trisolaris
Use this skill to execute the current Trisolaris offline-voice workflow end to end inside D:\revolution4s\Trisolaris.
Start Here
- Read repo-root
plan.mdfirst. Create it if missing. - Follow repo
AGENTS.md: after each meaningful step, sync done / in-progress / pending items back toplan.md. - Read
references/repo-workflow.mdbefore choosing the next action. - Read
references/evidence-rules.mdbefore judging protocol, playback, persistence, PASS/FAIL/BLOCKED, or manual-only items.
What this skill can own
This skill is the orchestration layer for the whole flow:
- read requirement inputs
- decompose function points
- write or refresh the test plan
- write or refresh the formal Excel cases
- burn firmware through the local bundle rule
- run validation on the fixed serial ports
- drive the specified playback device
- collect evidence under
result/ - sync conclusions into
plan.mdand deliverables
Independence boundary
Treat the skill as self-contained for workflow knowledge and decision rules, not as a single-file executable that can run without project resources.
It still requires these external runtime inputs:
- the current Trisolaris repo
- requirement documents and target firmware
- burn bundle/toolchain
- serial devices on
COM36/COM38/COM39 - the target playback device when audio validation is needed
Do not depend on another skill such as mars-moon for the main flow. Use mars-moon only as an optional idea source when a brand-new feature needs decomposition hints.
Fallback rule when repo scripts are missing
Prefer repo-local tools when they exist because they match the project conventions:
tools/burn_bundle/run_fan_burn.ps1tools/burn_bundle/run_fan_burn.shtools/cases/generate_formal_assets.pytools/cases/export_case_md_to_xlsx.pytools/debug/run_post_restructure_fullflow.pytools/debug/run_timeout_volume_probe.pytools/debug/generate_detailed_bundle_report.pytools/audio/fan_dual_capture.pytools/serial/fan_protocol_probe.pytools/audio/sync_listenai_play.pytools/audio/listenai-play/scripts/listenai_play.pytools/audio/listenai-play/scripts/install_laid_windows.ps1tools/audio/listenai-play/scripts/install_laid_linux.sh
If one of them is missing or stale, continue with shell/Python directly instead of declaring the flow blocked too early, as long as the local burn bundle, firmware, ports, and evidence path are still available.
Core Inputs
Treat the requirement directory as input-only. Keep it clean.
Typical inputs are:
- requirement markdown
- terms/phrase Excel
tone.h- voice-registration Excel
- optional
algo res/ - target firmware
.bin - later user clarifications that override ambiguous document text
If the user clarified behavior after the documents were written, use the latest user clarification as project truth and sync that understanding into the plan, cases, and reports.
Main Outputs
Write stable outputs outside the requirement directory:
- test plan:
deliverables/csk5062_xiaodu_fan/plan/ - formal cases:
deliverables/csk5062_xiaodu_fan/cases/ - reports:
deliverables/csk5062_xiaodu_fan/reports/ - raw execution evidence:
result/<timestamp_case_name>/ - supporting references:
references/voice_registration/
Use Markdown for plan/design/report documents. Use Excel for the formal case table.
Report-writing rules:
- Markdown reports must use Chinese headings/body text.
- Prefer a Windows-friendly encoding such as
UTF-8 with BOMfor user-facing Markdown deliverables. - The detailed report default filename should stay consistent with the project convention, for example
测试报告-详细.md. - Detailed reports must not only expand FAIL items; they must include a clear structure for PASS, FAIL,
待人工, and阻塞.
Workflow
1. Parse the requirements into testable function points
Extract these explicitly:
- default state and power-on behavior
- entry actions and exit conditions
- state changes and post-state behavior
- persistence rules and reboot expectations
- registration rules and conflict boundaries
- protocol hooks and tone/log clues
Treat functional correctness as the primary judgment. Treat protocol, playback, and logs as supporting evidence unless the case is specifically about protocol behavior.
2. Build or refresh the test plan
Write or update the test plan under deliverables/csk5062_xiaodu_fan/plan/.
Prefer the repo generation chain when refreshing the static assets:
tools/cases/generate_formal_assets.pyto refresh the plan / formal case markdown sourcetools/cases/export_case_md_to_xlsx.pyto export the formal Excel case table
For each feature, capture:
- what the feature does
- how to test it
- what counts as PASS
- how to write negative cases
- how to write abnormal scenarios
Do not stop at single-point validation. Add cross-validation where the feature changes state, such as wake-word switching, voice on/off, or registration results affecting later normal interaction.
3. Build or refresh the formal test cases
Maintain the formal case set in Excel under deliverables/csk5062_xiaodu_fan/cases/.
Rules:
- MD is for plan/design/reporting; formal cases live in Excel.
- One case should answer one question whenever possible.
- Use
PASS,FAIL,BLOCKED, andTODOhonestly. - A
FAILis valid when the case exposes a firmware defect; do not force every case to pass. - Keep the case fields explicit: module, test point, preconditions, steps, primary assertion, supporting assertion, status, evidence.
4. Burn firmware with the local burn wrappers
Always use the repo-local burn entry scripts. Follow the fixed burn rule exactly:
- run
tools/burn_bundle/run_fan_burn.ps1on Windows ortools/burn_bundle/run_fan_burn.shon Linux - let the wrapper delete the previously staged local
app.bininsidetools/burn_bundle/ - let the wrapper copy the target firmware into the local
burn_bundlestaging area and rename it toapp.bin - inspect burn success markers in the local logs
- confirm the running version from the
COM38boot log
Keep tools/burn_bundle/ as the synced local tool payload, but do not bypass the wrapper to call the inner bundle script directly. Also do not burn directly from an arbitrary source path. If the burn logs and the running version do not both match, stop and resolve burn closure first.
5. Normalize the device baseline when needed
After burn or after heavy registration testing, normalize the device state before the next batch when appropriate, for example with config.clear and reboot. Keep the normalization evidence in result/.
6. Run the mandatory testability gate first
Every firmware run must start with a gate after burn and version confirmation.
Minimum gate requirements:
- no reboot loop during the startup observation window
- the default wake word can wake the device
- a normal non-volume command can complete one basic interaction
- first-boot default volume is captured immediately after burn from the first startup config
If the gate fails, stop the fullflow immediately and report the firmware as untestable. Do not continue into the main case batch and do not force later cases into fake PASS/FAIL conclusions.
7. Execute validation serially
Use repo tools or the direct shell/Python fallback instead of ad-hoc manual steps.
Execution rules:
COM36protocol,COM38burn/log, andCOM39power/boot are the fixed current ports.- Do not run
COM36/COM38capture batches in parallel. - Keep serial actions strictly sequential.
- When sending consecutive voice materials, wait for the previous response to finish; if a clean finish signal is not detected, use the project wait window rather than a hard-coded 5 s assumption.
- Use the specified playback device key when the task requires controlled audio playback.
- If
tools/audio/listenai-playis missing, sync it intotools/audio/first. If local playback tooling already exists but the latest cloud version is required, use the update parameter before execution. - Do not rely on hearing as the formal evidence source.
8. Validate parameters with the corrected assertion logic
When a case is about requirement parameters, use the project-approved measurement method instead of a shortcut:
- wake timeout:
- pure wake case: measure from wake-response playback end to
TIME_OUT/MODE=0 - wake-plus-command case: measure from command-response playback end to
TIME_OUT/MODE=0 - only accept the timeout conclusion when both paths are close enough to each other and to the requirement target
- pure wake case: measure from wake-response playback end to
- volume step count:
- anchor at minimum and maximum boundaries first
- climb from minimum to maximum one step at a time
- descend from maximum to minimum one step at a time
- use runtime
mini player set vollevels to build the actual step ladder - require min->max and max->min to be symmetric before judging the step count as valid
- default volume:
- judge it from the first boot after burn, not after later volume cases have already modified the state
- persistence:
- follow the live requirement meaning dynamically
- for save-required items, confirm save completion before power loss
- for non-save-required items, compare the rebooted state against the requirement default
9. Judge results carefully
Use the evidence rules in the reference file. In short:
- protocol proof comes from
COM36raw capture - recognition / playback / save / boot clues come from
COM38 - power-cycle proof comes from
COM39plus the follow-up boot/behavior evidence - persistence cannot be claimed before save completion is observed
- manual-only items should stay manual instead of being force-closed automatically
10. Sync evidence and conclusions
After each batch:
- store raw artifacts in
result/ - update
plan.md - sync the current truth into the Excel case file and reports
- when generating detailed reports, keep the structure complete: summary table, PASS details, FAIL analysis, and
待人工/阻塞sections - call out verified items, real defects, blocked items, and manual-only items separately
- clean invalid or empty result directories caused by port contention so they do not pollute formal evidence
Done Criteria
Treat the fullflow as closed-loop only when all of these are true:
- requirement points are decomposed
- the test plan reflects the latest clarifications
- formal Excel cases exist
- burn and version confirmation are closed-loop
- real device validations exist under
result/ - conclusions are synced to
plan.mdand the deliverables - defects, blocked items, and manual-only items are separated clearly