vrek: issues for naming cameras, in this app and on the camera
Both of the user's cameras call themselves "I91ET", so the slimmed-down dashboard shows two identical names. One issue adds a nickname kept here; the other changes what the camera itself advertises over ONVIF SetScopes, which needs its own checks first. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
81e55a092b
commit
814079d44d
@ -1192,3 +1192,16 @@
|
||||
{"id":"evt-sbk9y0hkwxtk","type":"node.created","subject":"ver-agvm4d4","actor":"prn-q80g8mz","actor_kind":"agent","session":null,"payload":{"kind":"verification","title":"A dashboard card carries only the picture, the camera's name, its status and a pop-out icon; the address, model, streams, location, web page and login moved to the camera page; anything needing attention still appears on the card","body":"","status":"pending","owner":"prn-q80g8mz","attrs":{}},"at":"2026-09-20T12:21:39.217Z","parents":["evt-7fjdxzernfba"],"hash":"80a8b7a7403e59baf9a74bbb788b810004c85c5ad72936947a2e76d23c03d759"}
|
||||
{"id":"evt-83mdjgywtrsf","type":"edge.added","subject":"ver-agvm4d4","actor":"prn-q80g8mz","actor_kind":"agent","session":null,"payload":{"kind":"evidence_for","from":"ver-agvm4d4","to":"iss-t9twsxg"},"at":"2026-09-20T12:21:39.218Z","parents":["evt-sbk9y0hkwxtk"],"hash":"1c42236c6fc4149a9f8dae41e265adb12971c558822385e69549c1d68a302749"}
|
||||
{"id":"evt-hsvaw2fzwdsy","type":"verification.recorded","subject":"ver-agvm4d4","actor":"prn-q80g8mz","actor_kind":"agent","session":null,"payload":{"result":"pass","evidence":"The Details disclosure is gone from camera-card.tsx (375 lines down to 219); the web page link and login form moved to src/app/camera-login.tsx, shared with the new src/app/cameras/[id]/camera-login-controls.tsx, which also shows the model, firmware and main stream on the camera page. Status sits over the picture, top left; Pop out is an icon top right with an accessible name. Tests: camera-card.test.tsx (\"is a picture, a name and a status, and nothing else\" asserts the address, location, device line, profile table, Web page, Change login and Details are all absent, and no details or table element exists), camera-login-controls.test.tsx (device and stream lines, web page link, opening and cancelling the form, saving, forgetting), page.test.tsx, icons.test.tsx. Full suite 967 tests pass, 99.61% lines; tsc, eslint and next build clean."},"at":"2026-09-20T12:21:39.219Z","parents":["evt-83mdjgywtrsf"],"hash":"3d6a927d090528d65631d47932511ce8246ecb27cf34da1c2ebd84811b2a84f1"}
|
||||
{"id":"evt-89vy925tysvp","type":"node.created","subject":"iss-t2bmvgj","actor":"prn-q80g8mz","actor_kind":"agent","session":null,"payload":{"kind":"issue","title":"Name cameras in this app, independent of what they call themselves","body":"Found while simplifying the dashboard (gol-6x4ctm2): a card is now a picture, a name and a status, but the name comes from the camera's own ONVIF scope (onvif://www.onvif.org/name/…), parsed in src/lib/onvif.ts. Both of the user's cameras report \"I91ET\", their model, and neither reports a location, so the dashboard shows two identical names with nothing to tell them apart.\n\nAdd a nickname kept in this app's registry: editable on the camera page, shown wherever the camera is named, falling back to the camera's own name, then its model, then \"Unnamed camera\". Held in .data/cameras.json beside the rest of the record, so it survives a camera being reset or renamed, and a rescan must not overwrite it. A Server Action writes it, validated with zod (length and no control characters), and the dashboard's ordering follows the name shown. Also worth naming the location the same way, since the cameras leave it empty. Tests cover the fallback chain, that a scan leaves a nickname alone, and that clearing it returns to the camera's own name.","status":"open","owner":null,"attrs":{}},"at":"2026-09-20T12:34:12.538Z","parents":["evt-hsvaw2fzwdsy"],"hash":"79b6c5194d52b26d8254d7b7ed62ef6fff17296f4f5d3cd0f56eb5f1b0894591"}
|
||||
{"id":"evt-fe2dqrggy7ey","type":"edge.added","subject":"iss-t2bmvgj","actor":"prn-q80g8mz","actor_kind":"agent","session":null,"payload":{"kind":"serves","from":"iss-t2bmvgj","to":"gol-6x4ctm2"},"at":"2026-09-20T12:34:12.540Z","parents":["evt-89vy925tysvp"],"hash":"a47ef25239ef7bdb3c88a3c5fa252f31a2103535dc9d9bd837c0b24bf9ca22e0"}
|
||||
{"id":"evt-ms7b0janmxp5","type":"edge.added","subject":"iss-t2bmvgj","actor":"prn-q80g8mz","actor_kind":"agent","session":null,"payload":{"kind":"touches","from":"iss-t2bmvgj","to":"src/lib/camera-registry.ts"},"at":"2026-09-20T12:34:12.541Z","parents":["evt-fe2dqrggy7ey"],"hash":"75858d39e41c82c67a90689d88178c09e2c91c182f1d6d2454c4d3e91e8bbc50"}
|
||||
{"id":"evt-y52a7e4n4k80","type":"edge.added","subject":"iss-t2bmvgj","actor":"prn-q80g8mz","actor_kind":"agent","session":null,"payload":{"kind":"touches","from":"iss-t2bmvgj","to":"src/app/cameras/[id]/"},"at":"2026-09-20T12:34:12.542Z","parents":["evt-ms7b0janmxp5"],"hash":"d47923fc5aed70b3b5de1ed8e65d7bde7e2e0c1ed716fed4ab0acc80e71e095f"}
|
||||
{"id":"evt-xyeb8kq4947e","type":"edge.added","subject":"iss-t2bmvgj","actor":"prn-q80g8mz","actor_kind":"agent","session":null,"payload":{"kind":"touches","from":"iss-t2bmvgj","to":"src/app/camera-card.tsx"},"at":"2026-09-20T12:34:12.543Z","parents":["evt-y52a7e4n4k80"],"hash":"86c07209971803712e810584caa39735023d69d298998bee61bd6ab4df54095e"}
|
||||
{"id":"evt-1w99jab6mx5n","type":"edge.added","subject":"iss-t2bmvgj","actor":"prn-q80g8mz","actor_kind":"agent","session":null,"payload":{"kind":"tagged","from":"iss-t2bmvgj","to":"area:ui"},"at":"2026-09-20T12:34:12.544Z","parents":["evt-xyeb8kq4947e"],"hash":"8077eebc66be9659fa9278c834486874e7f7b193dddd151bd44826d2b8bcfc61"}
|
||||
{"id":"evt-6f6fe7my53b1","type":"node.created","subject":"iss-h1qwke5","actor":"prn-q80g8mz","actor_kind":"agent","session":null,"payload":{"kind":"issue","title":"Write the camera's own name and location back over ONVIF","body":"The other half of naming (see the nickname issue): rather than only naming a camera inside this app, change what the camera calls itself, so anything else on the network sees it too. ONVIF SetScopes replaces the onvif://www.onvif.org/name/… and /location/… scopes that discovery reads (src/lib/onvif.ts parses them). Offer it on the camera page beside the nickname: name and location, written to the camera, re-read afterwards to show what actually applied, and appended to the audit log, like the other writers (dec-84ghhqr).\n\nUnknowns to settle first, read-only where possible: whether an Operator account may call SetScopes at all on these cameras, or whether it needs more rights, as ISAPI imaging did (fnd-vfrgk0m); whether the onvif package's setScopes sends what the camera expects, given what its setters got wrong before (fnd-sx2k2bg, fnd-jzmm3nz); and whether replacing scopes disturbs anything else the camera advertises, since the call replaces the configurable set rather than editing one entry. A no-op write that sends the current scopes back is the safe first test, and needs the user's go-ahead because it changes a camera.","status":"open","owner":null,"attrs":{}},"at":"2026-09-20T12:34:25.178Z","parents":["evt-1w99jab6mx5n"],"hash":"0ba8c169e6380ef3522e6055c60300ef26c85cb4180153d234071010fc1e8def"}
|
||||
{"id":"evt-sdh8s4fpyp5p","type":"edge.added","subject":"iss-h1qwke5","actor":"prn-q80g8mz","actor_kind":"agent","session":null,"payload":{"kind":"serves","from":"iss-h1qwke5","to":"gol-6x4ctm2"},"at":"2026-09-20T12:34:25.179Z","parents":["evt-6f6fe7my53b1"],"hash":"ac16ddd3aebd628b9b619fb089e5159607fd774f57174221523bbb72dfe1fed1"}
|
||||
{"id":"evt-w3gdr79cm4p4","type":"edge.added","subject":"iss-h1qwke5","actor":"prn-q80g8mz","actor_kind":"agent","session":null,"payload":{"kind":"touches","from":"iss-h1qwke5","to":"src/lib/camera.ts"},"at":"2026-09-20T12:34:25.182Z","parents":["evt-sdh8s4fpyp5p"],"hash":"1f73443b983af0f7b99a9202495ba677f687963dd4b42af16364306dcd47b871"}
|
||||
{"id":"evt-axzsk844h3t1","type":"edge.added","subject":"iss-h1qwke5","actor":"prn-q80g8mz","actor_kind":"agent","session":null,"payload":{"kind":"touches","from":"iss-h1qwke5","to":"src/lib/camera-config.ts"},"at":"2026-09-20T12:34:25.183Z","parents":["evt-w3gdr79cm4p4"],"hash":"85defc437b5ec76353e8c8684c7d6d29e04e33dca92bac329885ebf57e847d9f"}
|
||||
{"id":"evt-zcdagtw2xx6s","type":"edge.added","subject":"iss-h1qwke5","actor":"prn-q80g8mz","actor_kind":"agent","session":null,"payload":{"kind":"touches","from":"iss-h1qwke5","to":"src/app/cameras/[id]/"},"at":"2026-09-20T12:34:25.184Z","parents":["evt-axzsk844h3t1"],"hash":"ca635a8ac594869fbe0422a108581b1ea15cdfae99cc6efbd9c81596be58cbd0"}
|
||||
{"id":"evt-g7bxh85qnrn3","type":"edge.added","subject":"iss-h1qwke5","actor":"prn-q80g8mz","actor_kind":"agent","session":null,"payload":{"kind":"tagged","from":"iss-h1qwke5","to":"area:device"},"at":"2026-09-20T12:34:25.185Z","parents":["evt-zcdagtw2xx6s"],"hash":"85805fe53d552bfb9f0af08ca1818e45303feeca828de05b114df0269eb1d8cb"}
|
||||
{"id":"evt-tfmgjtfgk9n6","type":"edge.added","subject":"iss-h1qwke5","actor":"prn-q80g8mz","actor_kind":"agent","session":null,"payload":{"kind":"tagged","from":"iss-h1qwke5","to":"area:config"},"at":"2026-09-20T12:34:25.186Z","parents":["evt-g7bxh85qnrn3"],"hash":"d043f5205d996e94335d4382458df46b7367029fd7fc9e3da16cb8d73e222fb4"}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user