-
Notifications
You must be signed in to change notification settings - Fork 0
Release Checklist
guan4tou2 edited this page Jul 31, 2026
·
1 revision
Every release tags a new v0.6.x. Run through this list before pushing the tag.
Skipping something is fine when you know it doesn't apply, but never skip
silently — leave a - [~] not applicable this release: <reason> note.
-
npm run buildclean -
npm test→ 207/207 (or higher — update this number if suite grew) -
diff <(jq -r 'keys[]' src/renderer/src/i18n/en.json | sort) <(jq -r 'keys[]' src/renderer/src/i18n/zh-TW.json | sort)→ empty - No mojibake in i18n:
grep -P '\xc3\x82|\xc3\x83' src/renderer/src/i18n/*.jsonempty -
README.mdversion references updated
- Open app cold → project picker appears
- Create new project → picker closes, dashboard loads
- Recent projects list clickable, opens right one
- Pencil ✎ rename inline works, keeps id + path
- Version tag matches package.json
- Event count matches DB (
redlog-cli status) - IP safety banner shows external + internal IP
- Capture health rows: shell hook / mitmproxy / Claude Code hook / RedLog terminal all have a state (not "unknown")
- Number cards clickable → jump to matching panel
- Lane strip renders (Shell / 代理 / HTTP / 中繼跳板 / 標記 / 戰利品 / 系統)
- Clicking a shell command_end event opens detail panel
- Detail: ▶ Replay stdout (from .cast) button appears for builtin-terminal command_end, shows sliced output
- ↑/↓ walks selected event across visible events (audit #5)
- Escape closes detail panel
- Scroll left to earliest → loadMore auto-fires (audit #3), older events appear
- Alt-click lane label → solo lane
- Cluster popover click → timeline scrolls to that event
- Copy JSON respects mask/reveal state
-
+new tab; tab counter monotonic (Shell 1 / Shell 2 stays unique) - Command runs,
whoamiprints - Command_start + command_end both hit DB with
source=builtin-terminalandterminalIdset (verify via API) - Tab label shows
~/<cwd basename>after first cd - Tab label shows red
✕Nwhen last exit != 0 - ⌘T new tab, ⌘W close, ⌘⇧] next, ⌘⇧[ prev
- Dead tab: click ↻ → in-place restart (label preserved, new PID)
- Font ⌘+ / ⌘-
- Buffer search ⌘F: type query, Enter next, Shift+Enter prev
- .cast file exists in
<projectDir>/casts/after session
- Panel loads
- "立即擷取" button captures a screenshot
- Grid shows thumbnail, click → full-size overlay, Esc close
- Trigger filter chips appear when 2+ distinct triggers
- Delete button: only JPEG deleted, event row stays,
system.screenshot_deletedaudit event appears
- Populated from shell command detectedTarget
- 全部 / 範圍內 / 範圍外 filter chips work
- Click target expands evidence rows
- Out-of-scope target: "+ 範圍" pill appends to config.scope.targets, target reclassifies
- Configured target list shown; violation events listed
- Violation row click → jumps to Timeline
- Export button writes JSON to file
- Loot events grouped by source event
- Type filter chips (aws_key / flag / jwt / …) narrow list
- Dedup toggle collapses duplicates
- Card click → jump to timeline
- Create via + button OR ⌘M shortcut
- Mark list clickable → detail panel opens
- Detail: pin button ★/☆ toggles, pinned marks float to top, list row shows small ★ indicator
- Edit / Delete work
- Search input appears when marks.length >= 5, filters live
- Export button writes JSON
- Search panel opens
- Type ≥1 char → results show
- Type filter chips filter by agent_type
- Click result → "Open in timeline" jumps back to Timeline focused on that event
- Right side of screen, shows recording + safety + external IP
- External-IP change flash (turn Wi-Fi off/on)
-
⌘⇧⌥ ↑/→/↓/←snap to TL / TR / BR / BL - Font scale + IP emphasis toggles reflect settings
- Hide/show via tray menu
- All tabs load (Engagement / Operator / Scope / Redaction / Overlay / Hooks / Plugins / Advanced)
- Auto-save works (no explicit Save button; edit → wait → reload → persists)
- Operators: add / rename / rotate token / revoke
- Scope: add pattern → violation flow triggers next command_start
- Plugin: enable → reload → tools appear in MCP list
-
whoamireturns operator info -
statusprints event count + IP + capture health -
mark "test" --severity infoinserts, appears in Marks -
log terminal --data '{"subtype":"note","command":"cli-test"}'inserts -
search testreturns marks -
recording pause→ status = paused;resume→ recording -
quickmark listmatches Marks panel -
quickmark add "cli mark" --url https://example.com -
replay <event_id>prints stdout slice for a shell.command_end -
screenshottriggers capture -
chain statusprints length + last anchor -
chain verifyreturns OK -
chain verify --fullwalks entire chain, no gaps -
chain anchorsubmits to OpenTimestamps -
sanitize --dry-run --event-ids <id> --reason "test"prints diff -
export bundlewrites to disk, manifest valid
- Every command_start followed by matching command_end (for internal terminals)
-
chain verify --fullclean - Hourly anchor timer fires (check anchors table growth)
- Switch language via Settings → both languages render without missing key
[foo.bar] - No CJK mojibake in either lang
- Webhook config accepts URL
-
redlog-cli deconfliction testposts a probe
- Recording pause: no new events added while paused, resume works
- Kill app mid-session: on relaunch, project reopens cleanly, chain not corrupted
- Uninstall + reinstall via DMG:
~/.redlog/projects.jsonand project dirs preserved - Windows portable exe: at minimum, launches (skip if not shipping this release)
If a section can't run this release (e.g. Chain anchor test requires
internet), tick with - [~] not applicable: <reason>.
Don't ship. File the failure as a task, fix it in a follow-up commit, re-run just that section, then continue.
Integration
Evidence
SSH / VPS
Extending
Privacy
Agent skill
Ops