Skip to content

release: v1.3.0 - #111

Merged
datvt243 merged 16 commits into
mainfrom
release/v1.3.0
Sep 5, 2026
Merged

release: v1.3.0#111
datvt243 merged 16 commits into
mainfrom
release/v1.3.0

Conversation

@datvt243

@datvt243 datvt243 commented Sep 5, 2026

Copy link
Copy Markdown
Owner

3bad45f chore(release): bump version to v1.3.0
6fd970f Merge pull request #110 from datvt243/chore/agent-hub-sync-20260905
22650b2 chore(agent-hub): backfill #74/#73 bookkeeping + hub-tokens/issues-ls sync
30a7644 Merge pull request #109 from datvt243/chore/archive-diagram-pass-3
1eecc71 chore(agent-hub): archive pass 3 — dev-loop diagram 19.6KB -> 10.1KB
d256e39 Merge pull request #108 from datvt243/chore/agent-hub-sync
5d92927 chore(agent-hub): sync worker-runs.log tracking + /browser-debugger command
33bade6 Merge pull request #106 from datvt243/feat/issue-73-pagination-filtering
4cde424 Merge pull request #105 from datvt243/feat/issue-74-logout-all-sessions
737f76c Merge pull request #107 from datvt243/feat/export-docx
2c6e071 feat(candidate-me): add DOCX export format
1133f1b feat(candidate_profile): add pagination and sort to CV section list endpoints (#73)
03bcb66 feat(auth): add logout-all endpoint to revoke all sessions (#74)
06a441a Merge pull request #104 from datvt243/chore/sync-verifier-rerun-scope
d7223d5 chore(agent-hub): tighten verifier re-run scope, drop stale NORTHSTAR read
62f126f Merge pull request #103 from datvt243/release/v1.2.1

Closes #74.
Closes #73.
Closes #76.

datvt243 and others added 16 commits September 1, 2026 19:09
chore(release): sync v1.2.1 version bump back to staging
… read

Synced from agent-hub-init kit (usage audit 2026-09-02): verifier now
audits the implementer's evidence note by default instead of
independently re-running npm test/npm ci from scratch. Re-run is
reserved for suspicious notes, outward-facing/release nodes (this repo
already shipped one real production bug via v1.2.0 -> v1.2.1), or
project-declared exceptions. Also fixed manifest.yaml reads:
NORTHSTAR.md (unused by the recipe) -> doctrine/MEMORY.md (actually
used in step 4, was undeclared).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
chore(agent-hub): tighten verifier re-run scope, drop stale NORTHSTAR read
Adds POST /api/v1/auth/logout-all so a candidate can invalidate every
access/refresh token issued to them at once, not just the current one
(as /logout already does).

Design differs from the issue's tokenVersion-on-Candidate-model
proposal: instead of adding a Mongo field + an extra DB lookup per
authenticated request, this reuses the exact Redis-with-in-memory-
fallback shape already used by tokenBlacklist.ts. A per-candidate
'invalidated before' timestamp is stored in Redis/mem
(sessionRevocation.ts) and compared against each JWT's standard iat
claim in verifyToken.middleware.ts and authRefreshToken — one more
Redis/mem lookup alongside the blacklist check that already runs on
every request, no schema change, no new DB round trip.

- src/utils/sessionRevocation.ts: invalidateAllSessions / getSessionsInvalidatedAt / isSessionRevoked
- verifyToken.middleware.ts: reject tokens issued before the last logout-all
- auth.controller.ts: authLogoutAll controller + same check in authRefreshToken
- auth.route.ts: POST /logout-all (authenticated via verifyToken)
- locales: logoutAllSuccess (en/vi)
- tests updated/added for verifyToken middleware, authRefreshToken, authLogoutAll

Closes #74
…ndpoints (#73)

GET /api/v1/{education|experience|award|certificate|project|reference}
now accept optional `page`, `limit`, `sort` query params.

Backward compatible by design: omitting `limit` returns the exact same
response as before (`data` is the full, unpaginated array). Passing a
valid `limit` switches `data` to `{ items, pagination: { page, limit,
total, totalPages } }`. `limit` is capped at 100 regardless of what's
requested. `sort` accepts a Mongoose sort expression (e.g. `-createdAt`)
validated against an allowlist regex (no $, can't smuggle an operator);
an invalid value is silently ignored rather than erroring.

- services/index.ts: baseFindDocument gains page/limit/sort, applies
  .sort()/.skip()/.limit() + a parallel countDocuments() only when a
  valid limit is given
- candidate_profile/BaseController.ts: baseGetAll parses page/limit/sort
  from req.query, validates sort against an allowlist
- swagger.config.ts: shared PageParam/LimitParam/SortParam + Pagination
  schema
- 6 CV-section routers (education/experience/award/certificate/project/
  reference): wired the new query params into their GET / swagger docs.
  generalInformation excluded — its GET / returns a single per-candidate
  document, not a list, so pagination doesn't apply.
- tests: baseFindDocument.test.ts, BaseController.test.ts

Closes #73
- src/services/createDocx.ts (new): buildDocxContent()/renderDocxDocument()
  content-model + renderer using the `docx` package; createCVDocx() packs
  and streams the response with the correct OOXML content-type/filename.
- src/candidate_me/index.ts: fnExportPDF gains a `format === 'docx'` branch,
  same shape/position as the existing `format === 'json'` branch, right
  before the PDF fallback — reuses the same handlerGetAboutMe() call, no
  duplicate data-fetch.
- src/routers/api/v1/index.ts: Swagger doc only — `/download-pdf`'s format
  enum [pdf, json] -> [pdf, json, docx], added the docx response content
  entry. No route/logic change.
- package.json/package-lock.json: added docx ^9.7.1 (MIT, no native deps).
- src/__tests__/services/createDocx.test.ts (new, 6 tests).
- agent-hub/haven/diagrams/dev-loop.prime-mermaid.md: add-docx-export-format
  node PENDING -> SEALED.

npx tsc --noEmit: clean.
npm test: Test Suites: 11 passed, 11 total / Tests: 60 passed, 60 total /
Time: 4.611 s.
npm run build: clean.

Live-verified: GET /download-pdf?format=docx returns a real .docx (file(1)
confirms "Microsoft Word 2007+", document.xml contains the candidate's
real data); ?format=json and no-format (PDF) paths unaffected.

Node: add-docx-export-format (SEALED)
Evidence: agent-hub/evidence/implementer/2026-09-02/add-docx-export-format-{plan,diff}.md
          agent-hub/evidence/verifier/2026-09-02/add-docx-export-format-seal.md

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
feat(candidate-me): add DOCX export format
feat(auth): add logout-all endpoint to revoke all sessions (#74)
feat(candidate_profile): add pagination and sort to CV section list endpoints (#73)
…ommand

Patches the 2026-09-02 kit feature (hub_bytes_before/after + worker-runs.log
logging) into pick_next.md/implement.md/verify_seal.md/evidence/README.md/
hub-tokens/SKILL.md — this hub was missing it entirely. Adds
.claude/commands/browser-debugger.md (spec existed in agent-hub-init's
kit/custom-commands/, wasn't generated here yet).

Left untouched (flagged for operator decision, not auto-applied):
- dev-loop.prime-mermaid.md is 19598B, over the 15KB /hub-tokens threshold
  — an archive pass is due but the diagram is a PROTECTED file, not
  something /sys edits on its own.
- kit/custom-commands/release.md was NOT generated as
  .claude/commands/release.md — this project already has a more capable
  .claude/skills/release/SKILL.md (worktree-isolated build gate, real
  GitHub required_status_checks polling, first-release handling) that
  would collide with the generic spec under the same /release name.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0183N1xtARurw92SWfHL6cL9
chore(agent-hub): sync worker-runs.log tracking + /browser-debugger
/hub-tokens had flagged dev-loop.prime-mermaid.md at 19,598B, over the
15KB threshold. Moved the 4 remaining full-content SEALED rows
(add-docx-export-format, agent-hub-token-cleanup-20260830,
add-visit-tracking, fix-visit-model-missing-id — dated 2026-08-30 through
2026-09-02) verbatim into dev-loop-archive.md's new '3rd pass' section,
replaced each with a compact pointer row — same convention as the file's
own 1st/2nd archive passes. Nothing deleted, nothing reworded.

Result: 19,598B -> 10,143B (-48%), comfortably back under the 15KB
threshold. Every SEALED row is now a pointer; only the 10 PENDING nodes
stay full-content (never archived, they're not SEALED yet).

npm test: 13 suites / 77 tests passed. npm run build: tsc clean.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0183N1xtARurw92SWfHL6cL9
chore(agent-hub): archive pass 3 — dev-loop diagram 19.6KB -> 10.1KB
… sync

Seals two nodes that had real, merged src/ code (PR #105, PR #106) but no
diagram node or evidence note at the time:
- add-logout-all-sessions (#74)
- add-pagination-filtering-cv-sections (#73)

Both verified independently via subagent (SEAL, zero src/ diff — pure
documentation catch-up). Also carries forward pre-existing uncommitted
changes: hub-tokens/SKILL.md's doctrine/domains/PROJECT.md threshold
check, and the issues-ls command file.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hdp892ahsFcZfmM5g2yDBA
chore(agent-hub): backfill #74/#73 bookkeeping + hub-tokens/issues-ls sync
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hdp892ahsFcZfmM5g2yDBA
@datvt243
datvt243 merged commit b416e20 into main Sep 5, 2026
3 checks passed
@datvt243
datvt243 deleted the release/v1.3.0 branch September 5, 2026 22:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant