Changes

p4-web is developed in Perforce — every entry below is a real submitted changelist, newest first. The source is mirrored to GitHub.

2026-07-17
day 2

Search index, hardening, and this site

  • 65268Landing page: GitHub repository and source .zip download links
  • 65266Landing page: fix mobile zoom-out caused by the hero diff overflow
  • 65265GitHub Pages custom domain (docs/CNAME → p4-web.woojinkim.org)
  • 65264Project landing page (docs/index.html)
  • 65225Changes view picks its engine automatically — the user-facing “Fast” toggle is gone (index for description/filename/date browsing, live p4 for pending and path prefixes)
  • 65221Date filters accept YYYY-MM-DD as plain text inputs (native date pickers rendered browser-locale formats)
  • 65220Per-user changelist search index — instant description and filename search that respects protections
  • 65218Graceful session-expiry: re-login notice, prefilled username, location preserved
  • 65217Ops hardening: proxy-header allowlist pinned, sessions.db permissions re-tightened on every open
  • 65216DoS hardening: streamed raw downloads, bounded upload spooling, per-session API rate limit
2026-07-16
day 1 · night

Review features and a security pass

  • 65207Standing security review (code review + audit + red team) with three defense-in-depth fixes
  • 65206Change detail: file paths are clickable — text opens the viewer, binaries download
  • 65196Inline comments: file/line and changelist threads, markdown bodies, resolve/edit/delete
  • 65193Path favorites with a root dashboard (recent changes per favorite)
  • 65192Markdown rendering: README panels in browse, Rendered/Source toggle (marked + DOMPurify, vendored)
2026-07-16
day 1 · evening

Write operations

  • 65184Dark mode (system default with a manual toggle) + docs wrap-up
  • 65182Sortable depot listings; line-number permalinks
  • 65181Shelve / unshelve / delete shelf from My Changes
  • 65178Write UI: My Changes page, web editor, uploads, submit confirmation
  • 65175Write backend: per-user server-side workspaces, own-changelist guard, audit log
  • 65170Login rate limiting (per account and per IP) and Secure cookies
2026-07-16
day 1 · afternoon

P4V parity and operations

  • 65168Mobile UX pass: whole-row tap targets, slide-over tree, responsive tables
  • 65165Deployment: Dockerfile + compose, launchd and systemd units, SSL trust-on-first-use
  • 65162User autocomplete on changelist filters
  • 65161SVG revision graph tab with integration provenance
  • 65157Friendly error translation for common p4 failures
  • 65155Sessions persist in SQLite — restarts don't log anyone out
  • 65153Mobile layout foundations
  • 65151Depot tree sidebar, lazy-loading and synced with deep links
  • 65149Metadata browsers: labels, jobs (with fixes), branches, streams, users & groups
  • 65148Raw view/download and inline image previews (CSP-sandboxed)
  • 65147Diff suite: side-by-side everywhere, revision pairs, folder diff, time-lapse annotate
  • 65145Depot search: file names across depots, content via p4 grep
2026-07-16
day 1 · morning

The read-only core

  • 65139README, /api/info, login-screen polish
  • 65138Changelist browsing: filters, keyset paging, detail view with per-file diffs
  • 65137File history (renames included), unified diffs, annotate
  • 65135Depot browser and file viewer with offline syntax highlighting
  • 65134Project skeleton: FastAPI app, p4 -G wrapper, ticket-based login