tribunal-kit 6.0.0 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/.manifest.json +78 -0
- package/.agent/ARCHITECTURE.md +19 -241
- package/.agent/agents/accessibility-reviewer.md +23 -16
- package/.agent/agents/ai-code-reviewer.md +25 -21
- package/.agent/agents/anti-pattern-reviewer.md +12 -7
- package/.agent/agents/api-architect.md +1 -0
- package/.agent/agents/backend-specialist.md +23 -22
- package/.agent/agents/cloud-engineer.md +1 -0
- package/.agent/agents/code-archaeologist.md +1 -0
- package/.agent/agents/complexity-reviewer.md +10 -7
- package/.agent/agents/database-architect.md +3 -2
- package/.agent/agents/db-latency-auditor.md +6 -2
- package/.agent/agents/debugger.md +3 -2
- package/.agent/agents/dependency-reviewer.md +1 -0
- package/.agent/agents/devops-engineer.md +9 -8
- package/.agent/agents/documentation-writer.md +6 -5
- package/.agent/agents/explorer-agent.md +1 -0
- package/.agent/agents/frontend-reviewer.md +21 -17
- package/.agent/agents/frontend-specialist.md +23 -20
- package/.agent/agents/game-developer.md +1 -0
- package/.agent/agents/interaction-reviewer.md +10 -5
- package/.agent/agents/logic-reviewer.md +3 -0
- package/.agent/agents/minimalist-reviewer.md +6 -0
- package/.agent/agents/mobile-developer.md +7 -6
- package/.agent/agents/mobile-reviewer.md +14 -13
- package/.agent/agents/orchestrator.md +3 -0
- package/.agent/agents/penetration-tester.md +1 -0
- package/.agent/agents/performance-optimizer.md +6 -5
- package/.agent/agents/performance-reviewer.md +6 -6
- package/.agent/agents/pipeline-reviewer.md +144 -0
- package/.agent/agents/precedence-reviewer.md +1 -0
- package/.agent/agents/product-manager.md +1 -0
- package/.agent/agents/product-owner.md +1 -0
- package/.agent/agents/product-reviewer.md +12 -7
- package/.agent/agents/project-planner.md +3 -0
- package/.agent/agents/qa-automation-engineer.md +50 -43
- package/.agent/agents/resilience-reviewer.md +1 -0
- package/.agent/agents/schema-reviewer.md +1 -0
- package/.agent/agents/security-auditor.md +24 -24
- package/.agent/agents/seo-specialist.md +33 -23
- package/.agent/agents/sql-reviewer.md +5 -4
- package/.agent/agents/supervisor-agent.md +12 -2
- package/.agent/agents/swarm-worker-contracts.md +13 -13
- package/.agent/agents/swarm-worker-registry.md +51 -51
- package/.agent/agents/system-architect.md +1 -0
- package/.agent/agents/test-coverage-reviewer.md +25 -22
- package/.agent/agents/test-engineer.md +12 -11
- package/.agent/agents/throughput-optimizer.md +45 -40
- package/.agent/agents/type-safety-reviewer.md +5 -4
- package/.agent/agents/ui-ux-auditor.md +6 -4
- package/.agent/agents/ui-visual-auditor.md +3 -0
- package/.agent/agents/ux-reviewer.md +11 -6
- package/.agent/agents/visual-reviewer.md +11 -6
- package/.agent/agents/vitals-reviewer.md +5 -4
- package/.agent/history/memory/.memory.idx +3716 -1
- package/.agent/history/memory/MEMORY.md +246 -1
- package/.agent/mcp_config.json +1 -6
- package/.agent/routing_index.json +2034 -263
- package/.agent/rules/GEMINI.md +12 -10
- package/.agent/rules/GEMINI_PLANNER.md +19 -21
- package/.agent/scripts/_colors.js +52 -54
- package/.agent/scripts/_utils.js +52 -53
- package/.agent/scripts/auto_preview.js +39 -43
- package/.agent/scripts/bundle_analyzer.js +47 -60
- package/.agent/scripts/case_law_manager.js +200 -294
- package/.agent/scripts/checklist.js +73 -94
- package/.agent/scripts/cicd_validator.js +305 -0
- package/.agent/scripts/compile_router.py +4 -111
- package/.agent/scripts/context_broker.js +317 -412
- package/.agent/scripts/contract_engine.js +402 -0
- package/.agent/scripts/dependency_analyzer.js +112 -124
- package/.agent/scripts/graph_builder.js +75 -103
- package/.agent/scripts/graph_visualizer.js +10 -12
- package/.agent/scripts/graph_zoom.js +38 -55
- package/.agent/scripts/guardrail_engine.js +195 -145
- package/.agent/scripts/impact_classifier.js +55 -30
- package/.agent/scripts/inner_loop_validator.js +108 -159
- package/.agent/scripts/integrity_manifest.js +59 -67
- package/.agent/scripts/lint_runner.js +65 -75
- package/.agent/scripts/marathon_harness.js +131 -208
- package/.agent/scripts/migrate_skills_frontmatter.py +4 -63
- package/.agent/scripts/minify_context.js +29 -33
- package/.agent/scripts/minimal_change_engine.js +95 -87
- package/.agent/scripts/mutation_runner.js +46 -62
- package/.agent/scripts/pipeline_engine.js +320 -209
- package/.agent/scripts/prompt_compiler.js +118 -93
- package/.agent/scripts/schema_validator.js +73 -121
- package/.agent/scripts/security_scan.js +88 -117
- package/.agent/scripts/session_manager.js +52 -69
- package/.agent/scripts/signal_detector.js +24 -22
- package/.agent/scripts/skill_evolution.js +184 -245
- package/.agent/scripts/skill_integrator.js +35 -48
- package/.agent/scripts/socratic_gate_policy.js +15 -12
- package/.agent/scripts/strengthen_skills.js +29 -33
- package/.agent/scripts/swarm_dispatcher.js +120 -151
- package/.agent/scripts/test_runner.js +54 -56
- package/.agent/scripts/token_budget_broker.js +9 -7
- package/.agent/scripts/trace_engine.js +126 -0
- package/.agent/scripts/verify_all.js +76 -93
- package/.agent/scripts/visual_audit.js +16 -21
- package/.agent/skill_topic_map.json +237 -0
- package/.agent/skills/12-principles-of-animation/SKILL.md +7 -0
- package/.agent/skills/60fps-animation/SKILL.md +7 -0
- package/.agent/skills/accessible-animation/SKILL.md +5 -1
- package/.agent/skills/adapt/SKILL.md +7 -1
- package/.agent/skills/advanced-rag-pipelines/SKILL.md +1 -0
- package/.agent/skills/agent-organizer/SKILL.md +1 -0
- package/.agent/skills/agentic-patterns/SKILL.md +33 -25
- package/.agent/skills/agentic-workflows-2026/SKILL.md +80 -0
- package/.agent/skills/ai-app-hardening/SKILL.md +59 -0
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +7 -6
- package/.agent/skills/animation-on-scroll/SKILL.md +24 -15
- package/.agent/skills/animation-systems/SKILL.md +11 -10
- package/.agent/skills/antfu-conventions/SKILL.md +7 -2
- package/.agent/skills/api-patterns/SKILL.md +14 -10
- package/.agent/skills/api-security-auditor/SKILL.md +15 -14
- package/.agent/skills/app-builder/SKILL.md +1 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +2 -2
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +12 -12
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +3 -3
- package/.agent/skills/apple-design/SKILL.md +8 -7
- package/.agent/skills/architecture/SKILL.md +3 -2
- package/.agent/skills/audit-and-fix/SKILL.md +8 -5
- package/.agent/skills/authentication-best-practices/SKILL.md +9 -8
- package/.agent/skills/backend-security-expert/SKILL.md +1 -0
- package/.agent/skills/baseline-ui/SKILL.md +8 -7
- package/.agent/skills/bash-linux/SKILL.md +1 -0
- package/.agent/skills/behavioral-modes/SKILL.md +1 -0
- package/.agent/skills/better-colors/SKILL.md +11 -7
- package/.agent/skills/better-typography/SKILL.md +30 -16
- package/.agent/skills/better-ui/SKILL.md +17 -10
- package/.agent/skills/bolder/SKILL.md +6 -0
- package/.agent/skills/brainstorming/SKILL.md +6 -4
- package/.agent/skills/browser-native-ai/SKILL.md +5 -4
- package/.agent/skills/build-primitive/SKILL.md +5 -0
- package/.agent/skills/building-native-ui/SKILL.md +1 -0
- package/.agent/skills/cicd-pro/SKILL.md +2 -1
- package/.agent/skills/clarify/SKILL.md +19 -14
- package/.agent/skills/clean-code/SKILL.md +16 -15
- package/.agent/skills/cloud-architect/SKILL.md +1 -0
- package/.agent/skills/cobejs/SKILL.md +7 -9
- package/.agent/skills/code-review-checklist/SKILL.md +1 -0
- package/.agent/skills/codebase-design/SKILL.md +7 -2
- package/.agent/skills/colorize/SKILL.md +8 -3
- package/.agent/skills/compact-landing/SKILL.md +8 -3
- package/.agent/skills/company-logos/SKILL.md +6 -0
- package/.agent/skills/config-validator/SKILL.md +10 -9
- package/.agent/skills/containerization-pro/SKILL.md +6 -5
- package/.agent/skills/context-engineering-pro/SKILL.md +70 -0
- package/.agent/skills/create-design-md/SKILL.md +13 -5
- package/.agent/skills/critique/SKILL.md +10 -8
- package/.agent/skills/csharp-developer/SKILL.md +1 -0
- package/.agent/skills/data-validation-schemas/SKILL.md +28 -23
- package/.agent/skills/database-design/SKILL.md +2 -1
- package/.agent/skills/delight/SKILL.md +6 -0
- package/.agent/skills/deployment-procedures/SKILL.md +2 -1
- package/.agent/skills/design-lab/SKILL.md +5 -0
- package/.agent/skills/devops-engineer/SKILL.md +3 -2
- package/.agent/skills/devops-incident-responder/SKILL.md +2 -1
- package/.agent/skills/diagnosing-bugs/SKILL.md +12 -2
- package/.agent/skills/distill/SKILL.md +7 -2
- package/.agent/skills/documentation-templates/SKILL.md +3 -2
- package/.agent/skills/domain-modeling/SKILL.md +12 -4
- package/.agent/skills/duckdb-analytical-sql/SKILL.md +59 -0
- package/.agent/skills/edge-ai-mobile/SKILL.md +50 -0
- package/.agent/skills/edge-computing/SKILL.md +9 -8
- package/.agent/skills/emil-design-eng/SKILL.md +43 -27
- package/.agent/skills/error-resilience/SKILL.md +34 -16
- package/.agent/skills/expo-router-v4/SKILL.md +81 -0
- package/.agent/skills/extract-design-system/SKILL.md +12 -11
- package/.agent/skills/fabel-protocol/SKILL.md +24 -17
- package/.agent/skills/fixing-accessibility/SKILL.md +23 -16
- package/.agent/skills/fixing-metadata/SKILL.md +24 -13
- package/.agent/skills/fixing-motion-performance/SKILL.md +7 -5
- package/.agent/skills/framer-motion-expert/SKILL.md +29 -15
- package/.agent/skills/frontend-design/SKILL.md +21 -13
- package/.agent/skills/frontend-security-expert/SKILL.md +1 -0
- package/.agent/skills/game-design-expert/SKILL.md +1 -0
- package/.agent/skills/game-engineering-expert/SKILL.md +1 -0
- package/.agent/skills/generative-ui-expert/SKILL.md +3 -2
- package/.agent/skills/geo-fundamentals/SKILL.md +2 -1
- package/.agent/skills/git-pro/SKILL.md +10 -9
- package/.agent/skills/github-operations/SKILL.md +2 -1
- package/.agent/skills/gpt-taste/SKILL.md +7 -0
- package/.agent/skills/gsap-core/SKILL.md +26 -22
- package/.agent/skills/gsap-frameworks/SKILL.md +6 -5
- package/.agent/skills/gsap-performance/SKILL.md +4 -3
- package/.agent/skills/gsap-plugins/SKILL.md +34 -33
- package/.agent/skills/gsap-react/SKILL.md +9 -8
- package/.agent/skills/gsap-scrolltrigger/SKILL.md +34 -33
- package/.agent/skills/gsap-timeline/SKILL.md +18 -15
- package/.agent/skills/gsap-utils/SKILL.md +25 -24
- package/.agent/skills/harden/SKILL.md +9 -3
- package/.agent/skills/harness-protocol/SKILL.md +1 -0
- package/.agent/skills/i18n-localization/SKILL.md +10 -9
- package/.agent/skills/impeccable/SKILL.md +5 -0
- package/.agent/skills/improve-codebase-architecture/SKILL.md +10 -5
- package/.agent/skills/improve-ui/SKILL.md +12 -5
- package/.agent/skills/intelligent-routing/SKILL.md +7 -6
- package/.agent/skills/knowledge-graph/SKILL.md +1 -0
- package/.agent/skills/landing-page/SKILL.md +1 -0
- package/.agent/skills/lint-and-validate/SKILL.md +9 -4
- package/.agent/skills/llm-engineering/SKILL.md +55 -54
- package/.agent/skills/local-first/SKILL.md +20 -19
- package/.agent/skills/local-first-architecture/SKILL.md +6 -1
- package/.agent/skills/lottie-animation/SKILL.md +7 -3
- package/.agent/skills/marquee-loop/SKILL.md +1 -0
- package/.agent/skills/masked-reveal/SKILL.md +17 -4
- package/.agent/skills/mcp-builder/SKILL.md +13 -10
- package/.agent/skills/micro-interaction/SKILL.md +20 -5
- package/.agent/skills/mobile-design/SKILL.md +26 -15
- package/.agent/skills/monorepo-management/SKILL.md +3 -2
- package/.agent/skills/morphing-icons/SKILL.md +16 -6
- package/.agent/skills/motion-engineering/SKILL.md +19 -15
- package/.agent/skills/nextjs-react-expert/SKILL.md +26 -21
- package/.agent/skills/nodejs-best-practices/SKILL.md +89 -76
- package/.agent/skills/observability/SKILL.md +45 -44
- package/.agent/skills/opentelemetry-observability/SKILL.md +59 -0
- package/.agent/skills/page-transition-animation/SKILL.md +6 -3
- package/.agent/skills/parallel-agents/SKILL.md +7 -2
- package/.agent/skills/performance-profiling/SKILL.md +24 -13
- package/.agent/skills/plan-writing/SKILL.md +1 -0
- package/.agent/skills/platform-engineer/SKILL.md +3 -2
- package/.agent/skills/platform-engineering-opentofu/SKILL.md +68 -0
- package/.agent/skills/playwright-ai-e2e/SKILL.md +60 -0
- package/.agent/skills/playwright-best-practices/SKILL.md +29 -28
- package/.agent/skills/polish/SKILL.md +13 -12
- package/.agent/skills/powershell-windows/SKILL.md +1 -0
- package/.agent/skills/pricing-page/SKILL.md +8 -3
- package/.agent/skills/product-aware-heuristics/SKILL.md +122 -72
- package/.agent/skills/progressive-blur/SKILL.md +9 -4
- package/.agent/skills/project-idioms/SKILL.md +1 -0
- package/.agent/skills/property-based-testing/SKILL.md +58 -0
- package/.agent/skills/python-patterns/SKILL.md +1 -0
- package/.agent/skills/python-pro/SKILL.md +1 -0
- package/.agent/skills/quieter/SKILL.md +6 -0
- package/.agent/skills/react-doctor/SKILL.md +6 -0
- package/.agent/skills/react-specialist/SKILL.md +32 -28
- package/.agent/skills/readme-builder/SKILL.md +1 -0
- package/.agent/skills/realtime-patterns/SKILL.md +34 -33
- package/.agent/skills/red-team-tactics/SKILL.md +1 -0
- package/.agent/skills/redesign-skill/SKILL.md +6 -0
- package/.agent/skills/review-animations/SKILL.md +5 -2
- package/.agent/skills/review-animations/STANDARDS.md +37 -23
- package/.agent/skills/rust-pro/SKILL.md +1 -0
- package/.agent/skills/seo-fundamentals/SKILL.md +4 -3
- package/.agent/skills/server-management/SKILL.md +1 -0
- package/.agent/skills/shadcn-ui-expert/SKILL.md +28 -22
- package/.agent/skills/shape/SKILL.md +9 -2
- package/.agent/skills/skill-creator/SKILL.md +1 -0
- package/.agent/skills/soft-skill/SKILL.md +6 -0
- package/.agent/skills/sounds-on-the-web/SKILL.md +1 -0
- package/.agent/skills/sql-pro/SKILL.md +1 -0
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +1 -0
- package/.agent/skills/svg-animation/SKILL.md +16 -7
- package/.agent/skills/swiftui-expert/SKILL.md +1 -0
- package/.agent/skills/swiss-design/SKILL.md +5 -0
- package/.agent/skills/system-design-pro/SKILL.md +1 -0
- package/.agent/skills/systematic-debugging/SKILL.md +1 -0
- package/.agent/skills/tailwind-patterns/SKILL.md +25 -11
- package/.agent/skills/taste-skill/SKILL.md +6 -0
- package/.agent/skills/tdd-workflow/SKILL.md +5 -0
- package/.agent/skills/test-result-analyzer/SKILL.md +1 -0
- package/.agent/skills/testing-patterns/SKILL.md +123 -115
- package/.agent/skills/thermo-nuclear-code-quality-review/SKILL.md +5 -0
- package/.agent/skills/thinking-protocol/SKILL.md +3 -0
- package/.agent/skills/to-spring-or-not-to-spring/SKILL.md +9 -8
- package/.agent/skills/transitions-dev/SKILL.md +19 -6
- package/.agent/skills/trend-researcher/SKILL.md +1 -0
- package/.agent/skills/typescript-advanced/SKILL.md +23 -18
- package/.agent/skills/typeset/SKILL.md +10 -1
- package/.agent/skills/ui-reasoning-engine/SKILL.md +67 -48
- package/.agent/skills/ui-skill-packs/SKILL.md +6 -1
- package/.agent/skills/ui-skills-root/SKILL.md +39 -38
- package/.agent/skills/ui-ux-pro-max/SKILL.md +34 -26
- package/.agent/skills/ui-ux-researcher/SKILL.md +1 -0
- package/.agent/skills/vector-search-pgvector/SKILL.md +78 -0
- package/.agent/skills/vue-expert/SKILL.md +22 -19
- package/.agent/skills/vulnerability-scanner/SKILL.md +22 -21
- package/.agent/skills/web-accessibility-auditor/SKILL.md +2 -1
- package/.agent/skills/web-design-guidelines/SKILL.md +16 -10
- package/.agent/skills/web-quality-audit/SKILL.md +5 -0
- package/.agent/skills/webapp-testing/SKILL.md +14 -13
- package/.agent/skills/webgpu-performance/SKILL.md +1 -0
- package/.agent/skills/whimsy-injector/SKILL.md +9 -5
- package/.agent/skills/workflow-optimizer/SKILL.md +1 -0
- package/.agent/skills/zero-trust-passkeys/SKILL.md +90 -0
- package/.agent/templates/DESIGN.md +119 -110
- package/.agent/templates/design-tokens.json +9 -6
- package/.agent/workflows/acf.md +1 -0
- package/.agent/workflows/api-tester.md +1 -0
- package/.agent/workflows/audit.md +1 -0
- package/.agent/workflows/brainstorm.md +1 -0
- package/.agent/workflows/changelog.md +1 -0
- package/.agent/workflows/contract.md +60 -0
- package/.agent/workflows/create.md +1 -0
- package/.agent/workflows/debug.md +1 -0
- package/.agent/workflows/deploy.md +1 -0
- package/.agent/workflows/enhance.md +1 -0
- package/.agent/workflows/fix-ci.md +89 -0
- package/.agent/workflows/fix.md +1 -0
- package/.agent/workflows/generate.md +1 -0
- package/.agent/workflows/marathon.md +1 -0
- package/.agent/workflows/migrate.md +1 -0
- package/.agent/workflows/minimal.md +9 -7
- package/.agent/workflows/orchestrate.md +1 -0
- package/.agent/workflows/performance-benchmarker.md +1 -0
- package/.agent/workflows/pipeline.md +26 -21
- package/.agent/workflows/plan.md +1 -0
- package/.agent/workflows/preview.md +1 -0
- package/.agent/workflows/refactor.md +3 -2
- package/.agent/workflows/review-ai.md +4 -3
- package/.agent/workflows/review.md +1 -0
- package/.agent/workflows/session.md +1 -0
- package/.agent/workflows/status.md +1 -0
- package/.agent/workflows/strengthen-skills.md +1 -0
- package/.agent/workflows/super-prompt.md +1 -0
- package/.agent/workflows/swarm.md +15 -3
- package/.agent/workflows/test.md +8 -7
- package/.agent/workflows/tribunal-backend.md +3 -2
- package/.agent/workflows/tribunal-cicd.md +104 -0
- package/.agent/workflows/tribunal-database.md +1 -0
- package/.agent/workflows/tribunal-frontend.md +8 -6
- package/.agent/workflows/tribunal-full.md +15 -14
- package/.agent/workflows/tribunal-mobile.md +6 -5
- package/.agent/workflows/tribunal-performance.md +1 -0
- package/.agent/workflows/tribunal-speed.md +1 -0
- package/.agent/workflows/tribunal-ui.md +29 -21
- package/.agent/workflows/ui-ux-pro-max.md +19 -15
- package/CONTRIBUTING.md +3 -3
- package/README.md +160 -88
- package/SECURITY.md +11 -11
- package/bin/mcp-server.js +512 -233
- package/bin/tribunal-kit.js +29 -30
- package/bin/wrapper.js +45 -48
- package/dist/cli.js +26 -0
- package/dist/commands/case.js +2 -0
- package/dist/commands/contract.js +440 -0
- package/dist/commands/memory.js +3 -2
- package/dist/commands/native.js +36 -0
- package/dist/commands/status.js +6 -0
- package/dist/esm/index.mjs +32 -0
- package/dist/index.d.ts +58 -3
- package/package.json +20 -16
- package/scripts/benchmark.js +62 -86
- package/scripts/changelog.js +67 -73
- package/scripts/fix-vbc.js +13 -15
- package/scripts/fix-vbc.ps1 +2 -118
- package/scripts/stress_benchmark.js +358 -0
- package/scripts/sync-version.js +71 -41
- package/scripts/validate-payload.js +23 -30
- package/scripts/visual_audit.js +23 -13
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before designing or implementing API endpoints, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Authorization Header Token Passing (Section 17) → Pass JWTs in `Authorization: Bearer` headers; strictly ban tokens in URL query params
|
|
24
25
|
2. Cursor-Based Pagination (Section 19) → Use cursor pagination for datasets >10K rows to eliminate `OFFSET N` performance degradation
|
|
25
26
|
3. Idempotency Header for Mutations (Section 21) → Require `Idempotency-Key` headers for state-changing `POST` or `PATCH` retry operations
|
|
@@ -108,7 +109,7 @@ interface ApiError {
|
|
|
108
109
|
// GET /api/v1/posts?cursor=eyJpZCI6MTAwfQ&limit=20
|
|
109
110
|
const posts = await db.post.findMany({
|
|
110
111
|
where: { id: { lt: decodeCursor(req.query.cursor).id } },
|
|
111
|
-
orderBy: { id:
|
|
112
|
+
orderBy: { id: 'desc' },
|
|
112
113
|
take: limit + 1, // fetch one extra to determine hasMore
|
|
113
114
|
});
|
|
114
115
|
const hasMore = posts.length > limit;
|
|
@@ -126,15 +127,15 @@ return { data: posts, meta: { hasMore, nextCursor: encodeCursor(posts.at(-1)) }
|
|
|
126
127
|
|
|
127
128
|
```typescript
|
|
128
129
|
// POST /api/v1/payments with header: Idempotency-Key: <uuid>
|
|
129
|
-
app.post(
|
|
130
|
-
const key = req.headers[
|
|
131
|
-
if (!key) return res.status(400).json({ error:
|
|
130
|
+
app.post('/api/v1/payments', async (req, res) => {
|
|
131
|
+
const key = req.headers['idempotency-key'];
|
|
132
|
+
if (!key) return res.status(400).json({ error: 'Missing Idempotency-Key' });
|
|
132
133
|
|
|
133
134
|
const cached = await redis.get(`idempotency:${key}`);
|
|
134
135
|
if (cached) return res.status(200).json(JSON.parse(cached));
|
|
135
136
|
|
|
136
137
|
const result = await processPayment(req.body);
|
|
137
|
-
await redis.set(`idempotency:${key}`, JSON.stringify(result),
|
|
138
|
+
await redis.set(`idempotency:${key}`, JSON.stringify(result), 'EX', 86400);
|
|
138
139
|
return res.status(201).json(result);
|
|
139
140
|
});
|
|
140
141
|
// GET, PUT, DELETE → naturally idempotent (safe to retry without a key)
|
|
@@ -147,15 +148,18 @@ app.post("/api/v1/payments", async (req, res) => {
|
|
|
147
148
|
|
|
148
149
|
```typescript
|
|
149
150
|
// HMAC signature verification (always verify — never trust unsigned webhooks)
|
|
150
|
-
import { createHmac, timingSafeEqual } from
|
|
151
|
+
import { createHmac, timingSafeEqual } from 'node:crypto';
|
|
151
152
|
function verify(payload: string, signature: string, secret: string): boolean {
|
|
152
|
-
const expected = createHmac(
|
|
153
|
+
const expected = createHmac('sha256', secret).update(payload).digest('hex');
|
|
153
154
|
return timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
|
|
154
155
|
}
|
|
155
156
|
|
|
156
|
-
app.post(
|
|
157
|
-
if (
|
|
158
|
-
|
|
157
|
+
app.post('/webhooks', (req, res) => {
|
|
158
|
+
if (
|
|
159
|
+
!verify(JSON.stringify(req.body), req.headers['x-webhook-signature'] as string, WEBHOOK_SECRET)
|
|
160
|
+
)
|
|
161
|
+
return res.status(401).send('Invalid signature');
|
|
162
|
+
res.status(200).send('OK'); // respond immediately
|
|
159
163
|
processWebhookAsync(req.body); // process asynchronously
|
|
160
164
|
});
|
|
161
165
|
// Retry policy: 3 retries with exponential backoff (1s → 10s → 100s)
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before auditing or hardening API endpoints, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. IDOR Prevention (Section 17) → Perform explicit tenancy checks (`receipt.userId === req.user.id`) and prefer UUIDv4/CUID over sequential integer IDs
|
|
24
25
|
2. Mass Assignment Mitigations (Section 47) → Enforce strict Zod schemas (`.strict()`) to prevent parameter overposting into DB updates
|
|
25
26
|
3. Distributed Rate Limiting (Section 80) → Store rate limit state in Redis for multi-pod load balanced environments to prevent limit bypasses
|
|
@@ -34,19 +35,19 @@ IDOR occurs when an application provides direct access to objects based on user-
|
|
|
34
35
|
|
|
35
36
|
```typescript
|
|
36
37
|
// ❌ VULNERABLE: Trusting the requested ID blindly
|
|
37
|
-
app.get(
|
|
38
|
+
app.get('/api/receipts/:id', async (req, res) => {
|
|
38
39
|
const receipt = await db.receipts.findById(req.params.id);
|
|
39
40
|
res.json(receipt); // Attack: Increment ID to view others' receipts
|
|
40
41
|
});
|
|
41
42
|
|
|
42
43
|
// ✅ SAFE: Verifying ownership
|
|
43
|
-
app.get(
|
|
44
|
+
app.get('/api/receipts/:id', async (req, res) => {
|
|
44
45
|
const receipt = await db.receipts.findById(req.params.id);
|
|
45
46
|
if (!receipt) return res.status(404).send();
|
|
46
47
|
|
|
47
48
|
// Explicit tenancy check
|
|
48
|
-
if (receipt.userId !== req.user.id && req.user.role !==
|
|
49
|
-
return res.status(403).json({ error:
|
|
49
|
+
if (receipt.userId !== req.user.id && req.user.role !== 'admin') {
|
|
50
|
+
return res.status(403).json({ error: 'Access denied' });
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
res.json(receipt);
|
|
@@ -64,20 +65,20 @@ Occurs when web frameworks automatically bind HTTP request parameters to applica
|
|
|
64
65
|
|
|
65
66
|
```typescript
|
|
66
67
|
// ❌ VULNERABLE: Direct object binding
|
|
67
|
-
app.put(
|
|
68
|
+
app.put('/api/users/:id', async (req, res) => {
|
|
68
69
|
// Attack: req.body = { name: "Bob", role: "admin", isPaid: true }
|
|
69
70
|
await db.users.update({ id: req.params.id }, req.body);
|
|
70
|
-
res.send(
|
|
71
|
+
res.send('Updated');
|
|
71
72
|
});
|
|
72
73
|
|
|
73
74
|
// ✅ SAFE: Explicit property selection (DTOs)
|
|
74
|
-
app.put(
|
|
75
|
+
app.put('/api/users/:id', async (req, res) => {
|
|
75
76
|
// Only extract explicitly allowed fields
|
|
76
77
|
const { name, email, bio } = req.body;
|
|
77
78
|
const safeData = { name, email, bio };
|
|
78
79
|
|
|
79
80
|
await db.users.update({ id: req.params.id }, safeData);
|
|
80
|
-
res.send(
|
|
81
|
+
res.send('Updated');
|
|
81
82
|
});
|
|
82
83
|
|
|
83
84
|
// ✅ BEST: Validation libraries (Zod, Joi) handling stripping
|
|
@@ -95,8 +96,8 @@ const UpdateUserSchema = z
|
|
|
95
96
|
|
|
96
97
|
```typescript
|
|
97
98
|
// Basic Rate Limiting (Express)
|
|
98
|
-
import rateLimit from
|
|
99
|
-
import RedisStore from
|
|
99
|
+
import rateLimit from 'express-rate-limit';
|
|
100
|
+
import RedisStore from 'rate-limit-redis';
|
|
100
101
|
|
|
101
102
|
// Global baseline limit
|
|
102
103
|
export const globalLimiter = rateLimit({
|
|
@@ -111,7 +112,7 @@ export const authLimiter = rateLimit({
|
|
|
111
112
|
store: new RedisStore({ client: redisClient }),
|
|
112
113
|
windowMs: 60 * 60 * 1000, // 1 Hour
|
|
113
114
|
max: 5, // 5 login attempts per IP per hour
|
|
114
|
-
message:
|
|
115
|
+
message: 'Too many login attempts, please try again later',
|
|
115
116
|
});
|
|
116
117
|
|
|
117
118
|
// ❌ HALLUCINATION TRAP: In-memory rate limiting across multiple server pods
|
|
@@ -144,8 +145,8 @@ Best Practices for issuance and storage:
|
|
|
144
145
|
|
|
145
146
|
// 1. Query Depth Limiting (Prevent nested joins crushing the DB)
|
|
146
147
|
// User -> Posts -> Comments -> Author -> Posts -> Comments...
|
|
147
|
-
import depthLimit from
|
|
148
|
-
app.use(
|
|
148
|
+
import depthLimit from 'graphql-depth-limit';
|
|
149
|
+
app.use('/graphql', graphqlHTTP({ validationRules: [depthLimit(5)] }));
|
|
149
150
|
|
|
150
151
|
// 2. Query Cost Analysis
|
|
151
152
|
// Prevent attackers from requesting 100,000 items in a single query
|
|
@@ -155,7 +156,7 @@ app.use("/graphql", graphqlHTTP({ validationRules: [depthLimit(5)] }));
|
|
|
155
156
|
// Introspection allows attackers to download your entire schema.
|
|
156
157
|
const server = new ApolloServer({
|
|
157
158
|
schema,
|
|
158
|
-
introspection: process.env.NODE_ENV !==
|
|
159
|
+
introspection: process.env.NODE_ENV !== 'production',
|
|
159
160
|
});
|
|
160
161
|
```
|
|
161
162
|
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before scaffolding or orchestrating application builds, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Clarification Gate (Section 48) → Ask 4 core purpose/constraint questions before selecting stack or creating files
|
|
24
25
|
2. Plan Verification (Section 220) → Ensure `{task-slug}.md` is created and verified in project root before invoking specialist agents
|
|
25
26
|
3. Incremental Build Rule (Section 15) → Never generate entire applications in one shot; build and verify module by module
|
|
@@ -93,11 +93,11 @@ project-name/
|
|
|
93
93
|
Ensure `src/app/globals.css` uses the new import syntax instead of a config file:
|
|
94
94
|
|
|
95
95
|
```css
|
|
96
|
-
@import
|
|
96
|
+
@import 'tailwindcss';
|
|
97
97
|
|
|
98
98
|
@theme {
|
|
99
99
|
--color-primary: oklch(0.5 0.2 240);
|
|
100
|
-
--font-sans:
|
|
100
|
+
--font-sans: 'Inter', sans-serif;
|
|
101
101
|
}
|
|
102
102
|
```
|
|
103
103
|
|
|
@@ -52,10 +52,10 @@ Using `next.config.ts` instead of `.js` for better type safety.
|
|
|
52
52
|
|
|
53
53
|
```typescript
|
|
54
54
|
// next.config.ts
|
|
55
|
-
import type { NextConfig } from
|
|
55
|
+
import type { NextConfig } from 'next';
|
|
56
56
|
|
|
57
57
|
const nextConfig: NextConfig = {
|
|
58
|
-
output:
|
|
58
|
+
output: 'export', // Required for Static Hosting (S3, GitHub Pages)
|
|
59
59
|
images: {
|
|
60
60
|
unoptimized: true, // Required if not using Node.js server image optimization
|
|
61
61
|
},
|
|
@@ -74,19 +74,19 @@ Deprecated next-seo. Configure directly in layout.tsx or page.tsx.
|
|
|
74
74
|
|
|
75
75
|
```typescript
|
|
76
76
|
// src/app/layout.tsx
|
|
77
|
-
import type { Metadata } from
|
|
77
|
+
import type { Metadata } from 'next';
|
|
78
78
|
|
|
79
79
|
export const metadata: Metadata = {
|
|
80
80
|
title: {
|
|
81
|
-
template:
|
|
82
|
-
default:
|
|
81
|
+
template: '%s | Product Name',
|
|
82
|
+
default: 'Home - Product Name',
|
|
83
83
|
},
|
|
84
|
-
description:
|
|
84
|
+
description: 'SEO optimized description for the landing page.',
|
|
85
85
|
openGraph: {
|
|
86
|
-
type:
|
|
87
|
-
locale:
|
|
88
|
-
url:
|
|
89
|
-
siteName:
|
|
86
|
+
type: 'website',
|
|
87
|
+
locale: 'en_US',
|
|
88
|
+
url: 'https://mysite.com',
|
|
89
|
+
siteName: 'My Brand',
|
|
90
90
|
},
|
|
91
91
|
};
|
|
92
92
|
```
|
|
@@ -138,11 +138,11 @@ export const metadata: Metadata = {
|
|
|
138
138
|
3. Configure Tailwind v4 (in `src/app/globals.css`):
|
|
139
139
|
|
|
140
140
|
```css
|
|
141
|
-
@import
|
|
141
|
+
@import 'tailwindcss';
|
|
142
142
|
|
|
143
143
|
@theme {
|
|
144
144
|
--color-primary: #3b82f6;
|
|
145
|
-
--font-sans:
|
|
145
|
+
--font-sans: 'Inter', sans-serif;
|
|
146
146
|
}
|
|
147
147
|
```
|
|
148
148
|
|
|
@@ -99,12 +99,12 @@ project-name/
|
|
|
99
99
|
Add to `nuxt.config.ts`:
|
|
100
100
|
|
|
101
101
|
```ts
|
|
102
|
-
import tailwindcss from
|
|
102
|
+
import tailwindcss from '@tailwindcss/vite';
|
|
103
103
|
export default defineNuxtConfig({
|
|
104
104
|
vite: {
|
|
105
105
|
plugins: [tailwindcss()],
|
|
106
106
|
},
|
|
107
|
-
css: [
|
|
107
|
+
css: ['~/assets/css/main.css'],
|
|
108
108
|
});
|
|
109
109
|
```
|
|
110
110
|
|
|
@@ -112,7 +112,7 @@ project-name/
|
|
|
112
112
|
In `app/assets/css/main.css`:
|
|
113
113
|
|
|
114
114
|
```css
|
|
115
|
-
@import
|
|
115
|
+
@import 'tailwindcss';
|
|
116
116
|
@theme {
|
|
117
117
|
--color-primary: oklch(0.6 0.15 150);
|
|
118
118
|
}
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before engineering Apple-style UIs or gesture-driven components, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Interruptible Physics-Based Springs (Section 22) → Use physics springs (`stiffness: 300, damping: 24, mass: 0.8`) instead of fixed-duration CSS cubic-beziers
|
|
24
25
|
2. Translucent Backdrop Blur (Section 44) → Limit `backdrop-filter: blur(20px) saturate(180%)` strictly to sticky headers or modals to avoid GPU scroll jank
|
|
25
26
|
3. Optical Letter-Spacing (Section 72) → Apply inverse tracking (`-0.025em` for titles, `+0.015em` for small captions) based on SF Pro font scaling
|
|
@@ -41,10 +42,10 @@ Apple interfaces do NOT use fixed-duration cubic-beziers for interactive element
|
|
|
41
42
|
```javascript
|
|
42
43
|
// Framer Motion / Motion React Spring Config
|
|
43
44
|
const appleSpring = {
|
|
44
|
-
type:
|
|
45
|
+
type: 'spring',
|
|
45
46
|
stiffness: 300,
|
|
46
47
|
damping: 24,
|
|
47
|
-
mass: 0.8
|
|
48
|
+
mass: 0.8,
|
|
48
49
|
};
|
|
49
50
|
```
|
|
50
51
|
|
|
@@ -87,11 +88,11 @@ Apple depth relies on subtle, multi-layered backdrop blur and border highlights:
|
|
|
87
88
|
|
|
88
89
|
## Anti-Slop Table
|
|
89
90
|
|
|
90
|
-
| Anti-Pattern
|
|
91
|
-
|
|
|
92
|
-
| Rigid linear/ease transitions | Physics-based spring curves (`stiffness: 300, damping: 24`)
|
|
93
|
-
| Opaque static dropdowns
|
|
94
|
-
| Sudden state jumps
|
|
91
|
+
| Anti-Pattern | Apple Design Solution | Rationale |
|
|
92
|
+
| ----------------------------- | ------------------------------------------------------------- | ----------------------------------------------- |
|
|
93
|
+
| Rigid linear/ease transitions | Physics-based spring curves (`stiffness: 300, damping: 24`) | Simulates real-world physical momentum |
|
|
94
|
+
| Opaque static dropdowns | Translucent backdrop blur panel (`blur(20px) saturate(180%)`) | Preserves spatial context beneath UI |
|
|
95
|
+
| Sudden state jumps | Interruptible velocity-preserving spring animations | Prevents visual jarring during rapid user input |
|
|
95
96
|
|
|
96
97
|
---
|
|
97
98
|
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before selecting architectural patterns or designing systems, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Pragmatic Monolith Default (Section 31) → Start with a modular monolith for teams <5 or scale <100K RPM; ban premature microservices
|
|
24
25
|
2. Clean Architecture Dependency Direction (Section 50) → Ensure dependency arrows point strictly inward to Domain; Domain must have zero external infrastructure dependencies
|
|
25
26
|
3. ADR Requirement for Non-Trivial Decisons (Section 135) → Document every major architectural decision with an ADR in `docs/architecture/`
|
|
@@ -72,7 +73,7 @@ interface UserRepository {
|
|
|
72
73
|
}
|
|
73
74
|
class User {
|
|
74
75
|
promote(): void {
|
|
75
|
-
if (this._role === UserRole.ADMIN) throw new DomainError(
|
|
76
|
+
if (this._role === UserRole.ADMIN) throw new DomainError('Already admin');
|
|
76
77
|
this._role = UserRole.ADMIN;
|
|
77
78
|
}
|
|
78
79
|
}
|
|
@@ -81,7 +82,7 @@ class User {
|
|
|
81
82
|
class PromoteUserUseCase {
|
|
82
83
|
async execute(userId: string): Promise<void> {
|
|
83
84
|
const user = await this.userRepo.findById(userId);
|
|
84
|
-
if (!user) throw new NotFoundError(
|
|
85
|
+
if (!user) throw new NotFoundError('User', userId);
|
|
85
86
|
user.promote();
|
|
86
87
|
await this.userRepo.save(user);
|
|
87
88
|
await this.eventBus.publish(new UserPromotedEvent(userId));
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before performing accessibility audits or fixes, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Automated Violation Detection (Section 24) → Audit markup for missing `alt`, un-labeled inputs/buttons, and `onClick` on non-interactive elements
|
|
24
25
|
2. Prioritization Matrix (Section 31) → Fix Level A blockers (forms, focus traps, keyboard access) before addressing contrast or landmark regions
|
|
25
26
|
3. Anti-Redundant ARIA rule (Section 60) → Do NOT add `role="button"` to native `<button>` tags; apply `aria-hidden="true"` to decorative inner SVGs
|
|
@@ -31,7 +32,9 @@ Systematically audit HTML/JSX markup against WCAG 2.2 AA standards, prioritize a
|
|
|
31
32
|
## 4-Step Remediation Pipeline
|
|
32
33
|
|
|
33
34
|
### 1. Automated Violation Detection
|
|
35
|
+
|
|
34
36
|
Scan component code for:
|
|
37
|
+
|
|
35
38
|
- Missing `alt` tags on `<img>` elements.
|
|
36
39
|
- Form controls (`<input>`, `<select>`) missing associated `<label>` or `aria-label`.
|
|
37
40
|
- Buttons with icon-only content missing `aria-label`.
|
|
@@ -39,11 +42,11 @@ Scan component code for:
|
|
|
39
42
|
|
|
40
43
|
### 2. Prioritization Matrix
|
|
41
44
|
|
|
42
|
-
| Severity Level
|
|
43
|
-
|
|
|
44
|
-
| 🔴 **Blocker (Level A)**
|
|
45
|
-
| 🟠 **Critical (Level AA)** | Low text contrast ratio ($< 4.5:1$), missing ARIA states on custom dropdowns
|
|
46
|
-
| 🟡 **Moderate (Level AA)** | Missing landmark regions (`<main>`, `<nav>`, `<header>`), heading hierarchy gaps | Wrap layout blocks in semantic HTML5 tags.
|
|
45
|
+
| Severity Level | Violation Type | Remediation Action |
|
|
46
|
+
| -------------------------- | -------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
|
47
|
+
| 🔴 **Blocker (Level A)** | Inaccessible form inputs, un-trapped focus in modal, zero keyboard access | Add explicit `<label>`, focus trap, and keyboard handlers immediately. |
|
|
48
|
+
| 🟠 **Critical (Level AA)** | Low text contrast ratio ($< 4.5:1$), missing ARIA states on custom dropdowns | Adjust text colors to OKLCH contrast targets; add `aria-expanded`. |
|
|
49
|
+
| 🟡 **Moderate (Level AA)** | Missing landmark regions (`<main>`, `<nav>`, `<header>`), heading hierarchy gaps | Wrap layout blocks in semantic HTML5 tags. |
|
|
47
50
|
|
|
48
51
|
### 3. Concrete Code Fix Examples
|
|
49
52
|
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before implementing authentication or session flows, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Modern Password Hashing (Section 28) → Use Argon2id or bcrypt; ban legacy fast algorithms (`md5`, `sha256`) for credential hashing
|
|
24
25
|
2. Token Storage Separation (Section 83) → Keep short-lived access tokens in JS memory and long-lived refresh tokens in `HttpOnly`, `SameSite=Lax/Strict` cookies
|
|
25
26
|
3. OAuth PKCE Flow Requirement (Section 109) → Enforce Authorization Code Flow with PKCE for all single-page and mobile apps; ban deprecated Implicit Flow
|
|
@@ -32,10 +33,10 @@ Before implementing authentication or session flows, you MUST inspect:
|
|
|
32
33
|
|
|
33
34
|
```typescript
|
|
34
35
|
// ❌ BAD: md5, sha1, sha256 (too fast, vulnerable to brute force/rainbow tables)
|
|
35
|
-
const hash = crypto.createHash(
|
|
36
|
+
const hash = crypto.createHash('sha256').update(password).digest('hex');
|
|
36
37
|
|
|
37
38
|
// ✅ GOOD: Argon2 (memory-hard, ASIC resistant) or bcrypt
|
|
38
|
-
import * as argon2 from
|
|
39
|
+
import * as argon2 from 'argon2';
|
|
39
40
|
|
|
40
41
|
async function hashPassword(password: string): Promise<string> {
|
|
41
42
|
// Argon2 hashes include the salt inherently in the resulting string
|
|
@@ -86,11 +87,11 @@ async function verifyPassword(hash: string, password: string): Promise<boolean>
|
|
|
86
87
|
// Scenario: API authentication
|
|
87
88
|
// 1. Access Token (Short-lived: 15 mins)
|
|
88
89
|
const accessToken = jwt.sign({ userId: user.id }, JWT_SECRET, {
|
|
89
|
-
expiresIn:
|
|
90
|
-
algorithm:
|
|
90
|
+
expiresIn: '15m',
|
|
91
|
+
algorithm: 'HS256', // ALWAYS explicitly specify
|
|
91
92
|
});
|
|
92
93
|
// 2. Refresh Token (Long-lived: 7 days, opaque string in DB)
|
|
93
|
-
const refreshToken = crypto.randomBytes(40).toString(
|
|
94
|
+
const refreshToken = crypto.randomBytes(40).toString('hex');
|
|
94
95
|
await db.refreshTokens.create({ token: refreshToken, userId: user.id, expires: addDays(7) });
|
|
95
96
|
|
|
96
97
|
// Client flow:
|
|
@@ -142,7 +143,7 @@ Flow (Authorization Code + PKCE):
|
|
|
142
143
|
|
|
143
144
|
```typescript
|
|
144
145
|
// ✅ Check permissions, not roles directly (more flexible)
|
|
145
|
-
if (!user.permissions.includes(
|
|
146
|
+
if (!user.permissions.includes('delete:user')) {
|
|
146
147
|
throw new ForbiddenError();
|
|
147
148
|
}
|
|
148
149
|
```
|
|
@@ -154,9 +155,9 @@ if (!user.permissions.includes("delete:user")) {
|
|
|
154
155
|
```typescript
|
|
155
156
|
// Example Policy
|
|
156
157
|
function canEditPost(user: User, post: Post): boolean {
|
|
157
|
-
if (user.role ===
|
|
158
|
+
if (user.role === 'admin') return true;
|
|
158
159
|
if (post.authorId === user.id) return true;
|
|
159
|
-
if (post.status ===
|
|
160
|
+
if (post.status === 'draft' && user.department === 'content') return true;
|
|
160
161
|
return false;
|
|
161
162
|
}
|
|
162
163
|
```
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before auditing or writing backend server code, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Server Action Endpoints (Section 26) → Treat Next.js Server Actions as public API routes: authenticate session and parse input with Zod at entry
|
|
24
25
|
2. JWT Algorithm Verification (Section 17) → Enforce explicit algorithms (`alg: "HS256"`) when verifying JWT tokens to prevent "None" algorithm exploits
|
|
25
26
|
3. IDOR & RBAC Validation (Section 34) → Verify resource ownership (`WHERE userId = session.userId`) and user roles before executing mutations
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before cleaning up UI styles, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. `DESIGN.md` / `package.json` → Check Tailwind CSS configuration and accessibility primitives (`Base UI`, `Radix`)
|
|
24
25
|
2. The 5-Step Deslop Protocol (Section 33) → Fix spacing violations, establish 3-tier typographic hierarchy, and eliminate harsh borders
|
|
25
26
|
3. Anti-Slop Table (Section 43) → Replace hardcoded arbitrary paddings and low-contrast text with tokenized CSS variables
|
|
@@ -51,13 +52,13 @@ Enforces an opinionated UI baseline to clean up sloppy code and prevent AI-gener
|
|
|
51
52
|
|
|
52
53
|
## Anti-Slop Table
|
|
53
54
|
|
|
54
|
-
| Slop Pattern
|
|
55
|
-
|
|
|
56
|
-
| `color: #888` on dark background
|
|
57
|
-
| `padding: 15px 23px`
|
|
58
|
-
| `border: 1px solid black`
|
|
59
|
-
| Mixed font sizes (13px, 14px, 15px) | Standardized scale (12px, 14px, 16px)
|
|
60
|
-
| Plain text buttons without states
|
|
55
|
+
| Slop Pattern | Baseline Fix | Rationale |
|
|
56
|
+
| ----------------------------------- | ----------------------------------------------- | ------------------------------------------- |
|
|
57
|
+
| `color: #888` on dark background | `color: var(--text-muted)` (min 4.5:1 ratio) | Improves readability and WCAG compliance |
|
|
58
|
+
| `padding: 15px 23px` | `padding: 16px 24px` | Aligns to 8px structural grid |
|
|
59
|
+
| `border: 1px solid black` | `border: 1px solid rgba(0,0,0,0.1)` | Removes harsh, distracting lines |
|
|
60
|
+
| Mixed font sizes (13px, 14px, 15px) | Standardized scale (12px, 14px, 16px) | Establishes clear visual hierarchy |
|
|
61
|
+
| Plain text buttons without states | Rounded button with hover/active press feedback | Indicates clickability and tactile response |
|
|
61
62
|
|
|
62
63
|
---
|
|
63
64
|
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before writing Bash scripts or terminal automation pipelines, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Strict Mode Flags (`set -euo pipefail`) (Section 39) → Always set `set -euo pipefail` and `IFS=$'\n\t'` at top of every script to fail fast on errors or unset vars
|
|
24
25
|
2. Variable Quoting Safeguards (Section 122) → Double-quote all path and string variables (`"$FILE"`, `"${FILES[@]}"`) to prevent whitespace expansion bugs
|
|
25
26
|
3. Modern CLI Efficiency Rules (Section 102) → Prefer `rg` over `grep`, `fd` over `find`, `jq` over regex JSON parsing for performance and safety
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before selecting an operational mode, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. User prompt intent & keywords (Section 148 Mode Selection Rules) → Classify request type (TEACH, DEBUG, REVIEW, PLAN, BUILD, DISCOVER, SHIP, ORCHESTRATE)
|
|
24
25
|
2. Mode Leakage Mitigation rules (Section 160) → Prevent writing unapproved code during DISCOVER or REVIEW modes
|
|
25
26
|
3. Output format contracts → Ensure findings use labeled severity tags (CRITICAL / WARNING / SUGGESTION)
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before defining color palettes or CSS theme variables, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. `DESIGN.md` / `index.css` → Check existing CSS custom properties and color variables
|
|
24
25
|
2. OKLCH Syntax & Relative Color Rules (Section 30) → Use `oklch(L C H)` format with subtle chroma (`C: 0.01-0.02`) for neutrals
|
|
25
26
|
3. WCAG 2.2 AA Contrast Thresholds (Section 82) → Ensure `L ≤ 45%` for text on light background and `L ≥ 70%` on dark background
|
|
@@ -63,7 +64,7 @@ $$\text{Format: } \text{oklch}(L \quad C \quad H [\quad / \quad A])$$
|
|
|
63
64
|
/* Neutrals: Subtly Tinted (Chroma ~ 0.015) */
|
|
64
65
|
--bg-surface: oklch(0.99 0.005 260);
|
|
65
66
|
--bg-surface-raised: oklch(0.96 0.01 260);
|
|
66
|
-
--text-main: oklch(0.
|
|
67
|
+
--text-main: oklch(0.2 0.02 260);
|
|
67
68
|
--text-muted: oklch(0.45 0.02 260);
|
|
68
69
|
--border-subtle: oklch(0.88 0.015 260);
|
|
69
70
|
}
|
|
@@ -72,7 +73,7 @@ $$\text{Format: } \text{oklch}(L \quad C \quad H [\quad / \quad A])$$
|
|
|
72
73
|
:root {
|
|
73
74
|
color-scheme: light dark;
|
|
74
75
|
--surface-adaptive: light-dark(oklch(0.99 0.005 260), oklch(0.14 0.015 260));
|
|
75
|
-
--text-adaptive: light-dark(oklch(0.
|
|
76
|
+
--text-adaptive: light-dark(oklch(0.2 0.02 260), oklch(0.96 0.01 260));
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
@media (prefers-color-scheme: dark) {
|
|
@@ -91,12 +92,15 @@ $$\text{Format: } \text{oklch}(L \quad C \quad H [\quad / \quad A])$$
|
|
|
91
92
|
## 3. WCAG 2.2 AA Contrast Standards
|
|
92
93
|
|
|
93
94
|
Always verify contrast using WCAG AA minimum thresholds:
|
|
95
|
+
|
|
94
96
|
- **Normal Text (< 18pt / < 24px)**: Minimum **4.5:1** contrast ratio.
|
|
95
97
|
- **Large Text (≥ 18pt / ≥ 24px bold)**: Minimum **3.0:1** contrast ratio.
|
|
96
98
|
- **UI Components & Icons**: Minimum **3.0:1** contrast ratio against adjacent surface.
|
|
97
99
|
|
|
98
100
|
### Rule of Thumb in OKLCH:
|
|
101
|
+
|
|
99
102
|
To achieve 4.5:1 text contrast against a surface:
|
|
103
|
+
|
|
100
104
|
- Against Light Surface (`L ≈ 98%`): Text lightness `L` MUST be **`≤ 45%`**.
|
|
101
105
|
- Against Dark Surface (`L ≈ 14%`): Text lightness `L` MUST be **`≥ 70%`**.
|
|
102
106
|
|
|
@@ -111,11 +115,11 @@ To achieve 4.5:1 text contrast against a surface:
|
|
|
111
115
|
|
|
112
116
|
## Anti-Slop Table
|
|
113
117
|
|
|
114
|
-
| Anti-Pattern
|
|
115
|
-
|
|
|
116
|
-
| Single gray for all backgrounds
|
|
117
|
-
| Over-saturated dark mode accents
|
|
118
|
-
| Harsh pure black borders (`#000`) | Alpha-tinted borders (`rgba(255,255,255,0.08)`)
|
|
118
|
+
| Anti-Pattern | OKLCH Solution | Rationale |
|
|
119
|
+
| --------------------------------- | ------------------------------------------------------ | ------------------------------------------------- |
|
|
120
|
+
| Single gray for all backgrounds | Neutral tinted with brand hue (`C: 0.01-0.02`) | Creates cohesive, harmonious UI surfaces |
|
|
121
|
+
| Over-saturated dark mode accents | Scale chroma down (`C: 0.22` → `C: 0.15`) in dark mode | Eliminates glowing text vibration & visual strain |
|
|
122
|
+
| Harsh pure black borders (`#000`) | Alpha-tinted borders (`rgba(255,255,255,0.08)`) | Smooths elevation layers |
|
|
119
123
|
|
|
120
124
|
---
|
|
121
125
|
|
|
@@ -9,7 +9,17 @@ routing:
|
|
|
9
9
|
tier: pro
|
|
10
10
|
co-requires: [typeset, better-ui]
|
|
11
11
|
trigger-signals:
|
|
12
|
-
strong:
|
|
12
|
+
strong:
|
|
13
|
+
[
|
|
14
|
+
better-typography,
|
|
15
|
+
typography,
|
|
16
|
+
type scale,
|
|
17
|
+
font pairing,
|
|
18
|
+
tabular numbers,
|
|
19
|
+
text-wrap balance,
|
|
20
|
+
line-length,
|
|
21
|
+
optical sizing,
|
|
22
|
+
]
|
|
13
23
|
weak: [fonts, text style, line height]
|
|
14
24
|
---
|
|
15
25
|
|
|
@@ -25,14 +35,14 @@ Scale font sizes using a consistent multiplier ($1.25$ Major Third or $1.20$ Min
|
|
|
25
35
|
|
|
26
36
|
```css
|
|
27
37
|
:root {
|
|
28
|
-
--font-size-xs: 0.75rem;
|
|
29
|
-
--font-size-sm: 0.875rem;
|
|
30
|
-
--font-size-base: 1rem;
|
|
31
|
-
--font-size-lg: 1.125rem;
|
|
32
|
-
--font-size-xl: 1.375rem;
|
|
33
|
-
--font-size-2xl: 1.75rem;
|
|
34
|
-
--font-size-3xl: 2.25rem;
|
|
35
|
-
--font-size-4xl: 3rem;
|
|
38
|
+
--font-size-xs: 0.75rem; /* 12px - Labels, Badges */
|
|
39
|
+
--font-size-sm: 0.875rem; /* 14px - Meta, Caption */
|
|
40
|
+
--font-size-base: 1rem; /* 16px - Body Text */
|
|
41
|
+
--font-size-lg: 1.125rem; /* 18px - Lead Body */
|
|
42
|
+
--font-size-xl: 1.375rem; /* 22px - Subheadings */
|
|
43
|
+
--font-size-2xl: 1.75rem; /* 28px - H3 */
|
|
44
|
+
--font-size-3xl: 2.25rem; /* 36px - H2 */
|
|
45
|
+
--font-size-4xl: 3rem; /* 48px - H1 Hero */
|
|
36
46
|
|
|
37
47
|
/* Line Heights proportional to font size */
|
|
38
48
|
--line-height-heading: 1.15;
|
|
@@ -50,7 +60,10 @@ Scale font sizes using a consistent multiplier ($1.25$ Major Third or $1.20$ Min
|
|
|
50
60
|
- **Paragraph Wrapping**: Use `text-wrap: pretty` for long body paragraphs to prevent awkward line breaks.
|
|
51
61
|
|
|
52
62
|
```css
|
|
53
|
-
h1,
|
|
63
|
+
h1,
|
|
64
|
+
h2,
|
|
65
|
+
h3,
|
|
66
|
+
h4 {
|
|
54
67
|
text-wrap: balance;
|
|
55
68
|
letter-spacing: -0.025em;
|
|
56
69
|
line-height: var(--line-height-heading);
|
|
@@ -69,6 +82,7 @@ p {
|
|
|
69
82
|
|
|
70
83
|
- **Tabular Numbers for Data & Timers**: Use `font-variant-numeric: tabular-nums` (or `tnum`) for data tables, counters, prices, and timestamps so numbers align vertically without jumping when values update.
|
|
71
84
|
- **Font Smoothing**: Enable crisp font smoothing on macOS/iOS:
|
|
85
|
+
|
|
72
86
|
```css
|
|
73
87
|
body {
|
|
74
88
|
-webkit-font-smoothing: antialiased;
|
|
@@ -80,12 +94,12 @@ body {
|
|
|
80
94
|
|
|
81
95
|
## Anti-Slop Table
|
|
82
96
|
|
|
83
|
-
| Anti-Pattern
|
|
84
|
-
|
|
|
85
|
-
| Full-width body text (`width: 100%`)
|
|
86
|
-
| Single-word widows on headings
|
|
87
|
-
| Jittering numbers in data tables
|
|
88
|
-
| Default browser line-height (`1.2` on body) | `line-height: 1.5`
|
|
97
|
+
| Anti-Pattern | Typography Solution | Rationale |
|
|
98
|
+
| ------------------------------------------- | ------------------------------------ | ------------------------------------------------ |
|
|
99
|
+
| Full-width body text (`width: 100%`) | `max-width: 65ch` | Prevents eye fatigue across wide desktop screens |
|
|
100
|
+
| Single-word widows on headings | `text-wrap: balance` | Creates balanced visual hierarchy |
|
|
101
|
+
| Jittering numbers in data tables | `font-variant-numeric: tabular-nums` | Keeps columns strictly aligned |
|
|
102
|
+
| Default browser line-height (`1.2` on body) | `line-height: 1.5` | Improves reading comfort |
|
|
89
103
|
|
|
90
104
|
---
|
|
91
105
|
|