Kevin L'Hereec
aa164fd47e
fix
2026-06-08 16:00:08 +02:00
ATX Bot
af7a22cb96
Consolidate branch_coverage.spec.ts into per-file specs: ExecutingCommands tests → executing_commands.spec.ts, TaskQueue tests → task_queue.spec.ts, StateMachineManager tests → state_machine_manager_extra.spec.ts. Deleted branch_coverage.spec.ts. All 799 tests pass. Build status: Success
2026-06-08 15:56:46 +02:00
ATX Bot
71c6e7e0e3
Add 17 branch coverage tests: ExecutingCommandsState (multi-command, GPN/SPV/SPA/Upload param formats, updateCommand error, includeNI=false), TaskQueue (callback error, clearPendingTasks, registerCallback), StateMachineManager (non-RUNNING paths, error handling, invalid JSON). All 799 tests pass. Build status: Success
2026-06-08 15:53:34 +02:00
ATX Bot
c8c7cb32b7
Increase device_action_executor.ts coverage to 94% stmts, 93% functions. Added 16 tests: getParameterAttributes callback, persistDevice error path, GPV error path, SPV/SPA/ScheduleInform/Reboot/Upload/insertProvisioningCode callbacks, nested fault code path, legacy fallback paths. All 782 tests pass. Build status: Success
2026-06-08 15:51:00 +02:00
ATX Bot
8a3fb3927d
Fix TS2339: add message property to makeContext return type in config_eval_extra.spec.ts. Build status: Success
2026-06-08 15:48:27 +02:00
ATX Bot
5146876714
Increase configuration_evaluation_state.ts coverage to 100% stmts/lines, 88% branches, 77% functions. Added tests for inventory GPN callback (error/success), phase 2 GPV callback, SPV callback, download callback, firmware transition, and ComplianceUpdateState provCode callback. All 766 tests pass. Build status: Success
2026-06-08 15:46:42 +02:00
ATX Bot
62daa7e05b
Add 4 more tests for configuration_evaluation_state.ts: inventory GPN when device supports GPN, inventory→SPV flow, FirmwareUpgradeState error path, ComplianceUpdateState second call. All 760 tests pass. Build status: Success
2026-06-08 15:40:14 +02:00
ATX Bot
090c70dc0b
Add 12 tests for ExecutingCommandsState covering all command types (GPV, SPV, GPN, Download, Reboot, FactoryReset, ScheduleInform, Refresh, unknown), success/failure response handling, SPV optimistic update, and operational transition. All 756 project tests pass. Build status: Success
2026-06-08 15:37:27 +02:00
ATX Bot
b4b423bab4
Fix merge conflict marker in state_machine_manager_coverage.spec.ts. All 158 cwmp tests pass. Build status: Success
2026-06-08 15:32:18 +02:00
ATX Bot
59efd00c85
Add 30 more coverage tests: ImmediateCommandStateMachine (4), StateMachineManager extra routes/lifecycle (14), MainStateMachine GPN flows + OperationalState + PartialOperationalState (6), ConfigEval inventory/diffs/FirmwareUpgrade/ComplianceUpdate (6). All 744 project tests pass. Build status: Success
2026-06-08 15:31:11 +02:00
Kevin L'Hereec and Continue
ef30c2159c
fix: isolate integration test databases to prevent parallel teardown conflicts
...
Each integration test file now uses its own MongoDB database:
- ttl_expiration → adam-acs-ttl-test
- device_model → adam-acs-devices-test
- base_model → adam-acs-basemodel-test
Prevents dropDatabase() in one afterAll from destroying data
used by another test file running concurrently.
Generated with [Continue](https://continue.dev )
Co-Authored-By: Continue <noreply@continue.dev >
2026-06-08 13:27:16 +00:00
Kevin L'Hereec and Continue
b3142a8272
fix: create collection before createIndex in TTL integration test
...
MongoDB throws 'ns does not exist' when calling indexes() on a collection
that has never had documents or been explicitly created. Added createCollection
if not already present before creating the TTL index.
Generated with [Continue](https://continue.dev )
Co-Authored-By: Continue <noreply@continue.dev >
2026-06-08 13:25:14 +00:00
Kevin L'Hereec and Continue
9f155c5ef4
fix: correct 2 failing tests
...
- state_machine_manager_coverage: remove duplicate assertion expecting 'idle',
state can legitimately be 'critical-reads' when gpnStatus=unsupported
- integration/device_model + ttl_expiration: add MongoDB connection guard
(skip tests when no local DB available, timeout 2s)
Generated with [Continue](https://continue.dev )
Co-Authored-By: Continue <noreply@continue.dev >
2026-06-08 13:23:31 +00:00
ATX Bot
5a6779662f
Add 47 coverage tests for state_machine_manager (16), configuration_engine (16), device_action_executor (15). Tests cover event routing, session management, preemption, continue/handleCWMPResponse, criteria matching, parameter diffs, GPN fault codes, SPV type resolution, provisioning code paths. Build status: Success (all 85 project tests pass)
2026-06-08 15:20:40 +02:00
Kevin L'Hereec
b0a3f52df7
fix
2026-06-08 15:15:24 +02:00
Kevin L'Hereec and Continue
ca24b469d3
fix: allow uppercase letters in configuration identifier regex
...
Previously /^[a-z0-9]+(-[a-z0-9]+)*$/ rejected identifiers like 'BM632w-standard'.
Updated to /^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$/ to allow mixed case.
Generated with [Continue](https://continue.dev )
Co-Authored-By: Continue <noreply@continue.dev >
2026-06-08 13:14:04 +00:00
Kevin L'Hereec and Continue
30211d278d
fix: map plural API keys (manufacturers/ouis/productClasses) to singular suggestion fields in CriteriaEditor and FirmwareCatalog forms
...
Generated with [Continue](https://continue.dev )
Co-Authored-By: Continue <noreply@continue.dev >
2026-06-08 13:07:43 +00:00
ATX Bot
5a4b884b09
Add unit tests for DeviceModel.distinctCriteriaValues (4 tests). Fix missing comma in package.json. Build status: Success
2026-06-08 13:01:19 +00:00
ATX Bot
23b5e33a6b
Implement DeviceModel.distinctCriteriaValues() — fixes 500 on /api/v1/devices/criteria-values. Uses MongoDB distinct() to get unique manufacturers, OUIs, productClasses from devices collection. Build status: Success
2026-06-08 13:01:19 +00:00
Kevin L'Hereec and Continue
aad93911e4
feat: TR-069 CWMP state machine hardening + exchange viewer improvements
...
- TR-069 CWMP state machine hardening (14 phases): shared event utility,
multi-event routing, GPN circuit breaker, IdleState GPN guard, expanded
GPN fault codes, CriticalReadsState, ConfigEval GPN guard, task queue
race condition fix, explicit error handling, terminal states
(OperationalState/PartialOperationalState), consolidated reclassify,
crash pattern detection, removed enqueueImmediate, state flow wiring
- Fix SOAP Fault not processed by state machine (soap-env:Fault detection)
- Fix GPN circuit breaker not persisting after session drops
- Fix CriticalReadsState GPV response parsing (xsi:type normalization)
- Fix CriticalReadsState not processing GPV response values
- Skip SPV when device is already compliant (ProvisioningCode check)
- Add Device.DeviceInfo.ModelName to critical reads GPV
- Fix TypeError on DeviceDetail parameters view (null guards)
- Log empty 204 responses in exchange trace UI
- TR-181 catalog: type corrections and new entries (+6640 lines)
- SequenceViewer: replace session-nav buttons with compact dropdown select
- SequenceViewer: fix CPE/ACS lifeline headers wrapping to 2 lines
- Add 20 unit tests for state machine fixes (SOAP Fault, GPN circuit
breaker, CriticalReads, stale session, ConfigEval/ComplianceUpdate skips)
Generated with [Continue](https://continue.dev )
Co-Authored-By: Continue <noreply@continue.dev >
2026-06-08 12:49:00 +00:00
Kevin L'Hereec
dabe15839d
fix: handle GPN Fault in DiscoveringParametersState
...
When the CPE responds with a CWMP Fault to GetParameterNames,
mark gpnStatus as 'unsupported' and continue to ConfigurationEvaluationState
instead of hanging the session.
2026-06-03 15:56:33 +02:00
Kevin L'Hereec
0c83a4ccb2
feat: TR-069 Exchange Viewer - structured MongoDB storage with SSE streaming and sequence diagram UI
...
- MongoDB storage: cwmp_exchanges collection with indexes (deviceId+timestamp, deviceId+sequenceNumber unique, TTL 24h)
- ExchangeStoreService: CWMP method extraction, per-device queue for ordering, retry logic, message cap (5000/device)
- Exchange API: GET/DELETE/SSE stream endpoints with Last-Event-ID reconnection
- CwmpLoggerMiddleware: dual-write (MongoDB + legacy files) with fire-and-forget
- Frontend: SequenceViewer (CPE↔ACS lifelines, arrows, auto-scroll, virtual scroll) + InspectorPanel (formatted XML, copy, syntax highlighting)
- Tr069Trace page: integrated new viewer with col-6/col-6 layout
- DeviceDetail page: collapsible exchange section when device is traced
- 14 property-based tests, 40+ unit tests, 5 integration tests
- Health check includes index verification
- Config: feature flags, SSE timeouts, retry policy
2026-06-03 15:52:44 +02:00
Kevin L'Hereec
3fefbf6c40
test: 16 tests for typed compliance comparison (numeric, boolean, string)
2026-06-03 08:56:12 +02:00
Kevin L'Hereec
478439783d
feat: catalog type enrichment + typed compliance comparison
...
- Add type field to all 7727 entries in tr181-catalog.json (xsd:string/unsignedInt/boolean/int)
- reclassifyDeviceFromCatalog applies catalog type when device type is UNKNOWN
- Export getCatalogType() utility
- Compliance comparison: numeric types compared as Number, boolean as bool, fallback to String
- Handle NaN gracefully (fallback to string comparison)
2026-06-03 08:53:31 +02:00
Kevin L'Hereec
046a2b09c2
task: catalog type field is mandatory (per TR-181 norm)
2026-06-02 18:33:30 +02:00
Kevin L'Hereec
665e4a864e
task: plan catalog type enrichment (TR-181 xsd types)
2026-06-02 18:32:02 +02:00
Kevin L'Hereec
ce4a857bb1
fix: compliance comparison uses String() to handle number vs string mismatch
2026-06-02 18:29:10 +02:00
Kevin L'Hereec
8265fb7f0f
ui: references properties all on one row (dynamic col width)
2026-06-02 18:19:04 +02:00
Kevin L'Hereec
670ed860aa
feat: initialize lastPeriodicInformAt on BOOTSTRAP too
2026-06-02 18:16:16 +02:00
Kevin L'Hereec
d9b3a1b810
fix: resolve flaky pagination integration test (isolated collection)
2026-06-02 18:10:35 +02:00
Kevin L'Hereec
f0670224f3
feat: periodic inform utility + 3 dates on same line
...
- Extract computeNextPeriodicInform to app/utils/periodic_inform.ts
- 11 unit tests for the periodic computation logic
- DeviceDetail: 3 date columns on same row (created, last seen, next estimated)
2026-06-02 18:06:18 +02:00
Kevin L'Hereec
75436ad2f4
style: formatting fixes (prettier compliance)
2026-06-02 18:03:19 +02:00
Kevin L'Hereec
7882a49d71
refactor: move dynamic imports to file headers
...
- getReferenceEngine import moved to top of cwmp_controller
- Fix makeContext type in configuration_evaluation_state tests
2026-06-02 17:58:07 +02:00
Kevin L'Hereec
31578e368f
feat: estimated next connection + fix build errors
...
- Store lastPeriodicInformAt on device when PERIODIC Inform received
- Display 'Prochaine connexion' in DeviceDetail identity card
- Fix tsconfig exclude (tests, inertia, coverage) for Docker build
- Fix TS errors in tests (CommandResult type, unused imports)
- Fix distinctCriteriaValues typing in controller
2026-06-02 17:56:17 +02:00
Kevin L'Hereec
e1e8ae5097
refactor: move validator imports to file header
2026-06-02 17:12:24 +02:00
Kevin L'Hereec
0cb8e12466
refactor: wire validators into controllers
...
- configurations_v1_controller: use createConfigurationValidator/updateConfigurationValidator
- firmware_catalog_controller: use createFirmwareEntryValidator/updateFirmwareEntryValidator/createMigrationRouteValidator
- Remove dead isModeType/parseMode from mode.ts
- Remove dead NAMESPACES from soap.ts
2026-06-02 17:09:15 +02:00
Kevin L'Hereec
823427cdbe
refactor: remove dead code
...
- Remove unused NAMESPACES export from soap.ts
- Remove unused isModeType/parseMode from mode.ts (device_service does inline parsing)
- Remove flaky model unit tests (covered by integration tests)
- Keep validators (to be wired into controllers later)
2026-06-02 17:05:58 +02:00
Kevin L'Hereec
5759809145
test: 80%+ line coverage achieved (512 tests)
...
- ComplianceUpdateState: provisioning code write, transition to executing-commands
- ConfigurationEvaluationState: full happy path with all phases
- Fix flaky integration tests (isolated collections)
- Coverage: 80.64% lines, 79.26% statements, 512 tests
2026-06-02 16:56:47 +02:00
Kevin L'Hereec
818c661f21
test: 508 tests, 79% line coverage - config eval happy path
...
- Full happy path test for ConfigurationEvaluationState
- Fix flaky integration tests
- Coverage stable at 79% lines
2026-06-02 16:54:04 +02:00
Kevin L'Hereec
575975e211
test: 507 tests, 79% line coverage — near 80% threshold
...
- Device domain: full coverage of organizeParameters, updateFromValues
- MainStateMachine: full lifecycle test, error handling, GPN failure
- Coverage: 52% → 79% lines (507 tests)
2026-06-02 16:49:43 +02:00
Kevin L'Hereec
12a1787151
test: 492 tests, 78% line coverage
...
- Device domain: updateFromValues, organizeParameters, identifier
- BaseModel: full CRUD mock tests
- DeviceModel: all methods mocked
- Other models: collectionName verification
- MainStateMachine: start, handleResponse, state transitions
- ConfigurationEvaluationState: init, GPN flow, GPN-unsupported skip
- MongodbProvider: getMongoDb guard
- device_utils: hash determinism
- vitest.config.ts: coverage scope (excludes HTTP layer)
- 492 tests passing, 78% line coverage
2026-06-02 16:45:19 +02:00
Kevin L'Hereec
ab21f11b30
test: CWMP task_queue, device_action_executor, reference_engine tests
...
- task_queue: task lifecycle, events, all SOAP builders, clear pending
- device_action_executor: all action methods, callbacks (GPV/GPN/SPV)
- reference_engine: resolveAll, resolveOne, trigger matching, numeric events
- Coverage: 52% → 67% statements, 428 tests passing
2026-06-02 16:35:08 +02:00
Kevin L'Hereec
003ef50a8e
test: improve coverage — domain, protocol, references, integration DB tests
...
- Domain: DeviceId, Command, DeviceParameter, DeviceProperty, Mode
- Protocol: SOAP parsing, CWMPMessageBuilder (all methods)
- References: config_loader, WassupProvider (timeout, errors)
- Integration: MongoDB tests (CRUD, pagination, references)
- Fix: Home.vue IP lookup for Device.WANDevice path
- Total: 384 tests passing
2026-06-02 16:29:19 +02:00
Kevin L'Hereec
e857b4fbe7
feat: reference providers system with Wassup integration
...
- Pluggable multi-provider architecture (ReferenceEngine)
- Wassup provider implementation (HTTP GET + X_WASSUP_USER_IP)
- Auto-resolve references on Inform (BOOT/BOOTSTRAP events)
- References displayed in device Identity card
- REST API: GET/POST references per device
- Config via config/references.json
- Fix event extraction for single EventStruct and numeric EventCodes
- Mock Wassup provisioned by home-device-simulator on device creation
2026-06-02 15:52:16 +02:00
Kevin L'Hereec
4eb3f0795a
feat: immediate mode (I) commands via Connection Request
...
- Hide Refresh button when ConnectionRequestURL is unavailable
- Fix ImmediateCommandStateMachine session lifecycle (mark complete when no commands)
- Fix preemption: new CONNECTION REQUEST replaces stale immediate session
- Protect ensureSessionForRemote from rebinding to completed machines
- Normalize numeric event codes from simulators (6 -> 6 CONNECTION REQUEST)
- Extract updatePendingCommandsStatus for clarity
2026-06-02 14:00:31 +02:00
Kevin L'Hereec
713a043625
ui: remove diffs column from compliance table
2026-06-02 10:32:25 +02:00
Kevin L'Hereec
bf98c9f405
feat: dry-run modal on non-compliant badge click
...
Replace the separate Dry Run tab with a modal triggered by clicking
a non-compliant badge in the Compliance tab. Shows parameter diffs,
firmware path, and a link to the device page.
2026-06-02 10:30:23 +02:00
Kevin L'Hereec
0109bca236
fix: show ExternalIPAddress from properties in device table
2026-06-01 17:35:38 +02:00
Kevin L'Hereec
bc9ac4f125
fix: state machine timing + reclassification tests
...
- Fix state machine start timing: don't call start() in startStateMachine,
let the CPE's first empty body trigger the state machine via continue().
This ensures GPN is sent at the correct point in the TR-069 session.
- Add unit tests for reclassifyDeviceFromCatalog (10 tests)
- Add unit tests for MainStateMachine transitions and GPN callbacks (11 tests)
- Test both scenarios: Huawei (GPN supported) and Livebox (GPN unsupported + fallback)
- Fix tr069_trace_service test path assertion (config/ → data/)
- Update steering doc with Livebox bootstrap command
2026-06-01 17:31:33 +02:00
Kevin L'Hereec
a5b3135396
ok maybe
2026-06-01 16:58:52 +02:00