opencastle 0.10.7 → 0.11.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.
Files changed (103) hide show
  1. package/README.md +4 -0
  2. package/bin/cli.mjs +4 -0
  3. package/dist/cli/dashboard.d.ts.map +1 -1
  4. package/dist/cli/dashboard.js +5 -1
  5. package/dist/cli/dashboard.js.map +1 -1
  6. package/dist/cli/init.test.js +1 -1
  7. package/dist/cli/init.test.js.map +1 -1
  8. package/dist/cli/lesson.d.ts +17 -0
  9. package/dist/cli/lesson.d.ts.map +1 -0
  10. package/dist/cli/lesson.js +294 -0
  11. package/dist/cli/lesson.js.map +1 -0
  12. package/dist/cli/log.d.ts +7 -0
  13. package/dist/cli/log.d.ts.map +1 -0
  14. package/dist/cli/log.js +131 -0
  15. package/dist/cli/log.js.map +1 -0
  16. package/dist/cli/run/executor.js.map +1 -1
  17. package/dist/cli/run/loop-executor.d.ts +3 -0
  18. package/dist/cli/run/loop-executor.d.ts.map +1 -0
  19. package/dist/cli/run/loop-executor.js +154 -0
  20. package/dist/cli/run/loop-executor.js.map +1 -0
  21. package/dist/cli/run/loop-reporter.d.ts +6 -0
  22. package/dist/cli/run/loop-reporter.d.ts.map +1 -0
  23. package/dist/cli/run/loop-reporter.js +112 -0
  24. package/dist/cli/run/loop-reporter.js.map +1 -0
  25. package/dist/cli/run/reporter.d.ts.map +1 -1
  26. package/dist/cli/run/reporter.js +28 -1
  27. package/dist/cli/run/reporter.js.map +1 -1
  28. package/dist/cli/run/schema.d.ts.map +1 -1
  29. package/dist/cli/run/schema.js +104 -52
  30. package/dist/cli/run/schema.js.map +1 -1
  31. package/dist/cli/run/schema.test.js +214 -0
  32. package/dist/cli/run/schema.test.js.map +1 -1
  33. package/dist/cli/run.d.ts.map +1 -1
  34. package/dist/cli/run.js +84 -3
  35. package/dist/cli/run.js.map +1 -1
  36. package/dist/cli/types.d.ts +59 -1
  37. package/dist/cli/types.d.ts.map +1 -1
  38. package/dist/cli/update.d.ts.map +1 -1
  39. package/dist/cli/update.js +54 -1
  40. package/dist/cli/update.js.map +1 -1
  41. package/package.json +1 -1
  42. package/src/cli/dashboard.ts +5 -1
  43. package/src/cli/init.test.ts +1 -1
  44. package/src/cli/lesson.ts +312 -0
  45. package/src/cli/log.ts +133 -0
  46. package/src/cli/run/executor.ts +8 -8
  47. package/src/cli/run/loop-executor.ts +198 -0
  48. package/src/cli/run/loop-reporter.ts +125 -0
  49. package/src/cli/run/reporter.ts +30 -1
  50. package/src/cli/run/schema.test.ts +242 -2
  51. package/src/cli/run/schema.ts +115 -59
  52. package/src/cli/run.ts +82 -5
  53. package/src/cli/types.ts +67 -1
  54. package/src/cli/update.ts +62 -1
  55. package/src/dashboard/dist/index.html +14 -15
  56. package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
  57. package/src/dashboard/scripts/generate-seed-data.ts +23 -43
  58. package/src/dashboard/seed-data/events.ndjson +104 -0
  59. package/src/dashboard/src/pages/index.astro +14 -15
  60. package/src/orchestrator/agents/api-designer.agent.md +1 -1
  61. package/src/orchestrator/agents/architect.agent.md +1 -1
  62. package/src/orchestrator/agents/content-engineer.agent.md +1 -1
  63. package/src/orchestrator/agents/copywriter.agent.md +1 -1
  64. package/src/orchestrator/agents/data-expert.agent.md +1 -1
  65. package/src/orchestrator/agents/database-engineer.agent.md +1 -1
  66. package/src/orchestrator/agents/developer.agent.md +1 -1
  67. package/src/orchestrator/agents/devops-expert.agent.md +1 -1
  68. package/src/orchestrator/agents/documentation-writer.agent.md +1 -1
  69. package/src/orchestrator/agents/performance-expert.agent.md +1 -1
  70. package/src/orchestrator/agents/release-manager.agent.md +1 -1
  71. package/src/orchestrator/agents/security-expert.agent.md +1 -1
  72. package/src/orchestrator/agents/seo-specialist.agent.md +1 -1
  73. package/src/orchestrator/agents/session-guard.agent.md +9 -21
  74. package/src/orchestrator/agents/team-lead.agent.md +8 -34
  75. package/src/orchestrator/agents/testing-expert.agent.md +1 -1
  76. package/src/orchestrator/agents/ui-ux-expert.agent.md +1 -1
  77. package/src/orchestrator/customizations/AGENT-PERFORMANCE.md +11 -12
  78. package/src/orchestrator/customizations/DISPUTES.md +2 -2
  79. package/src/orchestrator/customizations/README.md +1 -3
  80. package/src/orchestrator/customizations/logs/README.md +66 -14
  81. package/src/orchestrator/instructions/ai-optimization.instructions.md +21 -132
  82. package/src/orchestrator/instructions/general.instructions.md +35 -181
  83. package/src/orchestrator/plugins/nx/SKILL.md +1 -1
  84. package/src/orchestrator/prompts/bootstrap-customizations.prompt.md +4 -8
  85. package/src/orchestrator/prompts/bug-fix.prompt.md +4 -4
  86. package/src/orchestrator/prompts/implement-feature.prompt.md +3 -3
  87. package/src/orchestrator/prompts/quick-refinement.prompt.md +3 -3
  88. package/src/orchestrator/prompts/resolve-pr-comments.prompt.md +1 -1
  89. package/src/orchestrator/skills/agent-hooks/SKILL.md +11 -11
  90. package/src/orchestrator/skills/decomposition/SKILL.md +1 -1
  91. package/src/orchestrator/skills/fast-review/SKILL.md +4 -19
  92. package/src/orchestrator/skills/git-workflow/SKILL.md +72 -0
  93. package/src/orchestrator/skills/memory-merger/SKILL.md +1 -1
  94. package/src/orchestrator/skills/observability-logging/SKILL.md +129 -0
  95. package/src/orchestrator/skills/orchestration-protocols/SKILL.md +2 -2
  96. package/src/orchestrator/skills/panel-majority-vote/SKILL.md +4 -7
  97. package/src/orchestrator/skills/self-improvement/SKILL.md +13 -26
  98. package/src/orchestrator/skills/team-lead-reference/SKILL.md +2 -2
  99. package/src/orchestrator/customizations/logs/delegations.ndjson +0 -1
  100. package/src/orchestrator/customizations/logs/panels.ndjson +0 -1
  101. package/src/orchestrator/customizations/logs/reviews.ndjson +0 -0
  102. package/src/orchestrator/customizations/logs/sessions.ndjson +0 -1
  103. /package/src/orchestrator/customizations/logs/{disputes.ndjson → events.ndjson} +0 -0
