Repository navigation
Add a new scenario: firmware-update-failure #138
Description
Good First Issue
Add a new scenario firmware-update-failure. The FIRMWARE_UPDATE_FAILURE
detection rule has no scenario covering it. #133 adds the successful firmware
path, so this is the failing counterpart.
What to do
- Create
packages/toolkit/src/scenarios/__scenarios__/firmware-update-failure.ts - Build a synthetic trace of a firmware update that fails to install:
BootNotificationat2026-01-15T07:00:00.000Z, and itsCallResultwith
interval: 300FirmwareStatusNotificationwith{ status: 'Downloading' }at
07:00:30.000Z, and itsCallResultFirmwareStatusNotificationwith{ status: 'InstallFailed' }at
07:01:00.000Z, and itsCallResultHeartbeatat07:02:00.000Z, and itsCallResult
- Set
expectedFailures: ['FIRMWARE_UPDATE_FAILURE'] - Add an assertion, for example
{ type: 'failure_count', params: { code: 'FIRMWARE_UPDATE_FAILURE', min: 1 } } - Import and register in
packages/toolkit/src/scenarios/index.ts - Update the scenario count and name list, see "Files to modify"
- Add a changeset with
pnpm changeset, minor bump for@ocpp-debugkit/toolkit
Which statuses count as a failure
The rule treats exactly four FirmwareStatusNotification statuses as failures:
DownloadFailed, DownloadPaused, InstallFailed, InstallRebootingFailed.
Downloading, Downloaded, Installing and Installed are all clean. The
scenario needs one of the four, and InstallFailed is the most representative.
Keep the whole trace inside five minutes of the boot. Past that, the heartbeat
rule starts looking for a Heartbeat and you would trip a second, unrelated
failure.
Files to modify
packages/toolkit/src/scenarios/__scenarios__/firmware-update-failure.ts(new)packages/toolkit/src/scenarios/index.ts(register, and add toscenarioNames)packages/toolkit/src/scenarios/index.test.ts(count, name order,getScenario)tests/external-fixture/test.mjs(count)README.md(count)packages/toolkit/README.md(count).changeset/(new changeset file)
Guidelines
- All data must be synthetic. This scenario reserves station ID
CS-SYNTHETIC-019, so please use that one. - Follow the pattern in an existing scenario file,
diagnostics-failure.tsis
the closest match since it covers the equivalent rule for diagnostics. - Verify with
ocpp-debugkit scenario run firmware-update-failurethat
FIRMWARE_UPDATE_FAILUREis the only failure reported. If another rule fires,
adjust the trace rather than adding the extra code toexpectedFailures. - Then run the full local check from
Verify Locally.
ocpp-debugkit cicovers neither formatting nor lint nor types, and CI stops at
the first failure. - The scenario count depends on what has merged ahead of you. Run the suite and
use the number it reports rather than assuming.
How to claim
Comment "I'd like to work on this" and it will be assigned to you.
Please hold one open claim at a time. Once the pull request for it is merged,
say which issue you want next and it will be assigned. That keeps issues from
sitting claimed while another is still in review, so other newcomers can see
what is genuinely free.
Activity
chore: size scenario changesets as patch, not minor (#143)
YANGCHUNHONG3000 commentedon Jul 29, 2026
I'd like to work on this
docs: require a scenario for every detection rule (#148)
docs: bring CURRENT_STATE up to date with 0.4.4 and today's work (#150)
docs: move the Current Version paragraph to 0.4.6 (#168)