Commit Graph

155 Commits

Author SHA1 Message Date
6ab6c3c0bf Fix admin message auto-dismiss and Category plural label
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Successful in 1m47s
CI / pr-e2e (pull_request) Successful in 1m46s
Admin messages now auto-clear after 8 seconds via the w-messages
Stimulus controller's autoClear value, preventing message pile-up.
Category model gains verbose_name_plural so Wagtail shows "Categories"
instead of "Categorys" in the snippets menu.

Closes #62

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 00:13:00 +00:00
e75dda84ef Merge pull request 'Migrate deploy workflow to shared deploy/OpenBao model' (#60) from fix/ci-openbao-deploy-model into main
All checks were successful
CI / ci (push) Has been skipped
CI / pr-e2e (push) Has been skipped
CI / nightly-e2e (push) Has been skipped
CI / deploy (push) Successful in 3m2s
Reviewed-on: #60
2026-03-18 23:08:55 +00:00
Mark
b0e009d606 Migrate deploy workflow to OpenBao SSH CA
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Successful in 3m2s
CI / pr-e2e (pull_request) Successful in 3m6s
2026-03-17 16:56:45 +00:00
3848cb6d23 Merge pull request 'Guard admin messages from leaking or duplicating' (#59) from fix/issue-57-message-followup into main
Some checks failed
CI / ci (push) Has been skipped
CI / pr-e2e (push) Has been skipped
CI / deploy (push) Has been skipped
CI / nightly-e2e (push) Failing after 1m19s
Reviewed-on: #59
2026-03-15 18:53:41 +00:00
d0a90ce8ff Update generated Tailwind stylesheet
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / pr-e2e (pull_request) Successful in 1m22s
CI / ci (pull_request) Successful in 1m49s
2026-03-15 18:19:58 +00:00
9d7821b94d Fix mypy typing for admin message guard
Some checks failed
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / pr-e2e (pull_request) Successful in 1m26s
CI / ci (pull_request) Failing after 1m50s
2026-03-15 17:39:53 +00:00
8e43409895 Merge remote-tracking branch 'origin/main' into fix/issue-57-message-followup
Some checks failed
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Failing after 30s
CI / pr-e2e (pull_request) Successful in 1m29s
2026-03-15 17:28:38 +00:00
9b3992f250 Guard admin messages from leaking to frontend 2026-03-15 17:28:33 +00:00
fbc9a1ff0a Merge pull request 'Fix Wagtail article publish regressions' (#58) from fix/issue-57-admin-publish-regressions into main
All checks were successful
CI / ci (push) Has been skipped
CI / pr-e2e (push) Has been skipped
CI / nightly-e2e (push) Has been skipped
CI / deploy (push) Successful in 1m41s
Reviewed-on: #58
2026-03-15 17:09:44 +00:00
1a0617fbd0 Fix Wagtail article publish regressions
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Successful in 1m17s
CI / pr-e2e (pull_request) Successful in 1m46s
2026-03-15 16:53:49 +00:00
15ef35e249 Merge pull request 'feat(health): add /health/ endpoint for OpsLog monitoring' (#56) from feature/health-endpoint-opslog into main
Some checks failed
CI / ci (push) Has been skipped
CI / pr-e2e (push) Has been skipped
CI / deploy (push) Has been skipped
CI / nightly-e2e (push) Failing after 1m25s
Reviewed-on: #56
Reviewed-by: mark <mark@linteldigital.com>
2026-03-06 17:42:10 +00:00
Codex_B
a450e7409f fix: address health endpoint review feedback
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Successful in 1m33s
CI / pr-e2e (pull_request) Successful in 1m42s
2026-03-06 16:08:52 +00:00
Codex_B
10e39b8331 feat: add health monitoring endpoint
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / pr-e2e (pull_request) Successful in 1m38s
CI / ci (pull_request) Successful in 1m46s
2026-03-06 15:46:08 +00:00
59cc1c41a9 Merge pull request 'fix(editor): remove SEO panel duplication and auto-default draft metadata' (#54) from fix/article-editor-defaults into main
Some checks failed
CI / ci (push) Has been skipped
CI / pr-e2e (push) Has been skipped
CI / deploy (push) Has been skipped
CI / nightly-e2e (push) Failing after 1m38s
Reviewed-on: #54
2026-03-04 22:47:21 +00:00
codex_a
2c2cb5446f test(core): keep blank-summary integrity check by bypassing auto-summary save hook
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / pr-e2e (pull_request) Successful in 1m29s
CI / ci (pull_request) Successful in 1m40s
2026-03-04 22:42:30 +00:00
codex_a
521075cf04 fix(editor): auto-default article metadata and de-duplicate SEO panels
Some checks failed
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Failing after 1m33s
CI / pr-e2e (pull_request) Successful in 1m35s
2026-03-04 22:32:14 +00:00
93d3e4703b Merge pull request 'fix(preview): stop frame-policy conflicts and enforce canonical host' (#52) from fix/wagtail-preview-frame-policy into main
All checks were successful
CI / ci (push) Has been skipped
CI / pr-e2e (push) Has been skipped
CI / nightly-e2e (push) Has been skipped
CI / deploy (push) Successful in 25s
Reviewed-on: #52
2026-03-04 21:07:11 +00:00
e09e6a21f0 Merge branch 'main' into fix/wagtail-preview-frame-policy
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Successful in 1m38s
CI / pr-e2e (pull_request) Successful in 1m35s
2026-03-04 20:59:21 +00:00
codex_a
4ea1e66cdf fix(preview): align frame policy and canonical host for Wagtail preview
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Successful in 1m32s
CI / pr-e2e (pull_request) Successful in 1m34s
2026-03-04 20:51:23 +00:00
c2ad0e67c3 Merge pull request 'Restore exact original comment/reply button styles' (#51) from fix/restore-exact-comment-buttons into main
All checks were successful
CI / ci (push) Has been skipped
CI / pr-e2e (push) Has been skipped
CI / nightly-e2e (push) Has been skipped
CI / deploy (push) Successful in 25s
Reviewed-on: #51
2026-03-04 13:09:40 +00:00
Mark
96a3971781 Restore exact original comment/reply button styling
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / pr-e2e (pull_request) Successful in 1m29s
CI / ci (pull_request) Successful in 1m39s
- use exact pre-makeover main comment button classes/spacing/icon sizing
- use exact pre-makeover reply button classes/text casing
- rebuild Tailwind CSS
2026-03-04 13:05:18 +00:00
989d0fc20d Merge pull request 'Follow-up: fix reply alignment and Turnstile render on reply open' (#50) from fix/comments-followup-reply-turnstile into main
All checks were successful
CI / ci (push) Has been skipped
CI / pr-e2e (push) Has been skipped
CI / nightly-e2e (push) Has been skipped
CI / deploy (push) Successful in 25s
Reviewed-on: #50
2026-03-04 12:35:43 +00:00
Mark
2f9babe18e Adjust comment UX per feedback: reply alignment and Turnstile init
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / pr-e2e (pull_request) Successful in 1m29s
CI / ci (pull_request) Successful in 1m39s
- move reply controls into normal left-aligned flow
- restore stronger primary/reply button treatments
- render Turnstile when reply details panels are opened
- rebuild Tailwind CSS
2026-03-04 12:32:55 +00:00
d39fff2be0 Merge pull request 'Fix comments section UX regressions and HTMX reply/Turnstile behavior' (#49) from fix/comments-standardize-htmx-turnstile into main
All checks were successful
CI / ci (push) Has been skipped
CI / pr-e2e (push) Has been skipped
CI / nightly-e2e (push) Has been skipped
CI / deploy (push) Successful in 25s
Reviewed-on: #49
Reviewed-by: codex_a <codex_a@linteldigital.com>
2026-03-04 12:22:54 +00:00
Mark
badd61b0aa Rebuild Tailwind CSS for comments UI updates
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / pr-e2e (pull_request) Successful in 1m31s
CI / ci (pull_request) Successful in 1m38s
2026-03-04 12:17:18 +00:00
Mark
a001ac1de6 Fix comments UX regressions and HTMX/Turnstile behavior
Some checks failed
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / pr-e2e (pull_request) Successful in 1m32s
CI / ci (pull_request) Failing after 1m39s
- standardize comment and reply UI layout
- target replies with stable OOB container IDs
- remove stale empty-state on approved HTMX comments
- initialize Turnstile widgets after HTMX swaps
- add regression tests for empty-state, OOB targets, and reply form rerender

Refs #48
2026-03-04 11:46:15 +00:00
9bee1b9a12 Merge pull request 'fix: pin deploy job to agent-workspace runner' (#47) from fix/deploy-runner-label into main
All checks were successful
CI / ci (push) Has been skipped
CI / pr-e2e (push) Has been skipped
CI / nightly-e2e (push) Has been skipped
CI / deploy (push) Successful in 25s
Reviewed-on: #47
2026-03-04 11:24:17 +00:00
Mark
4796a08acc fix: pin deploy job to agent-workspace runner
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / pr-e2e (pull_request) Successful in 1m33s
CI / ci (pull_request) Successful in 1m37s
The deploy job uses SSH to connect to lintel-prod-01. When the
lintel-prod-01 runner picks up the job, the Docker container cannot
SSH back to its own host, causing 'dial tcp: i/o timeout'. Pin to
the 'deploy' label which only exists on agent-workspace.
2026-03-04 11:20:07 +00:00
17484fa815 Merge pull request 'ci: retrigger deploy after fixing PROD_SSH_KEY secret' (#46) from ci/retrigger-deploy into main
Some checks failed
CI / ci (push) Has been skipped
CI / pr-e2e (push) Has been skipped
CI / nightly-e2e (push) Has been skipped
CI / deploy (push) Failing after 32s
2026-03-04 11:16:13 +00:00
Mark
96b49bb064 ci: retrigger deploy after fixing PROD_SSH_KEY secret
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / pr-e2e (pull_request) Successful in 1m33s
CI / ci (pull_request) Successful in 1m37s
2026-03-04 11:11:29 +00:00
3ccb872cc3 Merge pull request 'feat: redesign comments section for better UX/UI' (#45) from feature/comments-design-makeover into main
Some checks failed
CI / ci (push) Has been skipped
CI / pr-e2e (push) Has been skipped
CI / nightly-e2e (push) Has been skipped
CI / deploy (push) Failing after 32s
Reviewed-on: #45
Reviewed-by: codex_a <codex_a@linteldigital.com>
2026-03-04 11:00:55 +00:00
Mark
b2ea693d9d fix: resolve review blockers for comments redesign
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / pr-e2e (pull_request) Successful in 1m36s
CI / ci (pull_request) Successful in 1m38s
- Fix context key mismatch in _render_htmx_success ('reply' vs 'comment')
- Update OOB swap selector to match new sibling relationship for replies container
- Update HTMX reply tests to verify correct OOB selector and content rendering
- Fix variable naming in _reply.html to match parent context
2026-03-04 10:54:25 +00:00
Mark
48f395866b chore: rebuild Tailwind CSS for comments redesign
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / pr-e2e (pull_request) Successful in 1m35s
CI / ci (pull_request) Successful in 1m37s
2026-03-04 10:31:04 +00:00
Mark
c8e01f5201 feat: align comments redesign with new partials structure
Some checks failed
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / pr-e2e (pull_request) Successful in 1m34s
CI / ci (pull_request) Failing after 1m36s
- Re-applied redesign to new partial templates (_comment.html, _reply.html, etc.)
- Preserved HTMX and reactions functionality from v2 update
- Improved spacing and typography across all comment components
- Verified all E2E tests pass with new structure
2026-03-04 10:28:19 +00:00
Mark
380dcb22c3 feat: redesign comments section for better UX/UI
- Redesigned comment cards with improved spacing and typography
- Added vertical line indicator for reply nesting
- Implemented native details/summary toggle for reply forms (replacing JS)
- Styled 'Join the conversation' section to be more distinct from existing comments
- Added solid-pink shadow to Tailwind configuration
- Updated E2E tests to match new UI structure and elements
2026-03-04 10:24:37 +00:00
ed878bbdae Merge pull request 'feat(comments): v2 — HTMX, Turnstile, reactions, design refresh' (#44) from feature/comments-v2 into main
Some checks failed
CI / ci (push) Has been skipped
CI / pr-e2e (push) Has been skipped
CI / deploy (push) Has been skipped
CI / nightly-e2e (push) Failing after 1m47s
Reviewed-on: #44
Reviewed-by: codex_a <codex_a@linteldigital.com>
2026-03-04 00:04:42 +00:00
Mark
0eddb9696a fix: validate parent_id in error path, rebuild Tailwind CSS
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Successful in 1m29s
CI / pr-e2e (pull_request) Successful in 1m44s
- Defensively parse parent_id in _render_htmx_error: coerce to int,
  fallback to main form if non-numeric or parent not found
- Rebuild Tailwind CSS to include new utility classes from templates
- Add test for tampered parent_id falling back to main form

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-04 00:00:23 +00:00
Mark
c01fc14258 fix: resolve review round 2, E2E failures, and mypy error
Some checks failed
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / pr-e2e (pull_request) Successful in 1m30s
CI / ci (pull_request) Failing after 1m48s
Review blocker A — form error swap and false success:
- Change HTMX contract so forms target their own container (outerHTML)
  instead of appending to #comments-list
- Use OOB swaps to append approved comments to the correct target
- Add success/error message display inside form templates
- Remove hx-on::after-request handlers (no longer needed)

Review blocker B — reply rendering shape:
- Create _reply.html partial with compact reply markup
- Approved replies via HTMX now use compact template + OOB swap
  into parent's .replies-container
- Reply form errors render inside reply form container

E2E test fixes:
- Update 4 failing tests to wait for inline HTMX messages instead
  of redirect-based URL assertions
- Add aria-label='Comment form errors' to form error display
- Rename test_reply_submission_redirects to
  test_reply_submission_shows_moderation_message

Mypy internal error workaround:
- Add mypy override for apps.comments.views (django-stubs triggers
  internal error on ORM annotate() chain with mypy 1.11.2)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-03 23:47:12 +00:00
Mark
88ce59aecc fix: resolve 5 PR review blockers for comments v2
Some checks failed
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / pr-e2e (pull_request) Failing after 2m7s
CI / ci (pull_request) Failing after 2m43s
1. Reply HTMX target: server sends HX-Retarget/HX-Reswap headers to
   insert replies inside parent comment's .replies-container div
2. Empty thread swap target: always render #comments-list container
   even when no approved comments exist
3. Reaction hydration: add _annotate_reaction_counts() helper that
   hydrates reaction_counts and user_reacted on comments in
   get_context(), comment_poll(), and single-comment responses
4. HTMX error swap: return 200 instead of 422 for form errors since
   HTMX 2 doesn't swap 4xx responses by default
5. Vary header: use patch_vary_headers() instead of direct assignment
   to avoid overwriting existing Vary directives

Also fixes _get_session_key() to handle missing session attribute
(e.g. from RequestFactory in performance tests).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-03 23:24:20 +00:00
Mark
a118df487d fix(comments): resolve ruff lint errors
Some checks failed
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Failing after 1m39s
CI / pr-e2e (pull_request) Failing after 2m4s
Remove unused imports (urlencode, F) and fix import sort order in
test_v2.py.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-03 22:56:38 +00:00
Mark
d0a550fee6 feat(comments): v2 — HTMX, Turnstile, reactions, design refresh
Some checks failed
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Failing after 37s
CI / pr-e2e (pull_request) Failing after 2m58s
- Extract comment templates into reusable partials (_comment.html,
  _comment_form.html, _comment_list.html, _reply_form.html, etc.)
- Add HTMX progressive enhancement: inline form submission with
  partial responses, delta polling for live updates, form reset on
  success, success/moderation toast feedback
- Integrate Cloudflare Turnstile for invisible bot protection:
  server-side token validation with hostname check, fail-closed on
  errors/timeouts, feature-flagged via TURNSTILE_SECRET_KEY env var
- Auto-approve comments that pass Turnstile; keep manual approval
  as fallback when Turnstile is disabled (model default stays False)
- Add CommentReaction model with UniqueConstraint for session-based
  anonymous reactions (heart/thumbs-up), toggle support, separate
  rate-limit bucket (20/min)
- Add comment poll endpoint (GET /comments/poll/<id>/?after_id=N)
  for HTMX delta polling without duplicates
- Update CSP middleware to allow challenges.cloudflare.com in
  script-src, connect-src, and frame-src
- Self-host htmx.min.js (v2.0.4) to minimize CSP surface area
- Add django-htmx middleware and requests to dependencies
- Add Unapprove bulk action to Wagtail admin for moderation
- Extend PII purge command to anonymize reaction session_key
- Design refresh: neon glow avatars, solid hover shadows, gradient
  section header, cyan reply borders, grid-pattern empty state,
  neon-pink focus glow on form inputs
- Add turnstile_site_key to template context via context processor
- 18 new tests covering HTMX contracts, Turnstile success/failure/
  timeout/hostname-mismatch, polling deltas, reaction toggle/dedup/
  rate-limit, CSP headers, and PII purge extension

Closes #43

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-03 22:52:59 +00:00
cc25d2ad2e Merge pull request 'feat: implement article search with PostgreSQL full-text search' (#42) from feature/article-search into main
All checks were successful
CI / ci (push) Has been skipped
CI / pr-e2e (push) Has been skipped
CI / nightly-e2e (push) Has been skipped
CI / deploy (push) Successful in 26s
Reviewed-on: #42
Reviewed-by: codex_a <codex_a@linteldigital.com>
2026-03-03 21:58:07 +00:00
Mark
99b06d1f3b chore: rebuild Tailwind CSS for search template classes
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Successful in 1m21s
CI / pr-e2e (pull_request) Successful in 1m34s
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-03 21:30:26 +00:00
Mark
906206d4cd feat: implement article search with PostgreSQL full-text search
Some checks failed
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Failing after 1m21s
CI / pr-e2e (pull_request) Successful in 1m33s
- Configure Wagtail database search backend with English search config
- Add django.contrib.postgres to INSTALLED_APPS for full PG FTS support
- Expand ArticlePage.search_fields: body_text (excl. code blocks),
  AutocompleteField(title), RelatedFields(tags), FilterFields
- Add search view at /search/?q= with query guards (strip, max 200 chars,
  empty/whitespace handling) and pagination preserving query param
- Replace nav Subscribe CTA with compact search box (desktop + mobile)
- Add search box to article index page alongside category/tag filters
- Create search results template reusing article_card component
- Add update_index to deploy entrypoint for automated reindexing
- Update existing tests for nav change, add comprehensive search tests

Closes #41

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-03 21:25:11 +00:00
eebd5c9978 Merge pull request 'feat: improve Wagtail admin editor experience for articles' (#40) from feature/improve-editor-experience into main
All checks were successful
CI / ci (push) Has been skipped
CI / pr-e2e (push) Has been skipped
CI / nightly-e2e (push) Has been skipped
CI / deploy (push) Successful in 25s
Reviewed-on: #40
Reviewed-by: codex_a <codex_a@linteldigital.com>
2026-03-03 20:46:30 +00:00
Mark
2acb194d40 Add E2E_MODE=1 to CI E2E containers for admin user seeding
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Successful in 1m19s
CI / pr-e2e (pull_request) Successful in 1m33s
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-03 20:42:33 +00:00
Mark
b897447296 Address PR review feedback
Some checks failed
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Successful in 1m19s
CI / pr-e2e (pull_request) Failing after 2m13s
- Gate e2e-admin superuser behind E2E_MODE env var (security)
- Add status and tag filters to ArticleFilterSet
- Set default_ordering to -published_date on listing viewset
- Add summary to ArticlePage.search_fields for search support
- Add 4 new tests for filters, ordering, and search fields

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-03 20:37:58 +00:00
Mark
d387bf4f03 Rebuild Tailwind CSS for new dashboard panel template
All checks were successful
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / pr-e2e (pull_request) Successful in 1m30s
CI / ci (pull_request) Successful in 1m31s
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-03 20:04:02 +00:00
Mark
be8d6d4a12 fix: resolve ruff/mypy lint errors and fix E2E test failures
Some checks failed
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Failing after 1m19s
CI / pr-e2e (pull_request) Successful in 1m31s
- Use datetime.timedelta instead of timezone.timedelta (mypy)
- Fix import ordering (ruff I001)
- Fix admin sidebar E2E selector: use #wagtail-sidebar (Wagtail 7)
- Set deterministic published_date on seeded E2E articles for stable ordering
- Fix nightly test strict-mode violation: exact=True for Comments heading

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-03 14:24:01 +00:00
Mark
2b1e7ff4eb fix: resolve ruff lint errors (unused imports, import sorting)
Some checks failed
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Failing after 28s
CI / pr-e2e (pull_request) Failing after 1m37s
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-03 14:10:10 +00:00