Repository source: docs/plans/archive/board_activity_carryback_step4_implementation_summary.md
Step 4: Implementation Summary — Board/Activity Carry-Back (+ Board Score column)
Stage 1 - Relative-date rows for Board and Activity
Changes:
templates/partials/paned_board_thread_list.php: list-row date span now calls$relativeTimestamp(...)instead of$timestamp(...).templates/partials/paned_activity_item_row.php: same swap for the activity item row date span.templates/partials/paned_activity_commit_row.php: same swap for the activity commit row date span.
Verification:
php -lon all three edited files — no syntax errors.Grepped the three files for remaining
$timestamp(calls — none left, confirming full swap with no missed full-format usage on these rows.Started a throwaway local server on
127.0.0.1:8010against this working tree (the already-running127.0.0.1:8000process was serving a different checkout at/home/wsl/v3, not this repo — left untouched) and curled/forteand/forte/activity/: both now render<time datetime="..." title="Sep 20, 2026 at 01:28 UTC">2 days ago</time>in place of the old full-format text. Test server stopped after verification.
Notes:
$relativeTimestampis registered globally inTemplateRenderer::renderFile(), so no wiring was needed beyond the template edits.No other
$timestampusage exists on Board/Activity partials, so nothing else needed to be left alone deliberately — there was nothing else to touch.
Stage 2 - Board Score column
Changes:
templates/partials/paned_board_thread_list.php: added a "Score" head button (data-paned-sort-column="score") after Replies, adata-paned-sort-scorerow attribute, and a.paned-list-scorerow span rendering(int) $thread['score_total'].public/assets/paned_board_reader.js: extendedsortValueFor()'s numeric branch (previously special-cased forrepliesonly) to also parsescoreas an integer; addedscore: "desc"tosortDefaultDir, matching the existing default-order-by-score direction inApplication.php's thread comparator.public/assets/forte.css: added.paned-list-score-head/.paned-list-score(5rem, right-aligned, same as.paned-list-replies-head/.paned-list-replies) and included.paned-list-scorein the existing selected-row text-color rule.
Verification:
php -lon the template — no syntax errors;node --checkonpaned_board_reader.js— no syntax errors.Started a throwaway local server on
127.0.0.1:8010(stopped after verification) and curled/forte: head row now includes a Score column button, and each row renders a.paned-list-scorespan with the thread'sscore_totalvalue (e.g.1,0).Assets are fingerprinted dynamically by content hash at request time (
AssetFingerprint::fingerprintedPath), so editingforte.css/paned_board_reader.jsdirectly takes effect immediately with no separate build step.
Notes:
score_totalcan be negative perTagScore; rendering is a plain(int)cast with no special formatting, so negative values display correctly (e.g.-2) with no additional handling needed.The new fixed-width column adds 5rem to Board's fixed-column total (now ~32rem); no desktop-width layout regression observed. The narrow-viewport column-squeeze bug remains out of scope here, tracked under
forte_mobile_friendly_step1_solution_assessment.md.