Commit Graph

1422 Commits

Author SHA1 Message Date
saravanakumardb1
610a59fdc3 feat(gitea): parameterize owner via GITEA_NPM_OWNER + add doctor/token helpers
Eliminates the three operational pain points hit in the last
owner-rename incident:

1. Owner-rename drift across 14 repos
   - npmrc.template now uses ${GITEA_NPM_OWNER:-learning_ai_user}
   - switch-network.sh exports GITEA_NPM_OWNER on shell start
   - Future renames are a one-line env change, not 14 git commits

2. Stale shell-env tokens (file rotated, env didn't)
   - scripts/gitea/token.sh: status|print|validate|rotate subcommands
   - 'eval "$(bash scripts/gitea/token.sh print --export)"' refreshes
     any shell without re-sourcing ~/.zshrc
   - rotate uses Gitea API + macOS Keychain for admin creds

3. No pre-deploy validation
   - scripts/gitea/doctor.sh: NETWORK + DNS + token consistency +
     registry HTTP 200 + optional package@version probe
   - Run before any deploy that needs @bytelyst/* from Gitea
2026-05-27 00:41:47 -07:00
saravanakumardb1
d1d88db4dd chore(gitea): rename npm package owner ByteLyst -> learning_ai_user 2026-05-26 18:38:57 -07:00
root
59c4638f85 docs(tracker): close review-pass gaps in tracker docs
Some checks failed
CI — Common Platform / Build, Test & Typecheck (push) Failing after 12m58s
Publish @bytelyst/* packages / publish (push) Failing after 12m26s
1) Dual-numbering reconciliation
   - ROADMAP groups Phase 1 by topic (1.1-1.8); PRH groups by execution
     day (1.A-1.F). Added bidirectional mapping table to both docs so
     agents can cross-reference any phase reference unambiguously.

2) Fresh-agent quick pointer at top of ROADMAP
   - New section tells a new agent exactly which 4 docs to read, in
     what order, and which task to pick up first (1.A from the tracker).

3) Broken sub-roadmap links neutralised
   - 03_RICH_ITEMS_ROADMAP.md, 04_AGENT_API_ROADMAP.md,
     05_INTAKE_ROADMAP.md were linked but did not exist. Replaced with
     plain text + 'create when Phase N begins' note so the link doesn't
     404. Matches the pattern already used in IMPLEMENTATION_TRACKER.

4) Runbook stubs created (Phase 1.F.11/1.F.12 placeholders)
   - docs/runbooks/MEK_ROTATION.md — adapted from NoteLett bcad7d3
   - docs/runbooks/SECRET_MANAGEMENT.md — secret inventory + resolution
     path + compromise procedure + PII scrubbing rule
   Each is a stub now; full content lands when Phase 1.F executes.

5) Stale 'today' wording removed from PRH baseline table
   - Replaced 'after fix today' with 'as of 2026-05-25' so the doc
     ages cleanly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 11:48:33 +00:00
root
930f97ff63 docs(tracker): move ROADMAP to docs/ + scaffold NoteLett-style structure
Reorganises tracker-web docs to match the NoteLett + FlowMonk sibling-repo
convention. Old root ROADMAP.md replaced by full docs/ scaffold:

  docs/
  ├── ROADMAP.md                              (master phase tracker, v3)
  ├── PRD.md                                  (product requirements doc)
  ├── PRODUCTION_READINESS_HANDOFF_ROADMAP.md (adapted from NoteLett)
  ├── IMPLEMENTATION_TRACKER.md               (per-slice tracker w/ commit SHAs)
  └── roadmaps/
      ├── 00_MASTER_EXECUTION_PLAN.md
      └── 01_FOUNDATIONS_AND_DECISIONS.md

Incorporates production-readiness learnings from recent work in sibling
repos (May 22-23, 2026):

From learning_ai_notes:
- UI primitives migration via Primitives.tsx adapter (UI5-UI8 pattern)
- UI drift ratchet CI gate (one-way enforcement, hard-zero categories)
- Docker hardening: NEXT_PUBLIC bake-time, standalone static-chunks fix,
  corp-proxy build args, tarball-based docker-prep.sh
- Cosmos emulator smoke job for partition-key path coverage
- Live shared-service smoke (pnpm smoke:local)
- MEK rotation + secret-management runbooks
- React+React-DOM pnpm.overrides pin
- Backend domain events emission (item.created, status_changed, etc.)
- Workspace-path canonicalization

From learning_ai_flowmonk:
- @axe-core/playwright accessibility tests in CI
- E2E cleanup traps (prevent orphan resource accumulation)
- Playwright deployed-stack support (BASE_URL switch)
- IPv4 healthcheck (127.0.0.1, not localhost)
- Mobile palette centralization (theme/colors.ts)
- Release guards CI workflow
- Runtime replay preview pattern (for webhook event replay)

Adds 5 new bugs to known-issues table (B-019..B-023) for hardcoded
colors, direct ui imports, NEXT_PUBLIC runtime hardcoding, no mobile
layout, no i18n.

New Phase 6 expanded to cover mobile + a11y + i18n + theming.
Phase 4 expanded with cross-product routing + import wizard.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 11:28:55 +00:00
root
a6cd7fe965 docs(tracker): improve roadmap v2 — gaps/bugs addressed
Review pass additions:
- Add permissions matrix (public/auth-user/PM/agent per action)
- Add improvement + chore item types (B-017)
- Add custom status workflows
- Add real-time updates section (SSE/WebSocket) — new B-011
- Add global search (Ctrl+K) — new B-018
- Add notification preferences + in-app notification centre
- Add optimistic UI callout
- Add API versioning strategy (/v1/, Deprecation/Sunset headers)
- Add cursor pagination + since-timestamp to agent GET example
- Add ciStatus field to PR link payload
- Add `metadata` map documented explicitly for agent KV data
- Add data retention/archival to Phase 5
- Add import wizard (Jira/Linear/GitHub CSV) to Phase 4
- Add upvote cap (server-side, fixes B-004 properly) to Phase 4
- Fix all tracker URLs to https://tracker.bytelyst.com
- Add phase dependency annotations (🔗) on features with prerequisites
- Expand bug table: add B-011..B-018, add Phase column
- Tighten agent API examples: show response shape, cursor, X-Product-Id header

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 10:51:55 +00:00
root
0f2956884c docs(tracker): add comprehensive production roadmap
Covers 6 phases with full checklists:
- Phase 0: current shipped state (fully documented)
- Phase 1: production hardening (health fixes, rate limiting, tests, security)
- Phase 2: Linear/Jira-parity rich items (markdown, attachments, sub-tasks,
           relationships, custom fields, activity log, drag-and-drop Kanban)
- Phase 3: Agent & automation API (claim, PR-link, webhook in/out, SDK, AI triage)
- Phase 4: multi-source intake (public, Slack, email-to-tracker, GitHub/Gitea sync)
- Phase 5: analytics & intelligence (cycle time, SLA alerting, reports)
- Phase 6: mobile & accessibility (PWA, WCAG 2.1 AA, dark mode)

Includes:
- 15 known bugs/gaps table with severity ratings (B-001..B-015)
- Submission guide for public users, internal team, and coding agents
- Full agent API usage examples (claim, PR-link, status update)
- Release schedule through 2026-09-13

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 10:40:46 +00:00
root
9e8d0bd048 ci: add Gitea-compatible package publish modes
All checks were successful
CI — Common Platform / Build, Test & Typecheck (push) Successful in 5m28s
Publish @bytelyst/* packages / publish (push) Successful in 5m54s
2026-05-25 07:25:52 +00:00
root
442ad629c2 ci: harden Gitea package publish workflow
All checks were successful
CI — Common Platform / Build, Test & Typecheck (push) Successful in 2m53s
2026-05-25 07:18:30 +00:00
root
d63c772271 chore(roadmap): update Gitea runner completion evidence
All checks were successful
Publish @bytelyst/* packages / publish (push) Successful in 3m10s
2026-05-25 06:59:47 +00:00
root
e3b20446ec ci: fix consumer verification path
All checks were successful
CI — Common Platform / Build, Test & Typecheck (push) Successful in 3m53s
Publish @bytelyst/* packages / publish (push) Successful in 4m14s
2026-05-25 06:27:55 +00:00
root
daabd37c78 ci: verify published packages as consumers
All checks were successful
CI — Common Platform / Build, Test & Typecheck (push) Successful in 3m33s
Publish @bytelyst/* packages / publish (push) Successful in 2m27s
2026-05-25 06:20:30 +00:00
root
c7f6b981f1 ci: use mounted npmrc for pnpm publish
All checks were successful
CI — Common Platform / Build, Test & Typecheck (push) Successful in 2m9s
Publish @bytelyst/* packages / publish (push) Successful in 2m39s
2026-05-25 06:14:34 +00:00
root
b46d4ba0b6 ci: run Gitea publish workflow with bash
Some checks failed
CI — Common Platform / Build, Test & Typecheck (push) Successful in 3m45s
Publish @bytelyst/* packages / publish (push) Failing after 4m6s
2026-05-25 06:09:29 +00:00
root
079e46b74d ci: simplify Gitea publish workflow trigger
Some checks failed
Publish @bytelyst/* packages / publish (push) Failing after 1m38s
CI — Common Platform / Build, Test & Typecheck (push) Successful in 1m55s
2026-05-25 06:04:52 +00:00
root
9b884d6e85 ci: fix Hostinger Gitea workflows
All checks were successful
CI — Common Platform / Build, Test & Typecheck (push) Successful in 1m29s
2026-05-25 06:02:05 +00:00
root
aea57e1376 chore: release @bytelyst/errors v0.1.8
Some checks failed
CI — Common Platform / Build, Test & Typecheck (push) Failing after 4s
CI — Common Platform / Publish @bytelyst/* to Gitea npm registry (push) Has been skipped
2026-05-25 05:58:48 +00:00
root
7d8aebd5d4 ci: add Gitea package publish workflow
Some checks failed
CI — Common Platform / Build, Test & Typecheck (push) Failing after 3s
CI — Common Platform / Publish @bytelyst/* to Gitea npm registry (push) Has been skipped
2026-05-25 05:57:38 +00:00
root
48fd55ccf2 chore(roadmap): mark P3.2 complete 2026-05-25 04:07:27 +00:00
root
703a514508 chore(roadmap): mark P3.1 complete 2026-05-25 04:05:48 +00:00
root
eab233b3a0 chore(roadmap): mark P2.3 complete — smoke passed 2026-05-25 03:39:20 +00:00
root
048374fcf9 chore(roadmap): mark P2.2 complete — smoke workflow triggered 2026-05-25 03:39:05 +00:00
root
6edffa413a chore(roadmap): mark P2.1 complete — smoke branch pushed 2026-05-25 03:34:58 +00:00
root
16d8b742e0 chore(roadmap): mark P1.7 complete — runner idle confirmed 2026-05-25 03:18:54 +00:00
root
aed2b4665a chore(roadmap): mark P1.6 complete — service active 2026-05-25 03:17:51 +00:00
root
7d9cfbfab3 chore(roadmap): mark P1.5 complete — token copied 2026-05-25 03:16:35 +00:00
root
19101496a7 chore(roadmap): mark P1.4 complete — runner config migrated 2026-05-25 03:15:54 +00:00
root
74ec038b09 chore(roadmap): mark P1.3 complete — existing runner reused 2026-05-25 03:15:03 +00:00
root
3ee7a3a349 chore(roadmap): mark P1.3 blocked — registration token required 2026-05-25 03:10:55 +00:00
root
4f87390eaa chore(roadmap): mark P1.2 complete — act_runner installed 2026-05-25 03:08:24 +00:00
root
282a3548aa chore(roadmap): mark P1.1 complete — runner user created 2026-05-25 03:07:16 +00:00
root
10751d4ec9 chore(roadmap): mark P0.4 complete — e2e package consent granted 2026-05-25 03:06:32 +00:00
root
3d55daf9b0 chore(roadmap): mark P0.3 complete — instance scope confirmed 2026-05-25 03:06:01 +00:00
root
6907478bce chore(roadmap): mark P0.2 complete — architecture linux-amd64 2026-05-25 03:04:13 +00:00
root
a028fc5b06 chore(roadmap): mark P0.1 complete — pre-flight checks passed
Some checks failed
CI — Common Platform / Build, Test & Typecheck (push) Failing after 0s
CI — Common Platform / Publish @bytelyst/* to Gitea npm registry (push) Has been skipped
2026-05-25 03:03:52 +00:00
root
af46e24ab3 docs(workspace): index gitea runner rollout 2026-05-25 02:32:19 +00:00
root
1bb8b38547 docs: add Hermes delegation channel 2026-05-25 02:18:28 +00:00
root
6eb04a313d docs(ecosystem): tighten Hermes task priority 2026-05-25 01:59:18 +00:00
root
0ddda36d1a docs(ecosystem): add Hermes delegation pack 2026-05-25 01:59:18 +00:00
saravanakumardb1
7381d0f5c0 docs(devops): group Gitea runner docs under gitea-runner/ subfolder
Moves 5 related docs into docs/devops/gitea-runner/ to keep this
multi-doc workstream from colliding with future roadmaps and
delegation prompts in docs/devops/.

Renames:
  HOSTINGER_GITEA_RUNNER_ROADMAP.md     -> ROADMAP.md
  HOSTINGER_GITEA_ACT_RUNNER_SETUP.md   -> ACT_RUNNER_SETUP.md
  GITEA_PACKAGES_PUBLISH_WORKFLOW.md    -> PUBLISH_WORKFLOW.md
  HOSTINGER_GITHUB_RUNNER_SETUP.md      -> _PLAN_B_GITHUB_RUNNER.md
  CODEX_DELEGATION_PROMPT.md            -> (same name, moved)

All internal cross-links updated via sed sweep. Verified no stale
references remain.

Adds README.md in the new folder as the index + pattern doc for
future multi-doc workstreams (one-liner handoff, file map,
architecture summary).

Updated one-liner handoff path:
  Read docs/devops/gitea-runner/CODEX_DELEGATION_PROMPT.md ...
2026-05-24 18:33:45 -07:00
saravanakumardb1
82cdebeb87 docs(devops): add Codex delegation prompt + one-liner handoff
Captures the exact bootstrap prompt to paste to Codex on the
Hostinger VM, plus a one-liner that just points Codex at the prompt
file (after Codex has the repo).

Also documents how to monitor Codex's progress from Cascade side
(grep roadmap-update commits) and how to recover if it gets stuck
(the checkbox state in the roadmap IS the resume pointer).
2026-05-24 18:26:50 -07:00
saravanakumardb1
a55f207f80 docs(devops): add executable roadmap with checklist for Codex agent
Adds HOSTINGER_GITEA_RUNNER_ROADMAP.md — a single execution tracker
that Codex on the Hostinger VM works through phase-by-phase, ticking
checkboxes and recording commit hashes as it goes.

Structure:
- 6 phases (P0 Pre-flight → P5 First real release) + P6 review handoff
- Each task: [ ] checkbox + Commit hash field + Status note
- Detail steps live in the two companion docs (act_runner setup +
  publish workflow); the roadmap is the orchestrator
- Final report section Codex fills in when P0-P5 are complete
- Human review checklist (R1-R9) for verification after handoff
- Operating notes: commit message format, when to ask, never-do list
- Change log table Codex auto-appends to

Critical invariant repeated at P3.6 and P5.4: cross-Gitea SHA1
comparison must match. If it doesn't, Codex stops — it's the
load-bearing architectural guarantee that the dual-Gitea, no-sync-
script model rests on.

Also adds roadmap-pointer banners to the two companion docs
(HOSTINGER_GITEA_ACT_RUNNER_SETUP.md, GITEA_PACKAGES_PUBLISH_WORKFLOW.md)
so anyone landing there knows the master tracker exists.
2026-05-24 18:22:16 -07:00
saravanakumardb1
d1bdcdd9a7 docs(devops): pivot to Gitea Actions as canonical CI; mark GitHub-runner doc as Plan B
Adds two new docs and a banner on the existing GitHub-runner doc.

WHY: the user already has Gitea Actions configured across all 20+
repos (.gitea/workflows/ci.yml). Building a parallel GitHub Actions
self-hosted runner pipeline is unnecessary work that also drags in
GitHub Organization migration pressure (with Vercel/Netlify pricing
side-effects on free tiers).

The canonical architecture instead:
- Each Gitea instance (corp Mac local + Hostinger VM) runs its own
  act_runner.
- A single publish-packages.yml workflow lives in every package-
  publishing repo.
- When the same git tag is pushed to both Giteas, each one builds
  inside the same pinned Docker image (node:20-bookworm@sha256:...)
  with the same lockfile, producing BYTE-IDENTICAL tarballs.
- No sync script is needed; the shared git tag IS the sync mechanism.
- Lockfile integrity hashes match across both registries, so corp Mac
  and personal Mac + Hostinger prod all see the same packages.

New: HOSTINGER_GITEA_ACT_RUNNER_SETUP.md
  - Codex-actionable prompt to install act_runner on the Hostinger VM
  - Pre-flight checks (arch detection, Docker daemon, Gitea reachable)
  - Idempotent user creation, SHA-verified binary download
  - Docker mode runner config with labels mapping ubuntu-latest to
    pinned Node image
  - Smoke test + full E2E with throwaway @bytelyst/_runner-e2e-test
    package
  - The architectural invariant check: cross-Gitea SHA comparison —
    same tag pushed to both must produce identical tarballs
  - Monitoring (Gitea UI, API, systemd journal)
  - Hardening, rollback, deliverables, guardrails, questions

New: GITEA_PACKAGES_PUBLISH_WORKFLOW.md
  - The actual publish-packages.yml triggered by v* tags
  - Docker image pinned by digest for build determinism
  - pnpm@9.12.0 pinned, --frozen-lockfile, host-network container
  - Token mounted as read-only secret file (not env var)
  - Concurrency cancel-in-progress: false (never cancel a publish)
  - Pack tarballs + SHA512 manifest as Gitea Release assets for audit
    trail
  - Two propagation strategies: reusable workflow (preferred) vs
    sync-publish-workflow.sh script
  - Operator runbook for cutting a release
  - Failure-mode table + remediation
  - Deliverables checklist

Updated: HOSTINGER_GITHUB_RUNNER_SETUP.md
  - Added 'PLAN B' banner at the top
  - Cross-links to the Gitea Actions docs
  - Kept the doc intact as a valid alternative if priorities ever
    shift to making GitHub Actions the publish driver
2026-05-24 18:15:48 -07:00
saravanakumardb1
6bf15eae7a docs(devops): Hostinger runner prompt v2 — org migration + monitoring + hardening
Adds the missing pieces revealed during review:

§1 Multi-repo registration decision — choose repo-level vs org-level
   up-front. Default doc remains repo-level, but explicitly calls out
   org-level as the scaling path for 20+ repos.

§2 Pre-flight check additions:
  - Arch detection (x86_64 / aarch64) before downloading runner tarball
  - github.com + objects.githubusercontent.com reachability check
  - gh CLI auth status check (must be saravanakumardb1)

§4 Installation hardening:
  - Step 1 is now idempotent (getent guards on useradd/usermod)
  - Step 3 queries latest runner version via gh api (no more stale pin)
  - Step 3 includes SHA256 verification of the downloaded tarball
    against the release-notes manifest, with explicit STOP-if-mismatch
  - Step 3 has REGISTRATION_URL var with commented Option A/B for
    repo-level vs org-level scope

§5 Smoke test — added explicit git checkout/add/commit/push commands
   for creating the runner/smoke branch (was implicit before).

§8 (renamed) — comprehensive org migration guide:
  - Side-by-side table: personal account today vs under-an-org
  - Bash loop to transfer all 18 repos via gh api
  - git remote set-url commands for each local clone
  - Post-migration org-level registration token fetch
  - Workflow propagation strategies (reusable workflow vs sync script)

§9 (new) — Monitoring + observability:
  - GitHub Actions tab per-repo + per-org workflow views
  - Runner pool health (Settings → Actions → Runners) at repo + org level
  - gh CLI commands for scripted monitoring (run watch, list, view, runners)
  - Host-side journalctl + _diag/ inspection commands

§14 Questions — updated to ask about scope (repo vs org) first.

Section numbering shifted by +1 from §9 onward to make room for the
new Monitoring section.
2026-05-24 18:04:50 -07:00
saravanakumardb1
d5e0778af6 docs(devops): add Hostinger self-hosted GitHub runner setup prompt
Delegation prompt for the Codex agent running on the Hostinger VM to:
- Install a dedicated GitHub Actions self-hosted runner under gha-runner user
- Register it with saravanakumardb1/learning_ai_common_plat
- Run as a systemd service with auto-start
- Install Node 20 / pnpm 9 / gh CLI / Docker prerequisites
- Wire up local Gitea publish token

Includes full end-to-end validation that proves the actual publish
pipeline works:
- Creates a throwaway @bytelyst/_runner-e2e-test package
- Publishes to local Gitea
- Uploads tarball as GitHub Release asset
- Verifies Gitea registry returns the version
- Verifies pnpm install + require works from a clean directory
- Verifies the byte-identical-tarball invariant (sha256 match between
  Gitea-served tarball and GitHub Release asset) — this is the key
  guarantee that lockfiles will remain portable across corp Mac's
  local Gitea after sync
- Documents cleanup of test artifacts

Plus pre-flight checks, hardening (systemd limits, log rotation,
workflow approval), scaling notes, deliverables checklist, guardrails,
rollback, and follow-up prompt list (publish-packages.yml,
bytelyst-sync script, SKILL doc).
2026-05-24 17:59:42 -07:00
saravanakumardb1
269b4d8784 docs(skills): add gh-account-routing skill
Documents the local zsh chpwd hook + git credential helper that
auto-routes the gh CLI to the personal saravanakumardb1 account
whenever cwd is inside ~/code/mygh/, falling back to the keyring
active account elsewhere.

Captures the setup so it can be reproduced on a new laptop or by
another contributor with similar two-account needs. This is machine-
local config (lives in ~/.zshrc and ~/.gitconfig-personal), so it
intentionally lives in SKILLS/ rather than per-repo AGENTS.md.
2026-05-24 15:15:54 -07:00
saravanakumardb1
3fc0058d06 docs: consolidate learning_ai_smart_auth references into learning_ai_auth_app
The smart_auth docs-only repo has been merged into learning_ai_auth_app.
Updates all cross-repo references:

- adoption/learning_ai_smart_auth.md merged into adoption/learning_ai_auth_app.md
- WORKSPACE_INVENTORY: combined row (now 13 active repos, was 14)
- CODING_AGENT_AUTOMATION_PLAYBOOK: combined row, dropped from for-loop
- GITEA_LOCAL_CI: removed from no-CI list
- ECOSYSTEM_APPROVALS_AND_TRUST_MODEL: ref input consolidated
- ECOSYSTEM_CROSS_POLLINATION_OPPORTUNITIES: capability map + per-repo section consolidated
- repos.txt, run-code-review.md, refresh-chat-history.md, update-agent-docs.sh: drop smart_auth
2026-05-24 14:31:38 -07:00
saravanakumardb1
59756ea5d0 fix(scripts): string-literal / JSX-text false-positive heuristic for ts-any-type
Tail-end of the ts-any TODO-4 work uncovered a small class of false
positives the scanner still surfaced: ':any' that appears as TEXT inside
a string literal or JSX child, not as a TypeScript type annotation.
Examples:

    const label = 'Energy: any';        // string content, not a type
    <Badge>owner:any</Badge>             // JSX text, not a type

Real TS ': any' annotations are followed by ',', ')', '=', ';', '>',
or end-of-line. Text occurrences are followed by alphanumeric / quote /
closing-tag delimiter characters \u2014 a clear distinguishing signal.

This commit adds a 10-line regex heuristic that skips occurrences where
':any' is followed by ' ', single quote, double quote, or '<'. The
companion AGENT_COMPLIANCE_ROADMAP.md entry for commit 79041714 already
listed this heuristic; the implementation just wasn't actually committed
at the time. This commit retroactively lands it so the working tree
matches the docs.

Verification: scripts/check-rule-violations.sh still emits 0 findings
across all 20 repos (no regression from the additional heuristic).
2026-05-23 23:48:09 -07:00
saravanakumardb1
092af2dc9b test(mcp-client): cover TODO-3 pluggable McpLogger interface
TODO-3 (commit 8ffe3616) added an optional 'logger' callback to MCPConfig
plus an exported McpLogger interface so consumers can route MCP output
to pino, Fastify request.log, structlog, etc., instead of the default
global console. The package had zero unit tests; the new interface
relied on type-system validation alone.

This commit adds packages/mcp-client/src/logger.test.ts (4 tests) to
cover the public contract introduced by TODO-3:

  1. defaults to global console when no logger is provided
     \u2014 verifies the '?? console' fallback in the constructor.
  2. injected logger receives no spurious calls on early-return paths
     \u2014 disconnect() when not connected is a no-op; logger must
     not be invoked.
  3. structural-typing acceptance test \u2014 a pino-shaped logger
     (no-op methods) must construct cleanly. Guards the McpLogger
     interface from accidental narrowing during future refactors.
  4. variadic-args contract \u2014 McpLogger.info('msg', {ctx}, 42)
     accepts trailing structured args; matches console + pino + Fastify.

The deeper integration paths (connect / callTool / readResource) spawn
StdioClientTransport subprocesses and aren't safely runnable in a unit
context; they're covered indirectly by consumers (admin-dashboard
uses the same client and has integration tests).

Result: mcp-client moves from 0 tests to 4 tests passing.
2026-05-23 22:30:27 -07:00
saravanakumardb1
ae7a888c6e docs(compliance): final roadmap update \u2014 100% ecosystem compliance reached
All 5 deferred TODOs (TODO-1 through TODO-5) are now closed:

  TODO-1 \u2014 fastgap BodyCanvas data extraction        \u2192 commit 593d02e
  TODO-2 \u2014 fastgap mobile 'info' semantic colour     \u2192 commit 5eeb5db
  TODO-3 \u2014 @bytelyst/mcp-client pluggable logger     \u2192 commit 8ffe3616
  TODO-4 \u2014 35 remaining ts-any sites (7 commits):
              mindlyst backend (18 sites)                  \u2192 8aab081
              chronomind backend (5 sites)                 \u2192 e66ab549
              peakpulse backend (1 site)                   \u2192 868c625
              flowmonk backend (1 site)                    \u2192 7358d57
              efforise client (4 sites)                    \u2192 835b254
              claw-cowork desktop (2 sites)                \u2192 2c8b8be
              platform-service (1 site)                    \u2192 9d405952
  TODO-5 \u2014 emoji scanner CLI/asset path exemptions   \u2192 commit b9a79879

Final ecosystem state (scripts/check-rule-violations.sh):

  Total findings:            2,548 \u2192 0   (-100%) \u2713
  web-hardcoded-hex:           465 \u2192 0           \u2713
  b7-emoji-in-code:            465 \u2192 0           \u2713
  b4-python-print:             351 \u2192 0           \u2713
  ts-any-type:                 249 \u2192 0           \u2713
  b4-console-log:               93 \u2192 0           \u2713
  b5-hardcoded-product-id:      13 \u2192 0           \u2713  (critical)
  b4-swift-print:                7 \u2192 0           \u2713

  Repos with 0 findings:      2/20 \u2192 20/20      \u2713

This commit:
  + Updates the status-snapshot table at top of AGENT_COMPLIANCE_ROADMAP.md
    to show 0 findings across every rule.
  + Marks Tier 5 entries T5.4 and T5.5 as fully complete (from partial)
    with bullet-by-bullet detail of how each follow-up was resolved.
  + Appends 20 new rows to the Progress Log table covering every commit
    from Tier 4 onward, including all 7 TODO-4 fix commits.
  + Refreshes reports/rule-violations-baseline.md to the 0-findings state.
2026-05-23 19:34:49 -07:00
saravanakumardb1
9d405952e2 fix(platform-service): TODO-4 \u2014 typed cast for request.auth augmentation
The DevOps admin preHandler read 'auth' as '(request as any).auth'.
The proper Fastify pattern is 'declare module' augmentation in
@bytelyst/fastify-auth, but the inline cast through 'unknown' is
sufficient for now and avoids touching the shared auth package.

Changed:
  - 'const auth = (request as any).auth;' \u2192
    'const auth = (request as unknown as { auth?: { role?: string } }).auth;'

Inline comment notes the cleaner 'declare module' alternative.

Final ecosystem state:
  scripts/check-rule-violations.sh: 0 findings across all rules \u2713

  web-hardcoded-hex:         0  \u2713
  b5-hardcoded-product-id:   0  \u2713
  b4-console-log:            0  \u2713
  b4-swift-print:            0  \u2713
  b4-python-print:           0  \u2713
  ts-any-type:               0  \u2713
  b7-emoji-in-code:          0  \u2713
2026-05-23 19:29:26 -07:00