@@ -0,0 +1,104 @@
1
+ {"type":"delegation","timestamp":"2026-02-20T08:00:00.000Z","session_id":"feat/tas-43","agent":"DevOps Expert","model":"gpt-5-mini","tier":"standard","mechanism":"sub-agent","tracker_issue":"TAS-43","outcome":"success","retries":1,"phase":1,"file_partition":["libs/queries/","libs/server-utils/"]}
2
+ {"type":"panel","timestamp":"2026-02-20T08:00:00.000Z","panel_key":"auth-review","verdict":"pass","pass_count":2,"block_count":1,"must_fix":0,"should_fix":6,"reviewer_model":"gpt-5.3-codex","weighted":false,"attempt":1,"tracker_issue":"TAS-43","artifacts_count":7,"report_path":"docs/ai-agents/panel/auth-review.md"}
3
+ {"type":"session","timestamp":"2026-02-20T08:00:34.359Z","agent":"Architect","model":"claude-opus-4-6","task":"TAS-46: Fix CORS headers","tracker_issue":"TAS-46","outcome":"success","duration_min":20,"files_changed":9,"retries":1,"lessons_added":["LES-002"],"discoveries":[]}
4
+ {"type":"session","timestamp":"2026-02-20T11:05:05.028Z","agent":"Supabase DB Expert","model":"gpt-5-mini","task":"TAS-56: Fix redirect loop","tracker_issue":"TAS-56","outcome":"partial","duration_min":32,"files_changed":5,"retries":2,"lessons_added":[],"discoveries":[]}
5
+ {"type":"delegation","timestamp":"2026-02-20T11:38:52.677Z","session_id":"feat/tas-31","agent":"Architect","model":"gpt-5.3-codex","tier":"economy","mechanism":"sub-agent","tracker_issue":"TAS-31","outcome":"success","retries":0,"phase":2,"file_partition":["libs/data-pipeline/"]}
6
+ {"type":"session","timestamp":"2026-02-20T13:16:10.762Z","agent":"Sanity Expert","model":"gpt-5-mini","task":"TAS-51: Fix redirect loop","tracker_issue":"TAS-51","outcome":"success","duration_min":33,"files_changed":11,"retries":1,"lessons_added":[],"discoveries":[]}
7
+ {"type":"delegation","timestamp":"2026-02-20T15:37:40.293Z","session_id":"feat/tas-59","agent":"Documentation Writer","model":"gemini-3.1-pro","tier":"standard","mechanism":"background","tracker_issue":"TAS-59","outcome":"success","retries":0,"phase":2,"file_partition":["libs/data-pipeline/"]}
8
+ {"type":"session","timestamp":"2026-02-20T15:42:21.649Z","agent":"Architect","model":"gpt-5.3-codex","task":"TAS-48: Add venue suggestions","tracker_issue":"TAS-48","outcome":"success","duration_min":42,"files_changed":6,"retries":1,"lessons_added":["LES-005"],"discoveries":[]}
9
+ {"type":"session","timestamp":"2026-02-20T18:33:39.948Z","agent":"Next.js Developer","model":"gemini-3.1-pro","task":"TAS-45: Add image optimization","tracker_issue":"TAS-45","outcome":"success","duration_min":17,"files_changed":6,"retries":0,"lessons_added":[],"discoveries":[]}
10
+ {"type":"panel","timestamp":"2026-02-20T19:09:32.117Z","panel_key":"security-audit","verdict":"pass","pass_count":2,"block_count":1,"must_fix":0,"should_fix":5,"reviewer_model":"claude-opus-4-6","weighted":false,"attempt":1,"tracker_issue":"TAS-48","artifacts_count":9,"report_path":"docs/ai-agents/panel/security-audit.md"}
11
+ {"type":"delegation","timestamp":"2026-02-20T19:36:10.946Z","session_id":"feat/tas-49","agent":"Data Expert","model":"gemini-3.1-pro","tier":"utility","mechanism":"sub-agent","tracker_issue":"TAS-49","outcome":"partial","retries":0,"phase":3,"file_partition":["libs/queries/","libs/server-utils/"]}
12
+ {"type":"session","timestamp":"2026-02-20T20:50:56.727Z","agent":"UI/UX Expert","model":"claude-opus-4-6","task":"TAS-49: Fix redirect loop","tracker_issue":"TAS-49","outcome":"success","duration_min":29,"files_changed":13,"retries":1,"lessons_added":["LES-002"],"discoveries":[]}
13
+ {"type":"delegation","timestamp":"2026-02-20T23:09:18.799Z","session_id":"feat/tas-49","agent":"Supabase DB Expert","model":"gpt-5-mini","tier":"utility","mechanism":"background","tracker_issue":"TAS-49","outcome":"failed","retries":1,"phase":3,"file_partition":["libs/ui-kit/","apps/tastebeer.eu/app/"]}
14
+ {"type":"session","timestamp":"2026-02-21T00:05:00.537Z","agent":"Testing Expert","model":"gpt-5-mini","task":"TAS-58: Fix mobile layout","tracker_issue":"TAS-58","outcome":"partial","duration_min":36,"files_changed":5,"retries":1,"lessons_added":[],"discoveries":[]}
15
+ {"type":"session","timestamp":"2026-02-21T01:56:41.910Z","agent":"Supabase DB Expert","model":"gpt-5.3-codex","task":"TAS-42: Optimize bundle size","tracker_issue":"TAS-42","outcome":"partial","duration_min":25,"files_changed":15,"retries":2,"lessons_added":[],"discoveries":[]}
16
+ {"type":"delegation","timestamp":"2026-02-21T02:23:04.138Z","session_id":"feat/tas-32","agent":"Security Expert","model":"gpt-5-mini","tier":"utility","mechanism":"sub-agent","tracker_issue":"TAS-32","outcome":"success","retries":0,"phase":1,"file_partition":["apps/tastebeer.eu/app/","apps/tastecoffee.eu/app/"]}
17
+ {"type":"session","timestamp":"2026-02-21T05:11:42.700Z","agent":"Security Expert","model":"gpt-5.3-codex","task":"TAS-51: Add image optimization","tracker_issue":"TAS-51","outcome":"success","duration_min":11,"files_changed":5,"retries":1,"lessons_added":["LES-002"],"discoveries":["Refactor auth flow"]}
18
+ {"type":"delegation","timestamp":"2026-02-21T05:52:23.451Z","session_id":"feat/tas-39","agent":"Next.js Developer","model":"gpt-5.3-codex","tier":"utility","mechanism":"sub-agent","tracker_issue":"TAS-39","outcome":"success","retries":0,"phase":4,"file_partition":["apps/cms-studio/"]}
19
+ {"type":"panel","timestamp":"2026-02-21T06:02:55.882Z","panel_key":"perf-review","verdict":"pass","pass_count":3,"block_count":0,"must_fix":0,"should_fix":8,"reviewer_model":"gpt-5-mini","weighted":false,"attempt":1,"tracker_issue":"TAS-37","artifacts_count":16,"report_path":"docs/ai-agents/panel/perf-review.md"}
20
+ {"type":"session","timestamp":"2026-02-21T07:24:02.899Z","agent":"Next.js Developer","model":"gpt-5.3-codex","task":"TAS-42: Update scraper logic","tracker_issue":"TAS-42","outcome":"success","duration_min":24,"files_changed":9,"retries":0,"lessons_added":[],"discoveries":[]}
21
+ {"type":"session","timestamp":"2026-02-21T10:15:19.797Z","agent":"DevOps Expert","model":"gemini-3.1-pro","task":"TAS-53: Update SEO metadata","tracker_issue":"TAS-53","outcome":"success","duration_min":29,"files_changed":11,"retries":0,"lessons_added":[],"discoveries":["Update venue detail"]}
22
+ {"type":"delegation","timestamp":"2026-02-21T10:29:16.394Z","session_id":"feat/tas-41","agent":"Testing Expert","model":"claude-opus-4-6","tier":"utility","mechanism":"background","tracker_issue":"TAS-41","outcome":"success","retries":1,"phase":2,"file_partition":["libs/data-pipeline/","libs/queries/"]}
23
+ {"type":"session","timestamp":"2026-02-21T12:33:24.255Z","agent":"Testing Expert","model":"gemini-3.1-pro","task":"TAS-50: Refactor auth flow","tracker_issue":"TAS-50","outcome":"success","duration_min":29,"files_changed":11,"retries":0,"lessons_added":[],"discoveries":["Add social links"]}
24
+ {"type":"delegation","timestamp":"2026-02-21T14:00:03.752Z","session_id":"feat/tas-50","agent":"Next.js Developer","model":"gpt-5.3-codex","tier":"utility","mechanism":"sub-agent","tracker_issue":"TAS-50","outcome":"success","retries":0,"phase":1,"file_partition":["libs/supabase-auth/"]}
25
+ {"type":"session","timestamp":"2026-02-21T14:54:49.349Z","agent":"Data Expert","model":"gpt-5-mini","task":"TAS-47: Fix slug generation","tracker_issue":"TAS-47","outcome":"partial","duration_min":25,"files_changed":3,"retries":2,"lessons_added":[],"discoveries":[]}
26
+ {"type":"panel","timestamp":"2026-02-21T16:32:56.551Z","panel_key":"a11y-audit","verdict":"block","pass_count":0,"block_count":3,"must_fix":4,"should_fix":3,"reviewer_model":"claude-opus-4-6","weighted":false,"attempt":2,"tracker_issue":"TAS-39","artifacts_count":16,"report_path":"docs/ai-agents/panel/a11y-audit.md"}
27
+ {"type":"delegation","timestamp":"2026-02-21T17:10:13.592Z","session_id":"feat/tas-41","agent":"UI/UX Expert","model":"gpt-5.3-codex","tier":"premium","mechanism":"sub-agent","tracker_issue":"TAS-41","outcome":"success","retries":1,"phase":1,"file_partition":["apps/tastecoffee.eu/app/"]}
28
+ {"type":"session","timestamp":"2026-02-21T18:06:15.985Z","agent":"Sanity Expert","model":"gemini-3.1-pro","task":"TAS-44: Update moderation UI","tracker_issue":"TAS-44","outcome":"success","duration_min":18,"files_changed":4,"retries":1,"lessons_added":["LES-010"],"discoveries":["Fix pagination"]}
29
+ {"type":"session","timestamp":"2026-02-21T20:51:57.384Z","agent":"Performance Expert","model":"claude-opus-4-6","task":"TAS-47: Add geolocation","tracker_issue":"TAS-47","outcome":"partial","duration_min":22,"files_changed":3,"retries":1,"lessons_added":["LES-006"],"discoveries":[]}
30
+ {"type":"delegation","timestamp":"2026-02-21T21:26:17.711Z","session_id":"feat/tas-58","agent":"Sanity Expert","model":"gpt-5-mini","tier":"utility","mechanism":"background","tracker_issue":"TAS-58","outcome":"success","retries":1,"phase":1,"file_partition":["libs/ui-kit/","apps/tastebeer.eu/app/"]}
31
+ {"type":"session","timestamp":"2026-02-21T22:37:25.143Z","agent":"Sanity Expert","model":"gpt-5.3-codex","task":"TAS-38: Fix header navigation","tracker_issue":"TAS-38","outcome":"success","duration_min":38,"files_changed":3,"retries":0,"lessons_added":[],"discoveries":["Add cache headers"]}
32
+ {"type":"delegation","timestamp":"2026-02-22T00:51:23.821Z","session_id":"feat/tas-33","agent":"DevOps Expert","model":"gpt-5-mini","tier":"utility","mechanism":"background","tracker_issue":"TAS-33","outcome":"failed","retries":2,"phase":1,"file_partition":["apps/tastebeer.eu/app/","apps/tastecoffee.eu/app/"]}
33
+ {"type":"session","timestamp":"2026-02-22T02:04:09.220Z","agent":"Data Expert","model":"gpt-5-mini","task":"TAS-40: Update CMS schema","tracker_issue":"TAS-40","outcome":"failed","duration_min":29,"files_changed":1,"retries":3,"lessons_added":["LES-003"],"discoveries":["Add social links"]}
34
+ {"type":"panel","timestamp":"2026-02-22T03:35:46.612Z","panel_key":"schema-review","verdict":"block","pass_count":0,"block_count":3,"must_fix":5,"should_fix":2,"reviewer_model":"gpt-5-mini","weighted":false,"attempt":2,"tracker_issue":"TAS-54","artifacts_count":20,"report_path":"docs/ai-agents/panel/schema-review.md"}
35
+ {"type":"session","timestamp":"2026-02-22T04:18:52.718Z","agent":"Supabase DB Expert","model":"gemini-3.1-pro","task":"TAS-38: Update scraper logic","tracker_issue":"TAS-38","outcome":"success","duration_min":32,"files_changed":1,"retries":0,"lessons_added":[],"discoveries":[]}
36
+ {"type":"delegation","timestamp":"2026-02-22T04:53:39.261Z","session_id":"feat/tas-35","agent":"Documentation Writer","model":"gpt-5.3-codex","tier":"utility","mechanism":"background","tracker_issue":"TAS-35","outcome":"success","retries":1,"phase":1,"file_partition":["libs/server-utils/"]}
37
+ {"type":"session","timestamp":"2026-02-22T06:31:31.565Z","agent":"Architect","model":"gemini-3.1-pro","task":"TAS-41: Add unit tests","tracker_issue":"TAS-41","outcome":"success","duration_min":13,"files_changed":14,"retries":0,"lessons_added":[],"discoveries":[]}
38
+ {"type":"delegation","timestamp":"2026-02-22T08:20:53.525Z","session_id":"feat/tas-59","agent":"DevOps Expert","model":"claude-opus-4-6","tier":"standard","mechanism":"sub-agent","tracker_issue":"TAS-59","outcome":"success","retries":0,"phase":4,"file_partition":["libs/queries/"]}
39
+ {"type":"session","timestamp":"2026-02-22T09:44:33.779Z","agent":"Security Expert","model":"gemini-3.1-pro","task":"TAS-51: Update RLS policies","tracker_issue":"TAS-51","outcome":"failed","duration_min":8,"files_changed":10,"retries":3,"lessons_added":["LES-004"],"discoveries":["Update scraper logic"]}
40
+ {"type":"delegation","timestamp":"2026-02-22T11:43:14.243Z","session_id":"feat/tas-36","agent":"Next.js Developer","model":"gpt-5.3-codex","tier":"economy","mechanism":"sub-agent","tracker_issue":"TAS-36","outcome":"success","retries":0,"phase":1,"file_partition":["libs/server-utils/"]}
41
+ {"type":"session","timestamp":"2026-02-22T12:20:59.680Z","agent":"Testing Expert","model":"gpt-5-mini","task":"TAS-32: Add venue suggestions","tracker_issue":"TAS-32","outcome":"failed","duration_min":21,"files_changed":12,"retries":3,"lessons_added":["LES-001"],"discoveries":["Fix CORS headers"]}
42
+ {"type":"panel","timestamp":"2026-02-22T14:02:10.154Z","panel_key":"api-review","verdict":"pass","pass_count":3,"block_count":0,"must_fix":0,"should_fix":8,"reviewer_model":"gpt-5.3-codex","weighted":true,"attempt":1,"tracker_issue":"TAS-50","artifacts_count":17,"report_path":"docs/ai-agents/panel/api-review.md"}
43
+ {"type":"session","timestamp":"2026-02-22T14:18:43.678Z","agent":"Supabase DB Expert","model":"claude-opus-4-6","task":"TAS-55: Update search API","tracker_issue":"TAS-55","outcome":"success","duration_min":33,"files_changed":12,"retries":1,"lessons_added":[],"discoveries":[]}
44
+ {"type":"delegation","timestamp":"2026-02-22T15:29:36.510Z","session_id":"feat/tas-54","agent":"Supabase DB Expert","model":"gpt-5.3-codex","tier":"standard","mechanism":"background","tracker_issue":"TAS-54","outcome":"success","retries":0,"phase":4,"file_partition":["apps/cms-studio/"]}
45
+ {"type":"session","timestamp":"2026-02-22T17:34:33.606Z","agent":"Documentation Writer","model":"claude-opus-4-6","task":"TAS-55: Update venue detail","tracker_issue":"TAS-55","outcome":"success","duration_min":6,"files_changed":6,"retries":1,"lessons_added":[],"discoveries":["Add cache headers"]}
46
+ {"type":"delegation","timestamp":"2026-02-22T19:18:04.518Z","session_id":"feat/tas-41","agent":"DevOps Expert","model":"gemini-3.1-pro","tier":"utility","mechanism":"background","tracker_issue":"TAS-41","outcome":"success","retries":1,"phase":3,"file_partition":["libs/server-utils/"]}
47
+ {"type":"session","timestamp":"2026-02-22T20:17:44.211Z","agent":"Supabase DB Expert","model":"claude-opus-4-6","task":"TAS-36: Add price filter","tracker_issue":"TAS-36","outcome":"success","duration_min":19,"files_changed":4,"retries":0,"lessons_added":[],"discoveries":[]}
48
+ {"type":"session","timestamp":"2026-02-22T22:32:33.601Z","agent":"Supabase DB Expert","model":"claude-opus-4-6","task":"TAS-37: Fix pagination","tracker_issue":"TAS-37","outcome":"partial","duration_min":44,"files_changed":2,"retries":1,"lessons_added":[],"discoveries":["Add venue suggestions"]}
49
+ {"type":"delegation","timestamp":"2026-02-22T23:18:07.164Z","session_id":"feat/tas-44","agent":"Next.js Developer","model":"claude-opus-4-6","tier":"premium","mechanism":"sub-agent","tracker_issue":"TAS-44","outcome":"success","retries":1,"phase":2,"file_partition":["libs/server-utils/"]}
50
+ {"type":"panel","timestamp":"2026-02-23T01:09:17.203Z","panel_key":"ui-review","verdict":"block","pass_count":1,"block_count":2,"must_fix":5,"should_fix":6,"reviewer_model":"claude-opus-4-6","weighted":true,"attempt":2,"tracker_issue":"TAS-55","artifacts_count":15,"report_path":"docs/ai-agents/panel/ui-review.md"}
51
+ {"type":"session","timestamp":"2026-02-23T01:26:57.546Z","agent":"Sanity Expert","model":"gpt-5-mini","task":"TAS-52: Add social links","tracker_issue":"TAS-52","outcome":"partial","duration_min":13,"files_changed":3,"retries":0,"lessons_added":[],"discoveries":[]}
52
+ {"type":"delegation","timestamp":"2026-02-23T02:34:46.644Z","session_id":"feat/tas-30","agent":"Sanity Expert","model":"gemini-3.1-pro","tier":"utility","mechanism":"sub-agent","tracker_issue":"TAS-30","outcome":"failed","retries":2,"phase":4,"file_partition":["apps/tastebeer.eu/app/","apps/tastecoffee.eu/app/"]}
53
+ {"type":"session","timestamp":"2026-02-23T03:16:41.486Z","agent":"Architect","model":"gpt-5.3-codex","task":"TAS-31: Add sort options","tracker_issue":"TAS-31","outcome":"success","duration_min":31,"files_changed":8,"retries":1,"lessons_added":[],"discoveries":[]}
54
+ {"type":"delegation","timestamp":"2026-02-23T06:21:11.926Z","session_id":"feat/tas-45","agent":"Performance Expert","model":"gpt-5-mini","tier":"utility","mechanism":"sub-agent","tracker_issue":"TAS-45","outcome":"success","retries":1,"phase":4,"file_partition":["libs/ui-kit/","apps/tastebeer.eu/app/"]}
55
+ {"type":"session","timestamp":"2026-02-23T06:22:53.878Z","agent":"Sanity Expert","model":"gemini-3.1-pro","task":"TAS-47: Add price filter","tracker_issue":"TAS-47","outcome":"success","duration_min":19,"files_changed":4,"retries":1,"lessons_added":[],"discoveries":["Fix pagination"]}
56
+ {"type":"session","timestamp":"2026-02-23T09:04:20.943Z","agent":"UI/UX Expert","model":"gpt-5-mini","task":"TAS-34: Add geolocation","tracker_issue":"TAS-34","outcome":"success","duration_min":35,"files_changed":1,"retries":0,"lessons_added":[],"discoveries":[]}
57
+ {"type":"delegation","timestamp":"2026-02-23T09:50:56.855Z","session_id":"feat/tas-50","agent":"Data Expert","model":"gemini-3.1-pro","tier":"standard","mechanism":"background","tracker_issue":"TAS-50","outcome":"success","retries":1,"phase":2,"file_partition":["libs/supabase-auth/"]}
58
+ {"type":"session","timestamp":"2026-02-23T11:28:05.523Z","agent":"Data Expert","model":"claude-opus-4-6","task":"TAS-36: Update CMS schema","tracker_issue":"TAS-36","outcome":"success","duration_min":15,"files_changed":9,"retries":1,"lessons_added":[],"discoveries":[]}
59
+ {"type":"panel","timestamp":"2026-02-23T11:41:37.464Z","panel_key":"test-coverage","verdict":"pass","pass_count":3,"block_count":0,"must_fix":0,"should_fix":3,"reviewer_model":"gpt-5-mini","weighted":false,"attempt":1,"tracker_issue":"TAS-31","artifacts_count":18,"report_path":"docs/ai-agents/panel/test-coverage.md"}
60
+ {"type":"session","timestamp":"2026-02-23T14:15:53.224Z","agent":"Data Expert","model":"gpt-5.3-codex","task":"TAS-31: Fix redirect loop","tracker_issue":"TAS-31","outcome":"success","duration_min":43,"files_changed":8,"retries":1,"lessons_added":[],"discoveries":[]}
61
+ {"type":"delegation","timestamp":"2026-02-23T14:28:33.926Z","session_id":"feat/tas-55","agent":"UI/UX Expert","model":"gpt-5-mini","tier":"economy","mechanism":"background","tracker_issue":"TAS-55","outcome":"success","retries":1,"phase":3,"file_partition":["libs/ui-kit/","apps/tastebeer.eu/app/"]}
62
+ {"type":"session","timestamp":"2026-02-23T16:28:00.114Z","agent":"UI/UX Expert","model":"gpt-5-mini","task":"TAS-35: Add cache headers","tracker_issue":"TAS-35","outcome":"success","duration_min":37,"files_changed":14,"retries":1,"lessons_added":[],"discoveries":[]}
63
+ {"type":"delegation","timestamp":"2026-02-23T17:21:16.023Z","session_id":"feat/tas-34","agent":"Data Expert","model":"claude-opus-4-6","tier":"utility","mechanism":"sub-agent","tracker_issue":"TAS-34","outcome":"partial","retries":1,"phase":4,"file_partition":["libs/ui-kit/","apps/tastebeer.eu/app/"]}
64
+ {"type":"session","timestamp":"2026-02-23T18:44:29.480Z","agent":"Architect","model":"gemini-3.1-pro","task":"TAS-56: Add cache headers","tracker_issue":"TAS-56","outcome":"failed","duration_min":39,"files_changed":12,"retries":2,"lessons_added":[],"discoveries":["Fix SSR hydration"]}
65
+ {"type":"delegation","timestamp":"2026-02-23T21:23:59.785Z","session_id":"feat/tas-54","agent":"Supabase DB Expert","model":"claude-opus-4-6","tier":"standard","mechanism":"background","tracker_issue":"TAS-54","outcome":"success","retries":0,"phase":1,"file_partition":["apps/tastebeer.eu/app/"]}
66
+ {"type":"session","timestamp":"2026-02-23T22:10:16.183Z","agent":"Performance Expert","model":"gpt-5.3-codex","task":"TAS-33: Add price filter","tracker_issue":"TAS-33","outcome":"success","duration_min":37,"files_changed":13,"retries":0,"lessons_added":[],"discoveries":[]}
67
+ {"type":"panel","timestamp":"2026-02-23T22:16:10.866Z","panel_key":"csp-headers","verdict":"pass","pass_count":2,"block_count":1,"must_fix":0,"should_fix":3,"reviewer_model":"gemini-3.1-pro","weighted":false,"attempt":1,"tracker_issue":"TAS-40","artifacts_count":6,"report_path":"docs/ai-agents/panel/csp-headers.md"}
68
+ {"type":"session","timestamp":"2026-02-24T00:09:22.013Z","agent":"Security Expert","model":"gpt-5.3-codex","task":"TAS-48: Update search API","tracker_issue":"TAS-48","outcome":"success","duration_min":15,"files_changed":8,"retries":1,"lessons_added":[],"discoveries":["Update CMS schema"]}
69
+ {"type":"delegation","timestamp":"2026-02-24T01:37:32.832Z","session_id":"feat/tas-45","agent":"UI/UX Expert","model":"gemini-3.1-pro","tier":"economy","mechanism":"background","tracker_issue":"TAS-45","outcome":"success","retries":1,"phase":1,"file_partition":["libs/ui-kit/","apps/tastebeer.eu/app/"]}
70
+ {"type":"session","timestamp":"2026-02-24T03:00:42.606Z","agent":"Testing Expert","model":"gpt-5-mini","task":"TAS-39: Fix cookie consent","tracker_issue":"TAS-39","outcome":"success","duration_min":42,"files_changed":10,"retries":0,"lessons_added":[],"discoveries":[]}
71
+ {"type":"delegation","timestamp":"2026-02-24T04:36:24.219Z","session_id":"feat/tas-32","agent":"Data Expert","model":"gpt-5.3-codex","tier":"utility","mechanism":"sub-agent","tracker_issue":"TAS-32","outcome":"success","retries":1,"phase":4,"file_partition":["libs/data-pipeline/","libs/queries/"]}
72
+ {"type":"session","timestamp":"2026-02-24T05:18:53.042Z","agent":"Next.js Developer","model":"gemini-3.1-pro","task":"TAS-37: Update contact form","tracker_issue":"TAS-37","outcome":"failed","duration_min":20,"files_changed":11,"retries":2,"lessons_added":[],"discoveries":["Add geolocation"]}
73
+ {"type":"session","timestamp":"2026-02-24T08:11:14.714Z","agent":"Next.js Developer","model":"gemini-3.1-pro","task":"TAS-30: Add unit tests","tracker_issue":"TAS-30","outcome":"partial","duration_min":32,"files_changed":6,"retries":2,"lessons_added":["LES-009"],"discoveries":["Fix SSR hydration"]}
74
+ {"type":"delegation","timestamp":"2026-02-24T08:15:17.039Z","session_id":"feat/tas-49","agent":"Data Expert","model":"gpt-5.3-codex","tier":"premium","mechanism":"sub-agent","tracker_issue":"TAS-49","outcome":"success","retries":1,"phase":3,"file_partition":["libs/data-pipeline/"]}
75
+ {"type":"panel","timestamp":"2026-02-24T09:55:09.030Z","panel_key":"migration-review","verdict":"pass","pass_count":3,"block_count":0,"must_fix":0,"should_fix":5,"reviewer_model":"gemini-3.1-pro","weighted":false,"attempt":1,"tracker_issue":"TAS-53","artifacts_count":6,"report_path":"docs/ai-agents/panel/migration-review.md"}
76
+ {"type":"session","timestamp":"2026-02-24T10:24:49.892Z","agent":"Performance Expert","model":"claude-opus-4-6","task":"TAS-33: Fix cookie consent","tracker_issue":"TAS-33","outcome":"failed","duration_min":39,"files_changed":2,"retries":2,"lessons_added":[],"discoveries":[]}
77
+ {"type":"delegation","timestamp":"2026-02-24T12:28:28.251Z","session_id":"feat/tas-31","agent":"DevOps Expert","model":"claude-opus-4-6","tier":"premium","mechanism":"background","tracker_issue":"TAS-31","outcome":"partial","retries":0,"phase":4,"file_partition":["libs/ui-kit/","apps/tastebeer.eu/app/"]}
78
+ {"type":"session","timestamp":"2026-02-24T12:54:27.158Z","agent":"Data Expert","model":"claude-opus-4-6","task":"TAS-35: Add filter component","tracker_issue":"TAS-35","outcome":"success","duration_min":13,"files_changed":7,"retries":1,"lessons_added":[],"discoveries":[]}
79
+ {"type":"session","timestamp":"2026-02-24T15:47:57.543Z","agent":"Performance Expert","model":"gpt-5.3-codex","task":"TAS-59: Fix CSP violations","tracker_issue":"TAS-59","outcome":"success","duration_min":25,"files_changed":7,"retries":1,"lessons_added":[],"discoveries":["Add venue suggestions"]}
80
+ {"type":"delegation","timestamp":"2026-02-24T16:03:58.674Z","session_id":"feat/tas-51","agent":"Data Expert","model":"gpt-5-mini","tier":"standard","mechanism":"sub-agent","tracker_issue":"TAS-51","outcome":"success","retries":0,"phase":2,"file_partition":["libs/queries/"]}
81
+ {"type":"session","timestamp":"2026-02-24T18:21:34.626Z","agent":"Testing Expert","model":"claude-opus-4-6","task":"TAS-47: Add image optimization","tracker_issue":"TAS-47","outcome":"success","duration_min":45,"files_changed":1,"retries":1,"lessons_added":["LES-005"],"discoveries":[]}
82
+ {"type":"delegation","timestamp":"2026-02-24T19:36:47.295Z","session_id":"feat/tas-45","agent":"Security Expert","model":"gpt-5.3-codex","tier":"premium","mechanism":"sub-agent","tracker_issue":"TAS-45","outcome":"success","retries":0,"phase":1,"file_partition":["apps/tastecoffee.eu/app/"]}
83
+ {"type":"panel","timestamp":"2026-02-24T20:15:45.425Z","panel_key":"query-optimization","verdict":"block","pass_count":0,"block_count":3,"must_fix":5,"should_fix":5,"reviewer_model":"gpt-5-mini","weighted":false,"attempt":3,"tracker_issue":"TAS-42","artifacts_count":15,"report_path":"docs/ai-agents/panel/query-optimization.md"}
84
+ {"type":"session","timestamp":"2026-02-24T20:46:38.816Z","agent":"DevOps Expert","model":"gemini-3.1-pro","task":"TAS-36: Add geolocation","tracker_issue":"TAS-36","outcome":"success","duration_min":22,"files_changed":9,"retries":0,"lessons_added":[],"discoveries":[]}
85
+ {"type":"delegation","timestamp":"2026-02-24T23:22:20.331Z","session_id":"feat/tas-54","agent":"Documentation Writer","model":"gpt-5-mini","tier":"utility","mechanism":"sub-agent","tracker_issue":"TAS-54","outcome":"success","retries":0,"phase":1,"file_partition":["apps/tastebeer.eu/app/","apps/tastecoffee.eu/app/"]}
86
+ {"type":"session","timestamp":"2026-02-24T23:50:07.144Z","agent":"Next.js Developer","model":"claude-opus-4-6","task":"TAS-32: Add price filter","tracker_issue":"TAS-32","outcome":"success","duration_min":15,"files_changed":11,"retries":1,"lessons_added":[],"discoveries":[]}
87
+ {"type":"session","timestamp":"2026-02-25T02:48:10.908Z","agent":"Sanity Expert","model":"claude-opus-4-6","task":"TAS-32: Add cache headers","tracker_issue":"TAS-32","outcome":"failed","duration_min":38,"files_changed":8,"retries":1,"lessons_added":["LES-008"],"discoveries":[]}
88
+ {"type":"delegation","timestamp":"2026-02-25T03:04:08.793Z","session_id":"feat/tas-42","agent":"Next.js Developer","model":"gpt-5-mini","tier":"premium","mechanism":"sub-agent","tracker_issue":"TAS-42","outcome":"success","retries":1,"phase":4,"file_partition":["apps/cms-studio/"]}
89
+ {"type":"session","timestamp":"2026-02-25T05:22:40.043Z","agent":"Next.js Developer","model":"gemini-3.1-pro","task":"TAS-31: Update contact form","tracker_issue":"TAS-31","outcome":"success","duration_min":8,"files_changed":7,"retries":0,"lessons_added":[],"discoveries":[]}
90
+ {"type":"delegation","timestamp":"2026-02-25T06:35:46.724Z","session_id":"feat/tas-38","agent":"DevOps Expert","model":"gpt-5.3-codex","tier":"utility","mechanism":"sub-agent","tracker_issue":"TAS-38","outcome":"success","retries":1,"phase":4,"file_partition":["libs/server-utils/"]}
91
+ {"type":"panel","timestamp":"2026-02-25T07:07:18.806Z","panel_key":"deployment-checklist","verdict":"pass","pass_count":3,"block_count":0,"must_fix":0,"should_fix":8,"reviewer_model":"gemini-3.1-pro","weighted":true,"attempt":1,"tracker_issue":"TAS-33","artifacts_count":6,"report_path":"docs/ai-agents/panel/deployment-checklist.md"}
92
+ {"type":"session","timestamp":"2026-02-25T07:56:19.927Z","agent":"Architect","model":"claude-opus-4-6","task":"TAS-57: Fix cookie consent","tracker_issue":"TAS-57","outcome":"success","duration_min":22,"files_changed":9,"retries":0,"lessons_added":[],"discoveries":[]}
93
+ {"type":"panel","timestamp":"2026-02-25T10:00:00Z","panel_key":"instruction-refactoring","verdict":"pass","pass_count":3,"block_count":0,"must_fix":0,"should_fix":5,"reviewer_model":"claude-opus-4-6","weighted":false,"attempt":1,"artifacts_count":14,"report_path":"docs/ai-agents/panel/instruction-refactoring.md"}
94
+ {"type":"session","timestamp":"2026-02-25T10:34:21.652Z","agent":"UI/UX Expert","model":"claude-opus-4-6","task":"TAS-33: Update search API","tracker_issue":"TAS-33","outcome":"failed","duration_min":41,"files_changed":11,"retries":1,"lessons_added":[],"discoveries":[]}
95
+ {"type":"delegation","timestamp":"2026-02-25T10:39:46.727Z","session_id":"feat/tas-38","agent":"Sanity Expert","model":"gemini-3.1-pro","tier":"standard","mechanism":"sub-agent","tracker_issue":"TAS-38","outcome":"success","retries":0,"phase":3,"file_partition":["libs/ui-kit/"]}
96
+ {"type":"session","timestamp":"2026-02-25T13:00:16.014Z","agent":"DevOps Expert","model":"gpt-5-mini","task":"TAS-44: Add geolocation","tracker_issue":"TAS-44","outcome":"failed","duration_min":12,"files_changed":12,"retries":3,"lessons_added":[],"discoveries":["Update venue detail"]}
97
+ {"type":"delegation","timestamp":"2026-02-25T14:30:07.967Z","session_id":"feat/tas-46","agent":"Sanity Expert","model":"gemini-3.1-pro","tier":"utility","mechanism":"sub-agent","tracker_issue":"TAS-46","outcome":"success","retries":1,"phase":4,"file_partition":["apps/tastebeer.eu/app/","apps/tastecoffee.eu/app/"]}
98
+ {"type":"session","timestamp":"2026-02-25T15:48:46.235Z","agent":"UI/UX Expert","model":"claude-opus-4-6","task":"TAS-38: Optimize bundle size","tracker_issue":"TAS-38","outcome":"failed","duration_min":5,"files_changed":12,"retries":3,"lessons_added":[],"discoveries":[]}
99
+ {"type":"review","timestamp":"2026-02-28T10:30:00Z","tracker_issue":"TAS-12","agent":"Developer","reviewer_model":"gpt-5-mini","verdict":"pass","attempt":1,"issues_critical":0,"issues_major":0,"issues_minor":1,"confidence":"high","escalated":false,"duration_sec":38}
100
+ {"type":"review","timestamp":"2026-02-28T14:15:00Z","tracker_issue":"TAS-14","agent":"UI-UX Expert","reviewer_model":"gpt-5-mini","verdict":"pass","attempt":1,"issues_critical":0,"issues_major":1,"issues_minor":2,"confidence":"medium","escalated":false,"duration_sec":52}
101
+ {"type":"review","timestamp":"2026-03-01T09:00:00Z","tracker_issue":"TAS-18","agent":"Developer","reviewer_model":"gpt-5-mini","verdict":"fail","attempt":1,"issues_critical":1,"issues_major":0,"issues_minor":0,"confidence":"high","escalated":true,"duration_sec":41}
102
+ {"type":"review","timestamp":"2026-03-01T09:20:00Z","tracker_issue":"TAS-18","agent":"Developer","reviewer_model":"gpt-5-mini","verdict":"pass","attempt":2,"issues_critical":0,"issues_major":0,"issues_minor":1,"confidence":"high","escalated":false,"duration_sec":35}
103
+ {"type":"review","timestamp":"2026-03-01T11:45:00Z","tracker_issue":"TAS-20","agent":"Database Engineer","reviewer_model":"gpt-5-mini","verdict":"pass","attempt":1,"issues_critical":0,"issues_major":0,"issues_minor":0,"confidence":"high","escalated":false,"duration_sec":28}
104
+ {"type":"review","timestamp":"2026-03-01T16:30:00Z","tracker_issue":"TAS-22","agent":"Security Expert","reviewer_model":"claude-opus-4-6","verdict":"fail","attempt":1,"issues_critical":2,"issues_major":1,"issues_minor":0,"confidence":"high","escalated":true,"duration_sec":65}
@@ -1285,29 +1285,28 @@ const base = import.meta.env.BASE_URL;
1285
1285
  // ── Export ─────────────────────────────────────────────────
