opencastle 0.10.7 → 0.12.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/README.md +4 -0
- package/bin/cli.mjs +4 -0
- package/dist/cli/convoy/events.d.ts +10 -0
- package/dist/cli/convoy/events.d.ts.map +1 -0
- package/dist/cli/convoy/events.js +27 -0
- package/dist/cli/convoy/events.js.map +1 -0
- package/dist/cli/convoy/events.test.d.ts +2 -0
- package/dist/cli/convoy/events.test.d.ts.map +1 -0
- package/dist/cli/convoy/events.test.js +94 -0
- package/dist/cli/convoy/events.test.js.map +1 -0
- package/dist/cli/convoy/store.d.ts +23 -0
- package/dist/cli/convoy/store.d.ts.map +1 -0
- package/dist/cli/convoy/store.js +210 -0
- package/dist/cli/convoy/store.js.map +1 -0
- package/dist/cli/convoy/store.test.d.ts +2 -0
- package/dist/cli/convoy/store.test.d.ts.map +1 -0
- package/dist/cli/convoy/store.test.js +387 -0
- package/dist/cli/convoy/store.test.js.map +1 -0
- package/dist/cli/convoy/types.d.ts +56 -0
- package/dist/cli/convoy/types.d.ts.map +1 -0
- package/dist/cli/convoy/types.js +2 -0
- package/dist/cli/convoy/types.js.map +1 -0
- package/dist/cli/dashboard.d.ts.map +1 -1
- package/dist/cli/dashboard.js +5 -1
- package/dist/cli/dashboard.js.map +1 -1
- package/dist/cli/init.test.js +1 -1
- package/dist/cli/init.test.js.map +1 -1
- package/dist/cli/lesson.d.ts +17 -0
- package/dist/cli/lesson.d.ts.map +1 -0
- package/dist/cli/lesson.js +294 -0
- package/dist/cli/lesson.js.map +1 -0
- package/dist/cli/log.d.ts +7 -0
- package/dist/cli/log.d.ts.map +1 -0
- package/dist/cli/log.js +131 -0
- package/dist/cli/log.js.map +1 -0
- package/dist/cli/run/executor.js.map +1 -1
- package/dist/cli/run/executor.test.js +1 -0
- package/dist/cli/run/executor.test.js.map +1 -1
- package/dist/cli/run/loop-executor.d.ts +3 -0
- package/dist/cli/run/loop-executor.d.ts.map +1 -0
- package/dist/cli/run/loop-executor.js +155 -0
- package/dist/cli/run/loop-executor.js.map +1 -0
- package/dist/cli/run/loop-reporter.d.ts +6 -0
- package/dist/cli/run/loop-reporter.d.ts.map +1 -0
- package/dist/cli/run/loop-reporter.js +112 -0
- package/dist/cli/run/loop-reporter.js.map +1 -0
- package/dist/cli/run/reporter.d.ts.map +1 -1
- package/dist/cli/run/reporter.js +28 -1
- package/dist/cli/run/reporter.js.map +1 -1
- package/dist/cli/run/schema.d.ts +4 -0
- package/dist/cli/run/schema.d.ts.map +1 -1
- package/dist/cli/run/schema.js +178 -50
- package/dist/cli/run/schema.js.map +1 -1
- package/dist/cli/run/schema.test.js +598 -1
- package/dist/cli/run/schema.test.js.map +1 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +84 -3
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/types.d.ts +78 -1
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +54 -1
- package/dist/cli/update.js.map +1 -1
- package/package.json +3 -2
- package/src/cli/convoy/events.test.ts +118 -0
- package/src/cli/convoy/events.ts +41 -0
- package/src/cli/convoy/store.test.ts +446 -0
- package/src/cli/convoy/store.ts +308 -0
- package/src/cli/convoy/types.ts +68 -0
- package/src/cli/dashboard.ts +5 -1
- package/src/cli/init.test.ts +1 -1
- package/src/cli/lesson.ts +312 -0
- package/src/cli/log.ts +133 -0
- package/src/cli/run/executor.test.ts +1 -0
- package/src/cli/run/executor.ts +8 -8
- package/src/cli/run/loop-executor.ts +199 -0
- package/src/cli/run/loop-reporter.ts +125 -0
- package/src/cli/run/reporter.ts +30 -1
- package/src/cli/run/schema.test.ts +704 -3
- package/src/cli/run/schema.ts +206 -56
- package/src/cli/run.ts +82 -5
- package/src/cli/types.ts +87 -1
- package/src/cli/update.ts +62 -1
- package/src/dashboard/dist/index.html +14 -15
- package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
- package/src/dashboard/scripts/generate-seed-data.ts +23 -43
- package/src/dashboard/seed-data/events.ndjson +104 -0
- package/src/dashboard/src/pages/index.astro +14 -15
- package/src/orchestrator/agents/api-designer.agent.md +1 -1
- package/src/orchestrator/agents/architect.agent.md +1 -1
- package/src/orchestrator/agents/content-engineer.agent.md +1 -1
- package/src/orchestrator/agents/copywriter.agent.md +1 -1
- package/src/orchestrator/agents/data-expert.agent.md +1 -1
- package/src/orchestrator/agents/database-engineer.agent.md +1 -1
- package/src/orchestrator/agents/developer.agent.md +1 -1
- package/src/orchestrator/agents/devops-expert.agent.md +1 -1
- package/src/orchestrator/agents/documentation-writer.agent.md +1 -1
- package/src/orchestrator/agents/performance-expert.agent.md +1 -1
- package/src/orchestrator/agents/release-manager.agent.md +1 -1
- package/src/orchestrator/agents/security-expert.agent.md +1 -1
- package/src/orchestrator/agents/seo-specialist.agent.md +1 -1
- package/src/orchestrator/agents/session-guard.agent.md +9 -21
- package/src/orchestrator/agents/team-lead.agent.md +8 -34
- package/src/orchestrator/agents/testing-expert.agent.md +1 -1
- package/src/orchestrator/agents/ui-ux-expert.agent.md +1 -1
- package/src/orchestrator/customizations/AGENT-PERFORMANCE.md +11 -12
- package/src/orchestrator/customizations/DISPUTES.md +2 -2
- package/src/orchestrator/customizations/README.md +1 -3
- package/src/orchestrator/customizations/logs/README.md +66 -14
- package/src/orchestrator/instructions/ai-optimization.instructions.md +21 -132
- package/src/orchestrator/instructions/general.instructions.md +35 -181
- package/src/orchestrator/plugins/nx/SKILL.md +1 -1
- package/src/orchestrator/prompts/bootstrap-customizations.prompt.md +4 -8
- package/src/orchestrator/prompts/bug-fix.prompt.md +4 -4
- package/src/orchestrator/prompts/implement-feature.prompt.md +3 -3
- package/src/orchestrator/prompts/quick-refinement.prompt.md +3 -3
- package/src/orchestrator/prompts/resolve-pr-comments.prompt.md +1 -1
- package/src/orchestrator/skills/agent-hooks/SKILL.md +11 -11
- package/src/orchestrator/skills/decomposition/SKILL.md +1 -1
- package/src/orchestrator/skills/fast-review/SKILL.md +4 -19
- package/src/orchestrator/skills/git-workflow/SKILL.md +72 -0
- package/src/orchestrator/skills/memory-merger/SKILL.md +1 -1
- package/src/orchestrator/skills/observability-logging/SKILL.md +129 -0
- package/src/orchestrator/skills/orchestration-protocols/SKILL.md +2 -2
- package/src/orchestrator/skills/panel-majority-vote/SKILL.md +4 -7
- package/src/orchestrator/skills/self-improvement/SKILL.md +13 -26
- package/src/orchestrator/skills/team-lead-reference/SKILL.md +2 -2
- package/src/orchestrator/customizations/logs/delegations.ndjson +0 -1
- package/src/orchestrator/customizations/logs/panels.ndjson +0 -1
- package/src/orchestrator/customizations/logs/reviews.ndjson +0 -0
- package/src/orchestrator/customizations/logs/sessions.ndjson +0 -1
- /package/src/orchestrator/customizations/logs/{disputes.ndjson → events.ndjson} +0 -0
|
@@ -1059,29 +1059,28 @@ Export
|
|
|
1059
1059
|
// ── Export ─────────────────────────────────────────────────
|
|
1060
1060
|
|
|
1061
1061
|
function exportData() {
|
|
1062
|
-
const
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
};
|
|
1069
|
-
const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });
|
|
1062
|
+
const events = [
|
|
1063
|
+
...rawSessions,
|
|
1064
|
+
...rawDelegations,
|
|
1065
|
+
...rawPanels,
|
|
1066
|
+
...rawReviews,
|
|
1067
|
+
].sort((a, b) => a.timestamp.localeCompare(b.timestamp));
|
|
1068
|
+
const blob = new Blob([events.map((e) => JSON.stringify(e)).join('\n') + '\n'], { type: 'application/x-ndjson' });
|
|
1070
1069
|
const url = URL.createObjectURL(blob);
|
|
1071
1070
|
const a = document.createElement('a');
|
|
1072
1071
|
a.href = url;
|
|
1073
|
-
a.download = 'opencastle-
|
|
1072
|
+
a.download = 'opencastle-events-' + new Date().toISOString().slice(0, 10) + '.ndjson';
|
|
1074
1073
|
a.click();
|
|
1075
1074
|
URL.revokeObjectURL(url);
|
|
1076
1075
|
}
|
|
1077
1076
|
|
|
1078
1077
|
async function main() {
|
|
1079
|
-
const
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1078
|
+
const events = await loadNdjson(base + 'data/events.ndjson');
|
|
1079
|
+
|
|
1080
|
+
const sessions = events.filter((e) => e.type === 'session');
|
|
1081
|
+
const delegations = events.filter((e) => e.type === 'delegation');
|
|
1082
|
+
const panels = events.filter((e) => e.type === 'panel');
|
|
1083
|
+
const reviews = events.filter((e) => e.type === 'review');
|
|
1085
1084
|
|
|
1086
1085
|
rawSessions = sessions;
|
|
1087
1086
|
rawDelegations = delegations;
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
{
|
|
2
|
-
"hash": "
|
|
2
|
+
"hash": "7398c476",
|
|
3
3
|
"configHash": "30f8ea04",
|
|
4
|
-
"lockfileHash": "
|
|
5
|
-
"browserHash": "
|
|
4
|
+
"lockfileHash": "35ec1b3d",
|
|
5
|
+
"browserHash": "6a8b9ff7",
|
|
6
6
|
"optimized": {
|
|
7
7
|
"astro > cssesc": {
|
|
8
8
|
"src": "../../../../../node_modules/cssesc/cssesc.js",
|
|
9
9
|
"file": "astro___cssesc.js",
|
|
10
|
-
"fileHash": "
|
|
10
|
+
"fileHash": "ca3e0c44",
|
|
11
11
|
"needsInterop": true
|
|
12
12
|
},
|
|
13
13
|
"astro > aria-query": {
|
|
14
14
|
"src": "../../../../../node_modules/aria-query/lib/index.js",
|
|
15
15
|
"file": "astro___aria-query.js",
|
|
16
|
-
"fileHash": "
|
|
16
|
+
"fileHash": "9cd2129a",
|
|
17
17
|
"needsInterop": true
|
|
18
18
|
},
|
|
19
19
|
"astro > axobject-query": {
|
|
20
20
|
"src": "../../../../../node_modules/axobject-query/lib/index.js",
|
|
21
21
|
"file": "astro___axobject-query.js",
|
|
22
|
-
"fileHash": "
|
|
22
|
+
"fileHash": "cba29d71",
|
|
23
23
|
"needsInterop": true
|
|
24
24
|
}
|
|
25
25
|
},
|
|
@@ -2,15 +2,13 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Generate realistic seed data for the Agent Dashboard.
|
|
4
4
|
*
|
|
5
|
-
* Writes NDJSON
|
|
6
|
-
* -
|
|
7
|
-
* - delegations.ndjson (35 records)
|
|
8
|
-
* - panels.ndjson (12 records + preserves existing)
|
|
5
|
+
* Writes a single NDJSON file to the configured logs directory:
|
|
6
|
+
* - events.ndjson (50 session + 35 delegation + 12 panel records, sorted by timestamp)
|
|
9
7
|
*
|
|
10
8
|
* Usage: npx tsx opencastle/src/dashboard/scripts/generate-seed-data.ts
|
|
11
9
|
*/
|
|
12
10
|
|
|
13
|
-
import {
|
|
11
|
+
import { writeFileSync, mkdirSync } from 'fs';
|
|
14
12
|
import { join } from 'path';
|
|
15
13
|
|
|
16
14
|
const REPO_ROOT = join(__dirname, '..', '..', '..', '..');
|
|
@@ -156,6 +154,7 @@ const END_DATE = new Date('2026-02-25T18:00:00Z');
|
|
|
156
154
|
// --- Generate Sessions ---
|
|
157
155
|
|
|
158
156
|
interface SessionRecord {
|
|
157
|
+
type: 'session';
|
|
159
158
|
timestamp: string;
|
|
160
159
|
agent: string;
|
|
161
160
|
model: string;
|
|
@@ -180,6 +179,7 @@ function generateSessions(count: number): SessionRecord[] {
|
|
|
180
179
|
const discoveries = rng.next() > 0.7 ? [rng.pick(TASK_DESCRIPTIONS)] : [];
|
|
181
180
|
|
|
182
181
|
records.push({
|
|
182
|
+
type: 'session',
|
|
183
183
|
timestamp: generateTimestamp(i, count, START_DATE, END_DATE),
|
|
184
184
|
agent: rng.pick(AGENTS),
|
|
185
185
|
model: rng.pick(MODELS),
|
|
@@ -199,6 +199,7 @@ function generateSessions(count: number): SessionRecord[] {
|
|
|
199
199
|
// --- Generate Delegations ---
|
|
200
200
|
|
|
201
201
|
interface DelegationRecord {
|
|
202
|
+
type: 'delegation';
|
|
202
203
|
timestamp: string;
|
|
203
204
|
session_id: string;
|
|
204
205
|
agent: string;
|
|
@@ -220,9 +221,9 @@ function generateDelegations(count: number): DelegationRecord[] {
|
|
|
220
221
|
const outcome = outcomeRoll < 0.75 ? 'success' : outcomeRoll < 0.9 ? 'partial' : 'failed';
|
|
221
222
|
|
|
222
223
|
records.push({
|
|
224
|
+
type: 'delegation',
|
|
223
225
|
timestamp: generateTimestamp(i, count, START_DATE, END_DATE),
|
|
224
|
-
session_id: `feat/${issue.toLowerCase()}`,
|
|
225
|
-
agent: rng.pick(AGENTS),
|
|
226
|
+
session_id: `feat/${issue.toLowerCase()}`, agent: rng.pick(AGENTS),
|
|
226
227
|
model: rng.pick(MODELS),
|
|
227
228
|
tier: rng.weighted(TIERS),
|
|
228
229
|
mechanism: rng.next() < 0.6 ? 'sub-agent' : 'background',
|
|
@@ -239,6 +240,7 @@ function generateDelegations(count: number): DelegationRecord[] {
|
|
|
239
240
|
// --- Generate Panels ---
|
|
240
241
|
|
|
241
242
|
interface PanelRecord {
|
|
243
|
+
type: 'panel';
|
|
242
244
|
timestamp: string;
|
|
243
245
|
panel_key: string;
|
|
244
246
|
verdict: string;
|
|
@@ -264,6 +266,7 @@ function generatePanels(count: number): PanelRecord[] {
|
|
|
264
266
|
const issue = rng.pick(TRACKER_ISSUES);
|
|
265
267
|
|
|
266
268
|
records.push({
|
|
269
|
+
type: 'panel',
|
|
267
270
|
timestamp: generateTimestamp(i, count, START_DATE, END_DATE),
|
|
268
271
|
panel_key: panelKey,
|
|
269
272
|
verdict: isPass ? 'pass' : 'block',
|
|
@@ -287,50 +290,27 @@ function generatePanels(count: number): PanelRecord[] {
|
|
|
287
290
|
function main() {
|
|
288
291
|
mkdirSync(LOGS_DIR, { recursive: true });
|
|
289
292
|
|
|
290
|
-
// Read existing panel records to preserve them
|
|
291
|
-
const panelsPath = join(LOGS_DIR, 'panels.ndjson');
|
|
292
|
-
let existingPanels: string[] = [];
|
|
293
|
-
try {
|
|
294
|
-
const content = readFileSync(panelsPath, 'utf-8').trim();
|
|
295
|
-
if (content) {
|
|
296
|
-
existingPanels = content.split('\n').filter(Boolean);
|
|
297
|
-
}
|
|
298
|
-
} catch {
|
|
299
|
-
// File doesn't exist yet
|
|
300
|
-
}
|
|
301
|
-
|
|
302
293
|
// Generate data
|
|
303
294
|
const sessions = generateSessions(50);
|
|
304
295
|
const delegations = generateDelegations(35);
|
|
305
296
|
const panels = generatePanels(12);
|
|
306
297
|
|
|
307
|
-
//
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
// Write
|
|
313
|
-
const
|
|
314
|
-
writeFileSync(
|
|
315
|
-
console.log(`Wrote ${
|
|
316
|
-
|
|
317
|
-
// Write panels (preserve existing + add new, sorted by timestamp)
|
|
318
|
-
const allPanelLines = [
|
|
319
|
-
...existingPanels,
|
|
320
|
-
...panels.map((r) => JSON.stringify(r)),
|
|
321
|
-
];
|
|
322
|
-
// Parse and sort all panel records by timestamp
|
|
323
|
-
const allPanelRecords = allPanelLines
|
|
324
|
-
.map((line) => JSON.parse(line))
|
|
325
|
-
.sort((a: { timestamp: string }, b: { timestamp: string }) => a.timestamp.localeCompare(b.timestamp));
|
|
326
|
-
writeFileSync(panelsPath, allPanelRecords.map((r: unknown) => JSON.stringify(r)).join('\n') + '\n');
|
|
327
|
-
console.log(`Wrote ${allPanelRecords.length} panel records to ${panelsPath} (${existingPanels.length} existing + ${panels.length} new)`);
|
|
298
|
+
// Merge and sort all events by timestamp
|
|
299
|
+
type AnyRecord = SessionRecord | DelegationRecord | PanelRecord;
|
|
300
|
+
const allEvents: AnyRecord[] = [...sessions, ...delegations, ...panels]
|
|
301
|
+
.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
|
|
302
|
+
|
|
303
|
+
// Write single events.ndjson
|
|
304
|
+
const eventsPath = join(LOGS_DIR, 'events.ndjson');
|
|
305
|
+
writeFileSync(eventsPath, allEvents.map((r) => JSON.stringify(r)).join('\n') + '\n');
|
|
306
|
+
console.log(`Wrote ${allEvents.length} event records to ${eventsPath}`);
|
|
328
307
|
|
|
329
308
|
// Summary
|
|
330
309
|
console.log('\n--- Seed Data Summary ---');
|
|
331
310
|
console.log(`Sessions: ${sessions.length}`);
|
|
332
311
|
console.log(`Delegations: ${delegations.length}`);
|
|
333
|
-
console.log(`Panels: ${
|
|
312
|
+
console.log(`Panels: ${panels.length}`);
|
|
313
|
+
console.log(`Total: ${allEvents.length}`);
|
|
334
314
|
|
|
335
315
|
// Outcome distribution
|
|
336
316
|
const sessionOutcomes = sessions.reduce<Record<string, number>>((acc, s) => {
|
|
@@ -345,10 +325,10 @@ function main() {
|
|
|
345
325
|
}, {});
|
|
346
326
|
console.log(`Delegation tiers: ${JSON.stringify(tierDist)}`);
|
|
347
327
|
|
|
348
|
-
const panelVerdicts =
|
|
328
|
+
const panelVerdicts = panels.reduce<Record<string, number>>((acc, p) => {
|
|
349
329
|
acc[p.verdict] = (acc[p.verdict] || 0) + 1;
|
|
350
330
|
return acc;
|
|
351
|
-
}, {}
|
|
331
|
+
}, {});
|
|
352
332
|
console.log(`Panel verdicts: ${JSON.stringify(panelVerdicts)}`);
|
|
353
333
|
}
|
|
354
334
|
|
|
@@ -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
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
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-
|
|
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
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
61
|
+
See **Base Output Contract** in the **observability-logging** skill for the standard closing items (Discovered Issues + Lessons Applied).
|