{ "release_id": "20260921-port-down-1", "platform": "linux-arm64", "scope": "application-and-daemon-binaries-not-full-firmware", "generated_at": "2026-09-21T15:05:03.204065+09:00", "files": [ { "path": "frontend/tera-clone-demo-web", "bytes": 19064981, "sha256": "96c2f7e0e09ff3357cb62fdfd5b1bc4495c99215d7561a41717b747ee3695a21", "install_path": "/usr/bin/tera-clone-demo-web", "provenance": "built-and-deployed" }, { "path": "backend/tera-clone-demo-api", "bytes": 14458233, "sha256": "c2a947b6573a4c56468c28d156b3ce35b626656c6a9f5b5acdda53ad10da9375", "install_path": "/usr/bin/tera-api", "provenance": "built-and-deployed" }, { "path": "backend/tera-logd", "bytes": 3211426, "sha256": "b5856899698bfafb1f382a3dd45db02b034ba785d56a075ea964c937b57a48b3", "install_path": "/usr/bin/tera-logd", "provenance": "built-and-deployed-earlier-today" }, { "path": "backend/tera-clone-demo-alarmd", "bytes": 7711921, "sha256": "ac3149f54d93ce252527606bda35dc739f1f3ad40bfb77409f16b3514d437006", "install_path": "/usr/bin/tera-alarmd", "provenance": "existing-device-baseline" }, { "path": "backend/tera-netd", "bytes": 4661671, "sha256": "2864dbde4fcde16898a3b187716b325883365a1fd39f16264a5186877f94c50c", "install_path": "/usr/bin/tera-netd", "provenance": "copied-from-device" }, { "path": "backend/tera-seriald", "bytes": 5020690, "sha256": "1263fe6823fb07704ecbd0bc5be18db56f9f2b60ebafc1692e873c40bac8f01f", "install_path": "/usr/bin/tera-seriald", "provenance": "copied-from-device" }, { "path": "backend/tera-sessiond", "bytes": 9165906, "sha256": "68b179d4a9670dfde2b52e3ee04683385c455e7ef9f2e13fff886cac35bbbb1c", "install_path": "/usr/bin/tera-sessiond", "provenance": "built-and-deployed" }, { "path": "backend/tera-timed", "bytes": 4329693, "sha256": "c0cc73a1d390ef9964adc3a1623b90b8c7950a798af71a7201c93b1b58f12b12", "install_path": "/usr/bin/tera-timed", "provenance": "copied-from-device" } ], "source": { "base_commit": "6ed3580", "changes": "Working-tree build based on 6ed3580 with earlier deployed changes and the port DOWN fix. This release includes the DOWN classification source and regression tests; other earlier working-tree source changes remain outside this commit." }, "deployment": { "device": "192.168.0.223", "date": "2026-09-21", "ready": true, "completed": 12, "total": 12, "backup": "/userdata/tera-backups/telnet-session-ips-20260916-124023", "web_labels_backup": "/userdata/tera-backups/compact-port-selector-20260916-125224", "verified": "Installed API and web SHA256 verified, service readiness 12/12, served integration.js matches source.", "web_alias_backup": "/userdata/tera-backups/port-selector-alias-20260914", "web_title_backup": "/userdata/tera-backups/direct-mode-title-20260914", "web_modal_enter_backup": "/userdata/tera-backups/modal-enter-send-20260917-112546", "web_log_ui_backup": "/userdata/tera-backups/log-rotation-ui-20260917-113402", "web_common_retention_backup": "/userdata/tera-backups/common-log-retention-20260917-113657", "web_storage_summary_backup": "/userdata/tera-backups/log-storage-summary-20260917-114241", "web_tab_controls_backup": "/userdata/tera-backups/tab-controls-20260917-115134", "api_snmp_username_backup": "/userdata/tera-backups/snmp-username-20260921-102935", "web_diagnostics_backup": "/userdata/tera-backups/tab-controls-20260921-134221", "port_down_api_backup": "/userdata/tera-backups/snmp-username-20260921-150246", "port_down_web_backup": "/userdata/tera-backups/tab-controls-20260921-150326" }, "validation": { "backend": "directstream, portservice, mock store, API, tera-sessiond and tera-api suites passed. Mixed browser/terminal four-session limit, fifth-session rejection, fanout, shared writes, slot reuse, per-session release and combined count covered.", "frontend": "All frontend Go tests and JavaScript syntax check passed; 19 distinct tab/sidebar/modal/navigation regression tests passed, including drag order and first-tab retention.", "javascript": "Session IP renderer tests passed: ordered mixed-protocol IPs, duplicate IPs, IPv6, disconnect clearing and reconnect ordering. Earlier 13 workspace and navigation tests passed.", "browser": "Local Edge: port selector aliases, truncation/hover/accessibility, one-tab navigation, checkboxes and responsive layout; ASCII/HEX display with lowercase values passed.", "live": "ARM64 tests executed on the target: WebSocket plus Unix gateway attachments, same-number operation 1/2 SSH+Telnet, SSH+SSH and Telnet+Telnet over test listeners with a simulated UART all passed. Deployed API, sessiond and web hashes, shared socket and readiness verified.", "limitations": "No PuTTY GUI or simultaneous clients through both physical Ethernet networks acceptance test; integration tests use loopback listeners and a simulated UART. No cable-unplug or power-cycle test.", "latest": "serial, logruntime and API package tests passed; UNKNOWN -> UP -> DOWN -> UP regression passed with 15-second grace. JavaScript syntax passed. Physical cable unplug not performed for this release." }, "changes": [ "After confirmed UP, sustained CR response loss becomes DOWN after 15 seconds; never-confirmed ports remain UNKNOWN; applies to API and link events", "Preserve SNMPv3 username case through storage and runtime application", "Remove green C-drive prompt and CMD label from diagnostics; use dollar prompts", "Alt-click inactive tab close retains the selected tab; Alt-click selected tab close retains the leftmost tab", "Show audit/system/port/link storage status and oldest record timestamps in responsive cards, refreshed every 30 seconds; retain common retention input", "Keep one common user-editable retention input, default 365 days, saving system/audit/port retention together; remove storage and threshold controls", "Open dynamically inserted user-add modals on first click after menu navigation", "Remove Direct Mode batch send button while preserving Enter transmission in advanced input", "Use consistent SSH and Telnet labels in operation settings and port status while preserving stored mode identifiers", "Label inbound Telnet as Telnet per the manual and accept telnet as a compatible alias of reverse_telnet", "Display active browser and terminal session IPs in successful attachment order, including the runtime polling endpoint", "Share one UART broker across browser Direct Mode and operation 1/2 terminal sessions; enforce their combined per-channel maximum", "Give every authorized writer session shared input and report the combined session limit on rejection", "Reduce port selector cards to approximately 95px high and panel maximum width to 550px", "Keep channel positions fixed from 1 to 48", "Replace port settings in one tab", "Larger cards with target checkboxes", "Remove serial console icon", "Share CR response classification with 15-second grace; sustained silence is unknown, not cable down", "Include earlier system/session/log/reauthentication improvements", "Allow same listener port across operation 1 eth0 and operation 2 eth1 in configuration validation", "Display log format labels as ASCII and HEX", "Show aliases in port selector cards with ellipsis and full-name hover", "Display newline labels as CR, LF and CRLF in both operation tabs", "Remove Port suffix from Direct Connection Mode page and workspace title" ] }