Dmytro Tkachenko 8d1cd217a0 chore(agents): add "Git workflow (every task)" rule to all agents + skills
Bakes the branching discipline into the team so it's followed automatically:
at the start of a new task, ask the user to commit + push any unpushed work,
then branch off main and build the feature on the new branch (never commit to
main), commit + push at the end. Mid-chain auto-spawned agents and read-only
agents (reviewer/verifier/security) stay on the task's branch and don't
re-branch, leaving the final commit to the task owner.

Appended one identical "## Git workflow (every task)" section to all 11
.claude/agents/*.md and all 11 .claude/skills/*/SKILL.md (22 files). Docs/
tooling only (.claude/ is not in the built app) — no version bump / CHANGELOG.

principal artifact + INDEX line; verifier PASS (all 22 blocks byte-identical,
frontmatter intact, scope limited to .claude + audit files, mid-chain clause
behaviorally sound).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VEsaHQx8cXr1hFrKU42UK6
2026-08-29 12:32:00 +03:00
2026-08-29 11:59:28 +03:00
2026-08-29 11:59:28 +03:00
2026-08-29 11:59:28 +03:00
2026-08-29 11:59:28 +03:00
2026-08-29 11:59:28 +03:00
2026-08-29 11:59:28 +03:00
2026-08-29 11:59:28 +03:00
2026-08-29 11:59:28 +03:00
2026-08-29 11:59:28 +03:00
2026-08-29 11:59:28 +03:00
2026-08-29 11:59:28 +03:00
2026-08-29 11:59:28 +03:00
2026-08-29 11:59:28 +03:00
2026-08-29 11:59:28 +03:00
2026-08-29 11:59:28 +03:00

FORGE

A ServiceNow ticket dashboard for the Marketing Web Presence L3 queues — RITM/SCTASK requests pulled out of ServiceNow and shown as an operational board plus closed-ticket analytics. Ported from the Let it Snow Chrome extension into a full-stack web app, built on the shape of the Husky repo list template.

┌──────────────┐    Bearer token     ┌───────────────┐     Postgres
│  Chrome ext  │ ──── POST /api/sync ─▶│  FORGE server │ ────────────▶  forge DB
│ (Snow Sync)  │                      │  Express + TS │
└──────────────┘                      └───────┬───────┘
        ▲                                      │  serves
   reads ServiceNow                            ▼
   Table API in-page              ┌───────────────────────────┐
                                  │  React client (Vite + TS) │
                                  │  Board · Closed · Stats   │
                                  └───────────────────────────┘

Stack

  • client/ — React 18 + Vite + TypeScript, SCSS modules, react-router. Three views: Active board (filters, search, ticket detail + activity timeline), Closed (cost / time-to-first-reply analytics), Statistics (distribution).
  • server (index.ts + server/) — Express + TypeScript on Postgres. Schema self-bootstraps in initDB() and seeds the bundled ticket archives on first boot. REST: GET /api/tickets, /api/tickets/:number, /api/stats, /healthz, and a token-authed POST /api/sync ingest.
  • extension/ — a Manifest V3 Chrome extension ("FORGE Snow Sync") that reads active RITM tickets from the ServiceNow Table API and pushes them to the server with an API token, exactly like the Husky sync extension.

Quick start (local)

# 1. a Postgres named `forge` (compose brings one up, or use your own)
docker compose up -d db          # or point DATABASE_URL at any Postgres

cp .env.example .env             # DATABASE_URL defaults to the compose db

# 2. install + run both server and client with live reload
npm install
npm run dev                      # server :3000, client :5173 (proxies /api)

Open http://localhost:5173 and sign in with the AUTH_USER / AUTH_PASS you set in .env (the read UI is auth-gated; see docs/SETUP.md). On first boot the server seeds the ticket archives in server/data/*.json (100 active + 866 closed after de-duping the ~99 tickets that appear in both), so the board is populated before any real sync runs. Those archives are generated from a Let it Snow storage dump — see docs/SETUP.md to regenerate them.

Production

docker compose up -d --build     # app on host :3099, bundled Postgres

Behind the Synology reverse proxy this is what forge.mycloud.dp.ua maps to.

See docs/SETUP.md for the sync token + Chrome extension setup.

Tests

npm test        # client (vitest) + server (vitest)
S
Description
No description provided
Readme 631 KiB
Languages
TypeScript 63.5%
SCSS 14.9%
Shell 10.4%
JavaScript 8.4%
HTML 2.2%
Other 0.6%