1286
1286
 
1287
1287
  function exportData() {
1288
- const data = {
1289
- exported_at: new Date().toISOString(),
1290
- sessions: rawSessions,
1291
- delegations: rawDelegations,
1292
- panels: rawPanels,
1293
- reviews: rawReviews,
1294
- };
1295
- const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });
1288
+ const events = [
1289
+ ...rawSessions,
1290
+ ...rawDelegations,
1291
+ ...rawPanels,
1292
+ ...rawReviews,
1293
+ ].sort((a, b) => a.timestamp.localeCompare(b.timestamp));
1294
+ const blob = new Blob([events.map((e) => JSON.stringify(e)).join('\n') + '\n'], { type: 'application/x-ndjson' });
1296
1295
  const url = URL.createObjectURL(blob);
1297
1296
  const a = document.createElement('a');
1298
1297
  a.href = url;
1299
- a.download = 'opencastle-dashboard-' + new Date().toISOString().slice(0, 10) + '.json';
1298
+ a.download = 'opencastle-events-' + new Date().toISOString().slice(0, 10) + '.ndjson';
1300
1299
  a.click();
1301
1300
  URL.revokeObjectURL(url);
1302
1301
  }
1303
1302
 
1304
1303
  async function main() {
1305
- const [sessions, delegations, panels, reviews] = await Promise.all([
1306
- loadNdjson(base + 'data/sessions.ndjson'),
1307
- loadNdjson(base + 'data/delegations.ndjson'),
1308
- loadNdjson(base + 'data/panels.ndjson'),
1309
- loadNdjson(base + 'data/reviews.ndjson'),
1310
- ]);
1304
+ const events = await loadNdjson(base + 'data/events.ndjson');
1305
+
1306
+ const sessions = events.filter((e) => e.type === 'session');
1307
+ const delegations = events.filter((e) => e.type === 'delegation');
1308
+ const panels = events.filter((e) => e.type === 'panel');
1309
+ const reviews = events.filter((e) => e.type === 'review');
1311
1310
 
1312
1311
  rawSessions = sessions;
1313
1312
  rawDelegations = delegations;
@@ -58,4 +58,4 @@ When completing a task, return a structured summary:
58
58
  4. **Verification** — Lint, type-check, and test results
59
59
  5. **Documentation** — API docs produced or updated
60
60
 
61
- See **Base Output Contract** in `general.instructions.md` for the standard closing items (Discovered Issues + Lessons Applied).
61
+ See **Base Output Contract** in the **observability-logging** skill for the standard closing items (Discovered Issues + Lessons Applied).
@@ -121,4 +121,4 @@ When completing a review, return a structured summary:
121
121
  4. **Alternatives** — Other approaches considered and why they were rejected or preferred
122
122
  5. **Action Items** — Specific changes recommended before proceeding
123
123
 
124
- See **Base Output Contract** in `general.instructions.md` for the standard closing items (Discovered Issues + Lessons Applied).
124
+ See **Base Output Contract** in the **observability-logging** skill for the standard closing items (Discovered Issues + Lessons Applied).
@@ -53,4 +53,4 @@ When completing a task, return a structured summary:
53
53
  3. **Verification** — Schema deploy result, query test results
54
54
  4. **Migration Notes** — Any data migration needed for existing content
55
55
 
56
- See **Base Output Contract** in `general.instructions.md` for the standard closing items (Discovered Issues + Lessons Applied).
56
+ See **Base Output Contract** in the **observability-logging** skill for the standard closing items (Discovered Issues + Lessons Applied).
@@ -87,4 +87,4 @@ When completing a task, return a structured summary:
87
87
  3. **Constraints Met** — Character limits, tone requirements, accessibility considerations
88
88
  4. **Context** — Where the copy appears and how it fits the user journey
89
89
 
90
- See **Base Output Contract** in `general.instructions.md` for the standard closing items (Discovered Issues + Lessons Applied).
90
+ See **Base Output Contract** in the **observability-logging** skill for the standard closing items (Discovered Issues + Lessons Applied).
@@ -59,4 +59,4 @@ When completing a task, return a structured summary:
59
59
  3. **Files Created** — Output files with row counts and format
60
60
  4. **Import Results** — Records imported, skipped, or failed (with reasons)
61
61
 
62
- See **Base Output Contract** in `general.instructions.md` for the standard closing items (Discovered Issues + Lessons Applied).
62
+ See **Base Output Contract** in the **observability-logging** skill for the standard closing items (Discovered Issues + Lessons Applied).
@@ -57,4 +57,4 @@ When completing a task, return a structured summary:
57
57
  4. **Rollback Plan** — How to reverse the migration if needed
58
58
  5. **Data Impact** — Rows affected, any data transformations applied
59
59
 
60
- See **Base Output Contract** in `general.instructions.md` for the standard closing items (Discovered Issues + Lessons Applied).
60
+ See **Base Output Contract** in the **observability-logging** skill for the standard closing items (Discovered Issues + Lessons Applied).
@@ -56,4 +56,4 @@ When completing a task, return a structured summary:
56
56
  3. **Acceptance Criteria Status** — Checklist from the tracker issue, each item marked ✅ or ❌
57
57
  4. **Assumptions Made** — Decisions you made that weren't explicitly specified
58
58
 
59
- See **Base Output Contract** in `general.instructions.md` for the standard closing items (Discovered Issues + Lessons Applied).
59
+ See **Base Output Contract** in the **observability-logging** skill for the standard closing items (Discovered Issues + Lessons Applied).
@@ -53,4 +53,4 @@ When completing a task, return a structured summary:
53
53
  4. **Rollback Plan** — How to revert if the deployment causes issues
54
54
  5. **Monitoring** — What to watch after deployment
55
55
 
56
- See **Base Output Contract** in `general.instructions.md` for the standard closing items (Discovered Issues + Lessons Applied).
56
+ See **Base Output Contract** in the **observability-logging** skill for the standard closing items (Discovered Issues + Lessons Applied).
@@ -57,4 +57,4 @@ When completing a task, return a structured summary:
57
57
  3. **Cross-References** — Links updated or added to maintain doc consistency
58
58
  4. **Verification** — Markdown lint results, broken link check
59
59
 
60
- See **Base Output Contract** in `general.instructions.md` for the standard closing items (Discovered Issues + Lessons Applied).
60
+ See **Base Output Contract** in the **observability-logging** skill for the standard closing items (Discovered Issues + Lessons Applied).
@@ -54,4 +54,4 @@ When completing a task, return a structured summary:
54
54
  4. **Trade-offs** — Any DX or functionality trade-offs introduced
55
55
  5. **Further Opportunities** — Additional optimizations identified but not implemented
56
56
 
57
- See **Base Output Contract** in `general.instructions.md` for the standard closing items (Discovered Issues + Lessons Applied).
57
+ See **Base Output Contract** in the **observability-logging** skill for the standard closing items (Discovered Issues + Lessons Applied).
@@ -62,4 +62,4 @@ When completing a task, return a structured summary:
62
62
  5. **Deployment Status** — Production deployment health check results
63
63
  6. **Rollback Plan** — Steps to revert if issues arise post-release
64
64
 
65
- See **Base Output Contract** in `general.instructions.md` for the standard closing items (Discovered Issues + Lessons Applied).
65
+ See **Base Output Contract** in the **observability-logging** skill for the standard closing items (Discovered Issues + Lessons Applied).
@@ -59,4 +59,4 @@ When completing a task, return a structured summary:
59
59
  4. **Residual Risk** — Known risks that remain after the fix
60
60
  5. **Recommendations** — Follow-up security improvements to consider
61
61
 
62
- See **Base Output Contract** in `general.instructions.md` for the standard closing items (Discovered Issues + Lessons Applied).
62
+ See **Base Output Contract** in the **observability-logging** skill for the standard closing items (Discovered Issues + Lessons Applied).
@@ -58,4 +58,4 @@ When completing a task, return a structured summary:
58
58
  4. **Verification** — Lighthouse SEO score, Rich Results Test, crawlability check
59
59
  5. **Recommendations** — Further SEO opportunities identified but not implemented
60
60
 
61
- See **Base Output Contract** in `general.instructions.md` for the standard closing items (Discovered Issues + Lessons Applied).
61
+ See **Base Output Contract** in the **observability-logging** skill for the standard closing items (Discovered Issues + Lessons Applied).
@@ -30,27 +30,21 @@ Run ALL checks. Report each as ✅ or ❌.
30
30
 
31
31
  ### 1. Delegation Records
32
32
 
33
- For each delegation in the session summary, verify a matching record exists in `.github/customizations/logs/delegations.ndjson`.
33
+ For each delegation in the session summary, verify a matching record exists in `.github/customizations/logs/events.ndjson` (type=delegation).
34
34
 
35
- **How:** `tail -20 .github/customizations/logs/delegations.ndjson` and match agent + task against the summary.
35
+ **How:** `grep '"type":"delegation"' .github/customizations/logs/events.ndjson | tail -20` and match agent + task against the summary.
36
36
 
37
- **Fix command template:**
38
- ```bash
39
- (Fill in values from the session summary — see the Team Lead agent file for the canonical JSON schema)
40
- ```
37
+ **Fix:** Load the **observability-logging** skill and run the delegation record command (includes a verify step).
41
38
 
42
39
  Also verify each delegation record includes `session_id` (branch name). Records missing `session_id` should be flagged.
43
40
 
44
41
  ### 2. Session Record
45
42
 
46
- Verify a session record exists in `.github/customizations/logs/sessions.ndjson` for the current task.
43
+ Verify a session record exists in `.github/customizations/logs/events.ndjson` (type=session) for the current task.
47
44
 
48
- **How:** `tail -5 .github/customizations/logs/sessions.ndjson` and match task description.
45
+ **How:** `grep '"type":"session"' .github/customizations/logs/events.ndjson | tail -5` and match task description.
49
46
 
50
- **Fix command template:**
51
- ```bash
52
- echo '{"timestamp":"<ISO>","agent":"Team Lead","model":"<model>","task":"<description>","outcome":"success","duration_min":<N>,"files_changed":<N>,"retries":0,"lessons_added":[],"discoveries":[]}' >> .github/customizations/logs/sessions.ndjson
53
- ```
47
+ **Fix:** Load the **observability-logging** skill and run the session record command (includes a verify step).
54
48
 
55
49
  ### 3. Lessons Captured
56
50
 
@@ -66,17 +60,11 @@ If the session summary lists discovered issues, verify they appear in:
66
60
 
67
61
  ### 5. Review & Panel Records
68
62
 
69
- If the session summary mentions fast reviews or panel reviews, verify matching records exist in `.github/customizations/logs/reviews.ndjson` and/or `.github/customizations/logs/panels.ndjson`.
63
+ If the session summary mentions fast reviews or panel reviews, verify matching records exist in `.github/customizations/logs/events.ndjson` (type=review and/or type=panel).
70
64
 
71
- **How:** `tail -10 .github/customizations/logs/reviews.ndjson` and/or `tail -5 .github/customizations/logs/panels.ndjson`.
65
+ **How:** `grep '"type":"review"' .github/customizations/logs/events.ndjson | tail -10` and/or `grep '"type":"panel"' .github/customizations/logs/events.ndjson | tail -5`.
72
66
 
73
- **Fix command templates:**
74
- ```bash
75
- # Fast review
76
- echo '{"timestamp":"<ISO>","agent":"<reviewed-agent>","reviewer_model":"<model>","verdict":"<pass|fail>","attempt":1,"issues_critical":0,"issues_major":0,"issues_minor":0,"confidence":"high","escalated":false,"duration_sec":N}' >> .github/customizations/logs/reviews.ndjson
77
- # Panel review
78
- echo '{"timestamp":"<ISO>","panel_key":"<key>","verdict":"<pass|block>","pass_count":N,"block_count":N,"must_fix":0,"should_fix":0,"reviewer_model":"<model>","weighted":false,"attempt":1,"artifacts_count":N}' >> .github/customizations/logs/panels.ndjson
79
- ```
67
+ **Fix:** Load the **observability-logging** skill and run the review/panel record command as applicable (includes a verify step).
80
68
 
81
69
  ### 6. Uncommitted Changes
82
70
 
@@ -99,11 +99,7 @@ Synchronous — blocks until result. Use when:
99
99
 
100
100
  When calling `runSubagent`, always specify which custom agent to use by name: *"Use the **[Agent Name]** agent to [task]."* This routes the sub-agent to the named agent's model and tools instead of inheriting the Team Lead's Premium model. Include objective, file paths, acceptance criteria, and what to return in the result.
101
101
 
102
- **After each sub-agent returns**, log the delegation record before doing anything else (before review, before verification):
103
- ```bash
104
- echo '{"timestamp":"<ISO-NOW>","session_id":"<branch>","agent":"<name>","model":"<model>","tier":"<tier>","mechanism":"sub-agent","tracker_issue":"<issue-or-N/A>","outcome":"<success|partial|failed>","retries":0,"phase":<N>,"file_partition":["<paths>"]}' >> .github/customizations/logs/delegations.ndjson
105
- ```
106
- Verify: `tail -1 .github/customizations/logs/delegations.ndjson`
102
+ **After each sub-agent returns**, log the delegation record before doing anything else (before review, before verification). This is a **⛔ hard gate** — do NOT proceed to review or any other action until the delegation is logged. Use the **observability-logging** skill's delegation record command (`--mechanism sub-agent`).
107
103
 
108
104
  > **`model` and `tier` must come from the agent registry** — not the Team Lead's own model. Look up the agent in [agent-registry.md](../customizations/agents/agent-registry.md) and use their assigned model and tier. For example, delegating to Developer → `"model":"claude-sonnet-4-6","tier":"quality"`, not the Team Lead's `claude-opus-4-6`.
109
105
 
@@ -117,11 +113,7 @@ Async in isolated Git worktree. Use when:
117
113
 
118
114
  Spawn via: Delegate Session → Background → Select agent → Enter prompt with full self-contained context (they cannot ask follow-ups).
119
115
 
120
- **After spawning**, log the delegation record before spawning another agent or doing any other work:
121
- ```bash
122
- echo '{"timestamp":"<ISO-NOW>","session_id":"<branch>","agent":"<name>","model":"<model>","tier":"<tier>","mechanism":"background","tracker_issue":"<issue-or-N/A>","outcome":"pending","retries":0,"phase":<N>,"file_partition":["<paths>"]}' >> .github/customizations/logs/delegations.ndjson
123
- ```
124
- Verify: `tail -1 .github/customizations/logs/delegations.ndjson`
116
+ **After spawning**, log the delegation record before spawning another agent or doing any other work. This is a **⛔ hard gate** — do NOT spawn another agent or proceed until the delegation is logged. Use the **observability-logging** skill's delegation record command (`--mechanism background`, `--outcome pending`).
125
117
 
126
118
  > **`model` and `tier` must come from the agent registry** — see note in Sub-Agents section above.
127
119
 
@@ -133,20 +125,11 @@ Parallel agents must never touch the same files. Map file/directory ownership be
133
125
 
134
126
  ### Budget
135
127
 
136
- | Tier | Model | Est. Tokens | Est. Duration |
137
- |------|-------|-------------|---------------|
138
- | **Economy** | GPT-5 mini | ~5K–15K | 2–5 min |
139
- | **Fast** | GPT-5.3-Codex | ~10K–40K | 5–15 min |
140
- | **Standard** | Gemini 3.1 Pro | ~15K–50K | 8–20 min |
141
- | **Quality** | Claude Sonnet 4.6 | ~30K–80K | 10–25 min |
142
- | **Premium** | Claude Opus 4.6 | ~50K–150K | 15–30 min |
143
-
144
- **Quick reference:** Premium for orchestration, Quality for coding/UI/security/architecture, Standard for analysis/schemas/cost-sensitive, Fast for tests/data/terminal, Economy for docs.
128
+ See the **team-lead-reference** skill for model tiers, token estimates, duration estimates, and budget rules.
145
129
 
146
130
  - Target 5–7 delegations per session. At 8 → warn. At 9 → checkpoint. At 10+ → STOP and save state.
147
131
  - Max 3 delegation attempts per task. After 3 failures → Dead Letter Queue + Architect.
148
132
  - Max 3 panel attempts. After 3 BLOCKs → dispute record.
149
- - Full model routing details in **team-lead-reference** skill.
150
133
 
151
134
  ### Pre-Delegation Checks
152
135
 
@@ -191,7 +174,7 @@ Every delegation prompt must include:
191
174
  - **File paths** — exact files to read/modify (the agent's partition)
192
175
  - **Acceptance criteria** — from the tracker issue
193
176
  - **Patterns** — link to existing code examples
194
- - **Reminder:** *"Read `LESSONS-LEARNED.md` before starting. Add lessons for any retries. Follow the Discovered Issues Policy."*
177
+ - **Reminder:** *"Read `LESSONS-LEARNED.md` before starting. Use the **self-improvement** skill for any lessons. Follow the Discovered Issues Policy."*
195
178
 
196
179
  For complex tasks (score 5+), load the **decomposition** skill for the Delegation Spec Template.
197
180
 
@@ -205,7 +188,7 @@ For complex tasks (score 5+), load the **decomposition** skill for the Delegatio
205
188
  For each task:
206
189
  1. Move issue → In Progress
207
190
  2. Delegate to specialist agent by name (e.g., "Use the Developer agent to...")
208
- 3. Log delegation to delegations.ndjson (immediatelyverify with `tail -1`)
191
+ 3. Log delegation (⛔ hard gatedo NOT proceed until logged. See the **observability-logging** skill for the command and verify step.)
209
192
  4. Monitor for drift (load orchestration-protocols skill)
210
193
  5. Verify output:
211
194
  - Changed files within partition
@@ -216,7 +199,7 @@ For each task:
216
199
  - High-stakes: panel review (load panel-majority-vote skill)
217
200
  - Discovered issues tracked (not silently ignored)
218
201
  - Lessons captured (if agent retried anything)
219
- 6. PASS → log review, move issue → Done
202
+ 6. PASS → log review (⛔ hard gate — do NOT proceed until logged), move issue → Done
220
203
  FAIL → re-delegate with failure details (max 3 attempts)
221
204
  ```
222
205
 
@@ -248,16 +231,7 @@ See [shared-delivery-phase.md](../agent-workflows/shared-delivery-phase.md) for
248
231
 
249
232
  ## Observability
250
233
 
251
- > **⛔ HARD GATE — ALL observability logging is mandatory.** No record type is optional.
252
- > The Session Guard will flag missing records, but do not rely on it — log inline as you go.
253
-
254
- | Record | File | When to log | Timing |
255
- |--------|------|-------------|--------|
256
- | **Session** | `sessions.ndjson` | Every session — always | Before yielding to user |
257
- | **Delegation** | `delegations.ndjson` | After each `runSubagent` / background spawn | **Inline** — immediately after each delegation, before review |
258
- | **Fast review** | `reviews.ndjson` | After each fast review | After review completes |
259
- | **Panel** | `panels.ndjson` | After each panel majority vote | After panel completes |
260
- | **Dispute** | `disputes.ndjson` | After each dispute is created | When dispute is filed |
234
+ > **⛔ HARD GATE — ALL observability logging is mandatory.** Load the **observability-logging** skill for record schemas, logging commands, and the pre-response quality gate.
261
235
 
262
236
  **Self-check before calling Session Guard:** Count delegations, reviews, and panels performed → count records written → numbers must match for each type. If any count is off, fix it before calling the guard.
263
237
 
@@ -273,7 +247,7 @@ See [shared-delivery-phase.md](../agent-workflows/shared-delivery-phase.md) for
273
247
  8. Never proceed to dependent task until prerequisite is verified
274
248
  9. Sub-agents must not spawn other sub-agents (no recursive delegation)
275
249
  10. Never push to `main` — feature branch → PR → human merges
276
- 11. Log every delegation inline — immediately after each `runSubagent` or background spawn, not at session end
250
+ 11. Log every delegation and review inline — immediately after each `runSubagent` or background spawn, and after each fast review/panel. This is a hard gate — never proceed without logging first
277
251
  12. Steer early — don't wait until an agent finishes to redirect when you spot drift
278
252
  13. Never exceed session budget without checkpointing — context degrades after 8+ delegations
279
253
  14. Read `LESSONS-LEARNED.md` before delegating — include relevant lessons in prompts
@@ -76,4 +76,4 @@ When completing a task, return a structured summary:
76
76
  4. **Edge Cases Tested** — List edge cases covered and any known gaps
77
77
  5. **Regressions Checked** — Adjacent features/pages verified to still work
78
78
 
79
- See **Base Output Contract** in `general.instructions.md` for the standard closing items (Discovered Issues + Lessons Applied).
79
+ See **Base Output Contract** in the **observability-logging** skill for the standard closing items (Discovered Issues + Lessons Applied).
@@ -56,4 +56,4 @@ When completing a task, return a structured summary:
56
56
  3. **Responsive** — Breakpoints tested (per project testing config)
57
57
  4. **Visual Evidence** — Screenshots at each breakpoint
58
58
 
59
- See **Base Output Contract** in `general.instructions.md` for the standard closing items (Discovered Issues + Lessons Applied).
59
+ See **Base Output Contract** in the **observability-logging** skill for the standard closing items (Discovered Issues + Lessons Applied).
@@ -6,45 +6,44 @@ Tracks agent success rates across panel reviews and delegated tasks to inform mo
6
6
  ## Data Sources
7
7
 
8
8
  Performance data is collected automatically via NDJSON session logs:
9
- - **Session data:** `.github/customizations/logs/sessions.ndjson` — appended by every agent after each session
10
- - **Delegation data:** `.github/customizations/logs/delegations.ndjson` — appended by the Team Lead after each delegation
9
+ - **All events:** `.github/customizations/logs/events.ndjson` — unified log for all event types (sessions, delegations, reviews, panels, disputes), appended via `opencastle log`
11
10
  - **Dashboard:** Run `npx opencastle dashboard` to visualize agent performance
12
11
 
13
12
  ## Quick Queries
14
13
 
15
14
  ```bash
16
15
  # Sessions per agent
17
- jq -r '.agent' .github/customizations/logs/sessions.ndjson | sort | uniq -c | sort -rn
16
+ jq -r 'select(.type == "session") | .agent' .github/customizations/logs/events.ndjson | sort | uniq -c | sort -rn
18
17
 
19
18
  # Success rate by agent
20
- jq -r '[.agent, .outcome] | @tsv' .github/customizations/logs/sessions.ndjson | sort | uniq -c
19
+ jq -r 'select(.type == "session") | [.agent, .outcome] | @tsv' .github/customizations/logs/events.ndjson | sort | uniq -c
21
20
 
22
21
  # Delegation tier distribution
23
- jq -r '.tier' .github/customizations/logs/delegations.ndjson | sort | uniq -c
22
+ jq -r 'select(.type == "delegation") | .tier' .github/customizations/logs/events.ndjson | sort | uniq -c
24
23
 
25
24
  # Failed delegations
26
- jq 'select(.outcome == "failed")' .github/customizations/logs/delegations.ndjson
25
+ jq 'select(.type == "delegation" and .outcome == "failed")' .github/customizations/logs/events.ndjson
27
26
  ```
28
27
 
29
28
  ## Panel Review Performance
30
29
 
31
- Panel review data is collected automatically via `.github/customizations/logs/panels.ndjson` (appended by the panel runner after each review — see step 7 in the panel majority vote skill).
30
+ Panel review data is collected automatically in `.github/customizations/logs/events.ndjson` with `type: "panel"` (appended by the panel runner after each review — see step 7 in the panel majority vote skill).
32
31
 
33
32
  ```bash
34
33
  # Total panel reviews
35
- wc -l .github/customizations/logs/panels.ndjson
34
+ jq 'select(.type == "panel")' .github/customizations/logs/events.ndjson | wc -l
36
35
 
37
36
  # Pass vs block rate
38
- jq -r '.verdict' .github/customizations/logs/panels.ndjson | sort | uniq -c
37
+ jq -r 'select(.type == "panel") | .verdict' .github/customizations/logs/events.ndjson | sort | uniq -c
39
38
 
40
39
  # Reviews by panel key
41
- jq -r '.panel_key' .github/customizations/logs/panels.ndjson | sort | uniq -c | sort -rn
40
+ jq -r 'select(.type == "panel") | .panel_key' .github/customizations/logs/events.ndjson | sort | uniq -c | sort -rn
42
41
 
43
42
  # Reviews that required retries (attempt > 1)
44
- jq 'select(.attempt > 1)' .github/customizations/logs/panels.ndjson
43
+ jq 'select(.type == "panel" and .attempt > 1)' .github/customizations/logs/events.ndjson
45
44
 
46
45
  # Average SHOULD-FIX items per review
47
- jq -s 'if length > 0 then (map(.should_fix) | add) / length else 0 end' .github/customizations/logs/panels.ndjson
46
+ jq -s '[.[] | select(.type == "panel")] | if length > 0 then (map(.should_fix) | add) / length else 0 end' .github/customizations/logs/events.ndjson
48
47
  ```
49
48
 
50
49
  ## Usage
@@ -86,7 +86,7 @@ Which option the Team Lead recommends and why. Include specific next steps:
86
86
 
87
87
  Links to evidence for human review:
88
88
  - Panel report: `.github/customizations/logs/panel/[panel-key].md`
89
- - Review log entries: `.github/customizations/logs/reviews.ndjson` (filter by issue)
89
+ - Review log entries: `.github/customizations/logs/events.ndjson` (filter by `type: "review"` and issue)
90
90
  - Changed files: [list of files in the last attempt]
91
91
  - DLQ entry (if any): `DLQ-XXX`
92
92
  ```
@@ -112,7 +112,7 @@ Links to evidence for human review:
112
112
  ┌──────────────────────────────────────┐
113
113
  │ Team Lead creates dispute record │
114
114
  │ Status: pending │
115
- │ Logs to disputes.ndjson
115
+ │ Logs to events.ndjson
116
116
  │ Links to tracker issue │
117
117
  └──────────────┬───────────────────────┘
118
118