**릴리스 20260916-shared-port-sessions-1 · Linux ARM64 · 192.168.0.223 배포 완료**
**릴리스 20260921-snmp-diagnostics-1 · Linux ARM64 · 192.168.0.223 배포 완료**
2026-09-21: SNMP v3 사용자 이름의 대소문자를 유지하도록 API를 수정했습니다. PC에서 v3 GET과 SHA-1/AES Trap 수신을 확인했습니다. Trap 시험에는 PC에서 장비 `192.168.0.223`의 UDP 2162 수신을 허용해야 합니다. 진단도구 상단의 초록색 `C:\>`와 `CMD` 표기를 제거하고 본문 프롬프트를 `$`로 변경했습니다. API·웹 배포 해시와 서비스 준비 상태 12/12, 배포된 integration.js/i18n.js/style.css 원문 일치를 확인했습니다. 관련 SNMP 회귀 테스트와 JavaScript 문법 검사를 통과했습니다.
2026-09-20: 비선택 탭의 X를 Alt+클릭하면 현재 선택 탭만 남기고, 선택 탭의 X를 Alt+클릭하면 맨 왼쪽 탭만 남깁니다. 탭 관련 테스트 17개를 통과했습니다.
이번 커밋은 최종 실행 파일과 릴리스 메타데이터를 포함합니다. 빌드는 `6ed3580` 기반 작업 트리의 수정 사항을 포함하며, 해당 소스 수정은 이 빌드 파일 커밋에 포함하지 않습니다. 전체 펌웨어 이미지가 아닌 애플리케이션·데몬 실행 파일 모음입니다.
2026-09-17: 왼쪽 메뉴 펼침 상태를 로그인 세션별로 저장하고 재로그인 시 초기화합니다. 탭 드래그로 순서를 바꿀 수 있으며 Alt+× 클릭은 현재 맨 앞 탭만 남깁니다. 프런트엔드 전체 Go 테스트 및 탭/메뉴/모달/화면 이동 회귀 테스트 19개 통과. 웹 해시·app.js 원문 일치와 준비 상태 12/12 확인. 백업: `/userdata/tera-backups/tab-controls-20260917-115134`.
2026-09-17: 공통 보존기간 입력을 유지하며 읽기 전용 저장 현황을 복원했습니다. 감사·시스템·포트·포트 링크 상태 카드에 저장량과 가장 오래된 기록을 표시합니다. 링크 상태의 저장 공간은 포트와 공유함을 표시하고 기록 시각은 현지 날짜·시간으로 표시합니다. 기록 없음 및 조회 실패를 구분하며 30초 주기/수동 새로고침을 제공합니다. 프런트엔드 전체 Go 테스트, 공통 보존기간 회귀 테스트, JavaScript 문법 검사 통과. 웹 해시·배포 integration.js 일치, 준비 상태 12/12 확인. 백업: `/userdata/tera-backups/log-storage-summary-20260917-114241`.
최종 보존 설정: 사용자 변경이 가능한 공통 보존기간 입력 하나를 제공합니다(기본 365일, 1~365일). 저장 시 시스템·감사·포트에 같은 값을 적용합니다. 저장 공간·90% 한도 설정 UI는 제거했습니다. 90% 공간 한도와 오래된 로그 순환 삭제는 기존 동작을 유지합니다. CR 링크 점검 송신·수신은 기존 구현에서 기록하지 않으며, RX/TX 로그를 켠 회귀 테스트로 확인했습니다. 일반 사용자 통신 로그는 유지합니다. 공통 보존기간 저장 테스트와 프런트엔드 전체 테스트 통과, 웹 배포 해시·integration.js 원문 일치 및 서비스 준비 상태 12/12 확인. 최종 웹 백업: `/userdata/tera-backups/common-log-retention-20260917-113657`. 실제 장비의 CR 송수신을 별도로 발생시키는 시험은 하지 않았습니다.
2026-09-17: 로그 저장 공간·보존 설정 패널을 제거했습니다. 백엔드의 기존 90% 파일시스템 한도 및 오래된 로그 순환 삭제 동작을 유지합니다. 로그 용량/보존 정책 테스트, 프런트엔드 전체 테스트, CR 점검 RX/TX 기록 제외 회귀 테스트를 통과했습니다. 웹 배포 해시와 integration.js 원문 일치, 준비 상태 12/12 확인. 백업: `/userdata/tera-backups/log-rotation-ui-20260917-113402`.
2026-09-17: 메뉴 이동 후 사용자 추가 창이 첫 클릭부터 열리도록 수정했습니다. 직접 연결 고급 기능의 일괄 전송 버튼을 제거했으며 전송 값 입력란의 Enter 전송은 유지합니다. 프런트엔드 전체 Go 테스트와 모달/메뉴 이동 회귀 테스트 6개, JavaScript 문법 검사를 통과했습니다. 웹 실행 파일 해시, 배포된 app.js/integration.js 원문 일치, 준비 상태 12/12를 확인했습니다. 웹 백업: `/userdata/tera-backups/modal-enter-send-20260917-112546`. 실제 장비 CLI 명령 전송은 이번 검증에서 실행하지 않았습니다.
동작 모드 표시 이름은 `SSH`와 `Telnet`으로 통일했습니다. 웹만 추가 배포했으며 포트별로 적용된 프로토콜은 변경하지 않았습니다. 2026-09-16 확인 시 eth0 `192.168.0.223:10020`은 SSH 안내 문자열을 응답했고, PC에서 eth1 `192.168.200.4:10020` 접속은 시간 초과였습니다. Telnet 시험은 해당 동작에 Telnet을 적용한 후 해당 Ethernet 주소로 새로 접속해야 합니다.
추가 수정: 원본 가이드에 맞춰 동작 모드 `Telnet`은 Listen Port에서 외부 접속을 받습니다. 기존 `reverse_telnet` 저장 값과 호환하며 UI는 `Telnet`으로 표시합니다. SSH/Telnet의 eth0·eth1 동시 접속을 지원하고, 포트 상태 세션 1~4 IP는 웹·SSH·Telnet의 접속 순서로 표시합니다. 종료한 세션은 제거되고 새 연결은 마지막에 추가됩니다. 주기적인 상태 갱신 API에도 동일한 IP 목록을 제공합니다.
최종 백업: `/userdata/tera-backups/telnet-session-ips-20260916-124023`. API·sessiond·웹 해시 및 준비 상태 확인, 혼합 프로토콜과 IP 순서 통합 테스트 통과. 실제 두 Ethernet 경로의 PuTTY GUI 동시 접속은 별도 검증하지 않았습니다.
2026-09-16: 웹 직접 연결과 동작 1·2의 SSH/Telnet 접속이 tera-sessiond의 동일 시리얼 연결을 공유합니다. 최대 세션이 4이면 웹과 두 동작의 합계 4개까지 접속하며, 모든 쓰기 권한 세션에서 입력할 수 있습니다. 5번째 접속은 거절하고 하나가 종료되면 다시 접속할 수 있습니다. 동작 1(eth0)과 동작 2(eth1)는 같은 포트 번호로 SSH/SSH, SSH/Telnet, Telnet/Telnet 조합을 사용할 수 있습니다. 출력과 장비 CLI 상태를 공유하므로 여러 사람이 동시에 입력하면 명령이 섞일 수 있습니다.
"changes":"Built from the current working tree with shared-session and compact-selector changes; baseline daemons retain their individual provenance."
"base_commit":"6ed3580",
"changes":"Built from the working tree based on base_commit, including pending shared-session, tab, log UI, SNMP username case and diagnostics prompt changes. This release commit packages binaries and metadata only; working-tree source changes are not included."
"verified":"API and web installed SHA256 verified on device; readiness 12/12. Served integration.js, i18n.js and style.css match local source. SNMP v3 GET and Trap reception confirmed.",
"frontend":"Rendered operation 1/2 pages verified uppercase CR/LF/CRLF labels with lowercase values; direct mode page heading has no Port suffix. Relevant page rendering checks passed. Installed web SHA256 and backend readiness verified.",
"javascript":"13 workspace and navigation tests passed; integration.js syntax check passed.",
"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."
"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":"SNMP mock-store and controller regression tests passed; 17 workspace/tab tests passed; diagnostics JavaScript syntax checks passed. User confirmed SNMP v3 GET and authenticated encrypted Trap reception on PC. Trap reception required a PC firewall exception for device UDP 2162."
},
"changes":[
"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",