arkaos 2.17.1 → 2.17.4
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/VERSION +1 -1
- package/arka/SKILL.md +9 -67
- package/arka/skills/comfyui/SKILL.md +50 -12
- package/arka/skills/conclave/SKILL.md +43 -141
- package/arka/skills/conclave/references/advisors.md +36 -0
- package/arka/skills/human-writing/SKILL.md +15 -100
- package/arka/skills/human-writing/references/forbidden-patterns.md +32 -0
- package/config/hooks/post-tool-use.sh +72 -0
- package/config/hooks/session-start.sh +16 -0
- package/config/hooks/user-prompt-submit.ps1 +2 -2
- package/config/hooks/user-prompt-submit.sh +102 -26
- package/core/agents/__pycache__/behavior_enforcer.cpython-313.pyc +0 -0
- package/core/agents/__pycache__/dna_registry.cpython-313.pyc +0 -0
- package/core/agents/adapters/__pycache__/disc_adapter.cpython-313.pyc +0 -0
- package/core/agents/adapters/disc_adapter.py +149 -0
- package/core/agents/behavior_enforcer.py +255 -0
- package/core/agents/dna_registry.py +235 -0
- package/core/forge/__init__.py +36 -0
- package/core/forge/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/forge/__pycache__/orchestrator.cpython-313.pyc +0 -0
- package/core/forge/__pycache__/runtime_dispatcher.cpython-313.pyc +0 -0
- package/core/forge/orchestrator.py +770 -0
- package/core/forge/runtime_dispatcher.py +465 -0
- package/core/governance/__pycache__/quality_api.cpython-313.pyc +0 -0
- package/core/governance/__pycache__/quality_router.cpython-313.pyc +0 -0
- package/core/governance/__pycache__/review_workflow.cpython-313.pyc +0 -0
- package/core/governance/quality_api.py +280 -0
- package/core/governance/quality_router.py +304 -0
- package/core/governance/review_workflow.py +386 -0
- package/core/memory/__pycache__/compressor.cpython-313.pyc +0 -0
- package/core/memory/__pycache__/rehydrator.cpython-313.pyc +0 -0
- package/core/memory/__pycache__/session_store.cpython-313.pyc +0 -0
- package/core/memory/compressor.py +269 -0
- package/core/memory/rehydrator.py +204 -0
- package/core/memory/session_store.py +256 -0
- package/core/runtime/__pycache__/context_compactor.cpython-313.pyc +0 -0
- package/core/runtime/__pycache__/subagent.cpython-313.pyc +0 -0
- package/core/synapse/__init__.py +10 -3
- package/core/synapse/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/synapse/__pycache__/engine.cpython-313.pyc +0 -0
- package/core/synapse/__pycache__/kb_cache.cpython-313.pyc +0 -0
- package/core/synapse/__pycache__/layers.cpython-313.pyc +0 -0
- package/core/synapse/engine.py +27 -16
- package/core/synapse/kb_cache.py +382 -0
- package/core/synapse/layers.py +253 -50
- package/core/sync/__pycache__/self_healing.cpython-313.pyc +0 -0
- package/core/workflow/__pycache__/announcer.cpython-313.pyc +0 -0
- package/core/workflow/__pycache__/dashboard.cpython-313.pyc +0 -0
- package/core/workflow/__pycache__/enforcer.cpython-313.pyc +0 -0
- package/core/workflow/__pycache__/rules_registry.cpython-313.pyc +0 -0
- package/core/workflow/__pycache__/state.cpython-313.pyc +0 -0
- package/core/workflow/announcer.py +246 -0
- package/core/workflow/dashboard.py +194 -0
- package/core/workflow/enforcer.py +234 -0
- package/core/workflow/recovery.py +196 -0
- package/core/workflow/rules_registry.py +484 -0
- package/core/workflow/session_summary.py +204 -0
- package/core/workflow/state.py +12 -2
- package/departments/dev/SKILL.md +10 -42
- package/departments/dev/skills/agent-design/SKILL.md +6 -26
- package/departments/dev/skills/ci-cd-pipeline/SKILL.md +6 -29
- package/departments/dev/skills/db-schema/SKILL.md +6 -24
- package/departments/dev/skills/dependency-audit/SKILL.md +1 -3
- package/departments/dev/skills/incident/SKILL.md +6 -24
- package/departments/dev/skills/mcp-builder/SKILL.md +4 -17
- package/departments/dev/skills/observability/SKILL.md +6 -29
- package/departments/dev/skills/performance-profiler/SKILL.md +5 -26
- package/departments/dev/skills/rag-architect/SKILL.md +5 -23
- package/departments/dev/skills/release/SKILL.md +4 -17
- package/departments/dev/skills/spec/SKILL.md +47 -148
- package/departments/landing/skills/landing-gen/SKILL.md +3 -15
- package/departments/marketing/skills/cold-email/SKILL.md +5 -17
- package/departments/marketing/skills/programmatic-seo/SKILL.md +6 -21
- package/departments/strategy/skills/board-advisor/SKILL.md +7 -21
- package/package.json +1 -1
- package/pyproject.toml +1 -1
- package/scripts/synapse-bridge.py +27 -3
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"""Session summary generator.
|
|
2
|
+
|
|
3
|
+
Generates end-of-session recap saved to ~/.arkaos/sessions/{session_id}.json
|
|
4
|
+
and optionally printed to stdout.
|
|
5
|
+
|
|
6
|
+
Includes:
|
|
7
|
+
- Phases completed
|
|
8
|
+
- Total duration
|
|
9
|
+
- Violations
|
|
10
|
+
- Artifacts produced
|
|
11
|
+
- Agent outputs
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
import json
|
|
15
|
+
import uuid
|
|
16
|
+
from dataclasses import dataclass, field, asdict
|
|
17
|
+
from datetime import datetime, timezone
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
from typing import Any
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@dataclass
|
|
23
|
+
class PhaseSummary:
|
|
24
|
+
"""Summary of a single phase."""
|
|
25
|
+
|
|
26
|
+
phase_id: str
|
|
27
|
+
phase_name: str
|
|
28
|
+
status: str
|
|
29
|
+
duration_ms: int = 0
|
|
30
|
+
artifacts: list[str] = field(default_factory=list)
|
|
31
|
+
violations: list[str] = field(default_factory=list)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@dataclass
|
|
35
|
+
class SessionSummary:
|
|
36
|
+
"""Complete session summary."""
|
|
37
|
+
|
|
38
|
+
session_id: str
|
|
39
|
+
workflow: str
|
|
40
|
+
project: str
|
|
41
|
+
started_at: str
|
|
42
|
+
completed_at: str = ""
|
|
43
|
+
total_duration_ms: int = 0
|
|
44
|
+
phases: list[PhaseSummary] = field(default_factory=list)
|
|
45
|
+
violations: list[dict] = field(default_factory=list)
|
|
46
|
+
agent_outputs: dict[str, str] = field(default_factory=dict)
|
|
47
|
+
metadata: dict = field(default_factory=dict)
|
|
48
|
+
|
|
49
|
+
def to_dict(self) -> dict[str, Any]:
|
|
50
|
+
return asdict(self)
|
|
51
|
+
|
|
52
|
+
def to_json(self) -> str:
|
|
53
|
+
return json.dumps(self.to_dict(), indent=2)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _sessions_dir() -> Path:
|
|
57
|
+
"""Get sessions directory path."""
|
|
58
|
+
sessions = Path.home() / ".arkaos" / "sessions"
|
|
59
|
+
sessions.mkdir(parents=True, exist_ok=True)
|
|
60
|
+
return sessions
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def save_session(summary: SessionSummary) -> Path:
|
|
64
|
+
"""Save session summary to JSON file.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
summary: The session summary to save
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
Path to saved file
|
|
71
|
+
"""
|
|
72
|
+
path = _sessions_dir() / f"{summary.session_id}.json"
|
|
73
|
+
path.write_text(summary.to_json(), encoding="utf-8")
|
|
74
|
+
return path
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def load_session(session_id: str) -> SessionSummary | None:
|
|
78
|
+
"""Load a session summary by ID.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
session_id: The session UUID
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
SessionSummary or None if not found
|
|
85
|
+
"""
|
|
86
|
+
path = _sessions_dir() / f"{session_id}.json"
|
|
87
|
+
if not path.exists():
|
|
88
|
+
return None
|
|
89
|
+
try:
|
|
90
|
+
data = json.loads(path.read_text(encoding="utf-8"))
|
|
91
|
+
return SessionSummary(**data)
|
|
92
|
+
except (json.JSONDecodeError, KeyError, OSError):
|
|
93
|
+
return None
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def list_sessions(limit: int = 10) -> list[SessionSummary]:
|
|
97
|
+
"""List recent sessions.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
limit: Maximum number of sessions to return
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
List of SessionSummary objects, newest first
|
|
104
|
+
"""
|
|
105
|
+
sessions_dir = _sessions_dir()
|
|
106
|
+
if not sessions_dir.exists():
|
|
107
|
+
return []
|
|
108
|
+
|
|
109
|
+
sessions = []
|
|
110
|
+
for path in sorted(sessions_dir.glob("*.json"), key=lambda p: p.stat().st_mtime, reverse=True)[
|
|
111
|
+
:limit
|
|
112
|
+
]:
|
|
113
|
+
try:
|
|
114
|
+
data = json.loads(path.read_text(encoding="utf-8"))
|
|
115
|
+
sessions.append(SessionSummary(**data))
|
|
116
|
+
except (json.JSONDecodeError, KeyError):
|
|
117
|
+
pass
|
|
118
|
+
|
|
119
|
+
return sessions
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
class SessionSummaryBuilder:
|
|
123
|
+
"""Builder for session summaries."""
|
|
124
|
+
|
|
125
|
+
def __init__(self, workflow: str, project: str):
|
|
126
|
+
self.summary = SessionSummary(
|
|
127
|
+
session_id=str(uuid.uuid4()),
|
|
128
|
+
workflow=workflow,
|
|
129
|
+
project=project,
|
|
130
|
+
started_at=datetime.now(timezone.utc).isoformat(),
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
def add_phase(self, phase: PhaseSummary) -> None:
|
|
134
|
+
"""Add a phase to the summary."""
|
|
135
|
+
self.summary.phases.append(phase)
|
|
136
|
+
|
|
137
|
+
def add_violation(self, rule: str, detail: str, severity: str = "") -> None:
|
|
138
|
+
"""Add a violation to the summary."""
|
|
139
|
+
self.summary.violations.append(
|
|
140
|
+
{
|
|
141
|
+
"rule": rule,
|
|
142
|
+
"detail": detail,
|
|
143
|
+
"severity": severity,
|
|
144
|
+
}
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
def add_agent_output(self, agent_id: str, output: str) -> None:
|
|
148
|
+
"""Add an agent output."""
|
|
149
|
+
self.summary.agent_outputs[agent_id] = output
|
|
150
|
+
|
|
151
|
+
def set_metadata(self, key: str, value: Any) -> None:
|
|
152
|
+
"""Set a metadata field."""
|
|
153
|
+
self.summary.metadata[key] = value
|
|
154
|
+
|
|
155
|
+
def complete(self) -> SessionSummary:
|
|
156
|
+
"""Finalize and return the summary."""
|
|
157
|
+
self.summary.completed_at = datetime.now(timezone.utc).isoformat()
|
|
158
|
+
self.summary.total_duration_ms = sum(p.duration_ms for p in self.summary.phases)
|
|
159
|
+
return self.summary
|
|
160
|
+
|
|
161
|
+
def save(self) -> Path:
|
|
162
|
+
"""Complete and save the session."""
|
|
163
|
+
self.complete()
|
|
164
|
+
return save_session(self.summary)
|
|
165
|
+
|
|
166
|
+
def render_text(self) -> str:
|
|
167
|
+
"""Render summary as human-readable text."""
|
|
168
|
+
self.complete()
|
|
169
|
+
lines = [
|
|
170
|
+
"═" * 60,
|
|
171
|
+
" SESSION SUMMARY",
|
|
172
|
+
"═" * 60,
|
|
173
|
+
f" Session: {self.summary.session_id[:8]}...",
|
|
174
|
+
f" Workflow: {self.summary.workflow}",
|
|
175
|
+
f" Project: {self.summary.project}",
|
|
176
|
+
f" Started: {self.summary.started_at}",
|
|
177
|
+
f" Completed: {self.summary.completed_at}",
|
|
178
|
+
f" Duration: {self.summary.total_duration_ms}ms",
|
|
179
|
+
"",
|
|
180
|
+
" PHASES",
|
|
181
|
+
]
|
|
182
|
+
|
|
183
|
+
for phase in self.summary.phases:
|
|
184
|
+
icon = "✓" if phase.status == "completed" else "✗" if phase.status == "failed" else "○"
|
|
185
|
+
lines.append(f" {icon} {phase.phase_name} ({phase.duration_ms}ms)")
|
|
186
|
+
for artifact in phase.artifacts:
|
|
187
|
+
lines.append(f" → {artifact}")
|
|
188
|
+
for violation in phase.violations:
|
|
189
|
+
lines.append(f" ⚠ {violation}")
|
|
190
|
+
|
|
191
|
+
if self.summary.violations:
|
|
192
|
+
lines.append("")
|
|
193
|
+
lines.append(f" VIOLATIONS ({len(self.summary.violations)})")
|
|
194
|
+
for v in self.summary.violations:
|
|
195
|
+
sev = v.get("severity", "")
|
|
196
|
+
marker = "🔴" if sev == "BLOCK" else "🟠" if sev == "ESCALATE" else "🟡"
|
|
197
|
+
lines.append(f" {marker} [{v.get('rule', '?')}] {v.get('detail', '')}")
|
|
198
|
+
|
|
199
|
+
lines.append("═" * 60)
|
|
200
|
+
return "\n".join(lines)
|
|
201
|
+
|
|
202
|
+
def print(self) -> None:
|
|
203
|
+
"""Print summary to stdout."""
|
|
204
|
+
print(self.render_text())
|
package/core/workflow/state.py
CHANGED
|
@@ -34,7 +34,11 @@ def _write(state: dict) -> dict:
|
|
|
34
34
|
path = _state_path()
|
|
35
35
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
36
36
|
fd = NamedTemporaryFile(
|
|
37
|
-
mode="w",
|
|
37
|
+
mode="w",
|
|
38
|
+
dir=str(path.parent),
|
|
39
|
+
suffix=".tmp",
|
|
40
|
+
delete=False,
|
|
41
|
+
encoding="utf-8",
|
|
38
42
|
)
|
|
39
43
|
try:
|
|
40
44
|
json.dump(state, fd, indent=2)
|
|
@@ -104,7 +108,11 @@ def set_branch(branch: str) -> dict:
|
|
|
104
108
|
|
|
105
109
|
|
|
106
110
|
def add_violation(
|
|
107
|
-
rule: str,
|
|
111
|
+
rule: str,
|
|
112
|
+
detail: str,
|
|
113
|
+
tool: str | None = None,
|
|
114
|
+
file: str | None = None,
|
|
115
|
+
severity: str | None = None,
|
|
108
116
|
) -> dict:
|
|
109
117
|
"""Append a violation to the violations list."""
|
|
110
118
|
state = _require_state()
|
|
@@ -113,6 +121,8 @@ def add_violation(
|
|
|
113
121
|
violation["tool"] = tool
|
|
114
122
|
if file:
|
|
115
123
|
violation["file"] = file
|
|
124
|
+
if severity:
|
|
125
|
+
violation["severity"] = severity
|
|
116
126
|
state["violations"].append(violation)
|
|
117
127
|
return _write(state)
|
|
118
128
|
|
package/departments/dev/SKILL.md
CHANGED
|
@@ -53,60 +53,28 @@ allowed-tools: [Read, Write, Edit, Bash, Grep, Glob, Agent, WebFetch, WebSearch]
|
|
|
53
53
|
For `/dev feature` and `/dev api`:
|
|
54
54
|
|
|
55
55
|
```
|
|
56
|
-
Phase 0: SPECIFICATION → Paulo + Gabriel create/validate spec
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
Phase 1: RESEARCH → Analyst researches patterns + Gabriel checks architecture
|
|
60
|
-
Gate: Auto
|
|
61
|
-
|
|
62
|
-
Phase 2: ARCHITECTURE → Gabriel designs + Marco approves ADR
|
|
63
|
-
Gate: User approval
|
|
64
|
-
|
|
56
|
+
Phase 0: SPECIFICATION → Paulo + Gabriel create/validate spec (User approval gate)
|
|
57
|
+
Phase 1: RESEARCH → Analyst + Gabriel check patterns + architecture
|
|
58
|
+
Phase 2: ARCHITECTURE → Gabriel designs + Marco approves ADR (User approval gate)
|
|
65
59
|
Phase 3: IMPLEMENTATION → Andre (backend) + Diana (frontend) in parallel
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
Phase 4: SELF-CRITIQUE → Paulo reviews against Clean Code + SOLID
|
|
69
|
-
Gate: Auto
|
|
70
|
-
|
|
60
|
+
Phase 4: SELF-CRITIQUE → Paulo reviews Clean Code + SOLID
|
|
71
61
|
Phase 5: SECURITY AUDIT → Bruno runs OWASP Top 10 + dependency scan
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
Phase
|
|
75
|
-
Gate: Auto
|
|
76
|
-
|
|
77
|
-
Phase 7: QUALITY GATE → Marta dispatches Eduardo (copy) + Francisca (tech)
|
|
78
|
-
Gate: APPROVED required from all three
|
|
79
|
-
|
|
80
|
-
Phase 8: DOCUMENTATION → Save ADR + docs to Obsidian
|
|
81
|
-
Gate: Auto
|
|
62
|
+
Phase 6: QA → Rita runs ALL tests, coverage >= 80%, mutation score
|
|
63
|
+
Phase 7: QUALITY GATE → Marta + Eduardo (copy) + Francisca (tech) → APPROVED
|
|
64
|
+
Phase 8: DOCUMENTATION → ADR + docs to Obsidian
|
|
82
65
|
```
|
|
83
66
|
|
|
84
67
|
## Focused Workflow (4 Phases)
|
|
85
68
|
|
|
86
|
-
For `/dev debug`, `/dev refactor`, `/dev db`, `/dev performance`, `/dev pipeline`:
|
|
87
|
-
|
|
88
|
-
```
|
|
89
|
-
Phase 0: DIAGNOSE → Relevant specialist investigates
|
|
90
|
-
Phase 1: IMPLEMENT → Fix/change with tests
|
|
91
|
-
Phase 2: VERIFY → Rita validates, Paulo reviews
|
|
92
|
-
Phase 3: QUALITY GATE → Marta reviews
|
|
93
|
-
```
|
|
69
|
+
For `/dev debug`, `/dev refactor`, `/dev db`, `/dev performance`, `/dev pipeline`: Diagnose → Implement with tests → Rita validates → Quality Gate (Marta).
|
|
94
70
|
|
|
95
71
|
## Specialist Workflow (2 Phases)
|
|
96
72
|
|
|
97
|
-
For `/dev review`, `/dev test`, `/dev security-audit`, `/dev clean-review`:
|
|
98
|
-
|
|
99
|
-
```
|
|
100
|
-
Phase 0: EXECUTE → Specialist agent performs the task
|
|
101
|
-
Phase 1: REPORT → Results saved to Obsidian
|
|
102
|
-
```
|
|
73
|
+
For `/dev review`, `/dev test`, `/dev security-audit`, `/dev clean-review`: Execute → Report (Obsidian).
|
|
103
74
|
|
|
104
75
|
## Branch Workflow (Mandatory)
|
|
105
76
|
|
|
106
|
-
|
|
107
|
-
- Features: `feature/<slug>`
|
|
108
|
-
- Fixes: `fix/<slug>`
|
|
109
|
-
- Refactors: `refactor/<slug>`
|
|
77
|
+
Feature branches: `feature/<slug>` · `fix/<slug>` · `refactor/<slug>`
|
|
110
78
|
|
|
111
79
|
## Frameworks Applied
|
|
112
80
|
|
|
@@ -101,31 +101,11 @@ Surface these issues WITHOUT being asked:
|
|
|
101
101
|
|
|
102
102
|
```markdown
|
|
103
103
|
## Agent System Design: <System Name>
|
|
104
|
-
|
|
105
|
-
###
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
### Agents
|
|
110
|
-
| Agent | Role | Tools | Interfaces |
|
|
111
|
-
|-------|------|-------|-----------|
|
|
112
|
-
| ... | ... | ... | ... |
|
|
113
|
-
|
|
114
|
-
### Communication
|
|
115
|
-
- **Pattern:** <message passing / shared state / event-driven>
|
|
116
|
-
- **Handoff contract:** <fields passed between agents>
|
|
117
|
-
|
|
118
|
-
### Guardrails
|
|
119
|
-
- **Input:** <validation rules>
|
|
120
|
-
- **Output:** <filtering rules>
|
|
121
|
-
- **Human gates:** <approval checkpoints>
|
|
122
|
-
|
|
123
|
-
### Evaluation Metrics
|
|
124
|
-
- Task success rate target: >X%
|
|
125
|
-
- Latency budget: <Xms per stage>
|
|
126
|
-
- Cost ceiling: <$ per task>
|
|
104
|
+
### Architecture: <pattern> | Rationale: <why>
|
|
105
|
+
### Agents: | Agent | Role | Tools | Interfaces |
|
|
106
|
+
### Communication: <pattern> | Handoff: <fields passed>
|
|
107
|
+
### Guardrails: Input <rules> | Output <rules> | Human gates <checkpoints>
|
|
108
|
+
### Evaluation: Success >X% | Latency <Xms/stage | Cost <$$/task
|
|
127
109
|
```
|
|
128
110
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
- [architecture-patterns.md](references/architecture-patterns.md) — 5 multi-agent patterns with decision matrix, anti-patterns, and scaling characteristics
|
|
111
|
+
See `references/architecture-patterns.md` for multi-agent pattern details.
|
|
@@ -87,48 +87,25 @@ Surface these issues WITHOUT being asked:
|
|
|
87
87
|
```yaml
|
|
88
88
|
# .github/workflows/ci.yml
|
|
89
89
|
name: CI
|
|
90
|
-
on:
|
|
91
|
-
push:
|
|
92
|
-
branches: [main, develop]
|
|
93
|
-
pull_request:
|
|
94
|
-
branches: [main]
|
|
95
|
-
|
|
90
|
+
on: { push: { branches: [main, develop] }, pull_request: { branches: [main] } }
|
|
96
91
|
jobs:
|
|
97
92
|
lint:
|
|
98
93
|
runs-on: ubuntu-latest
|
|
99
|
-
steps:
|
|
100
|
-
- uses: actions/checkout@v4
|
|
101
|
-
- uses: <setup-action>
|
|
102
|
-
- run: <install-command>
|
|
103
|
-
- run: <lint-command>
|
|
104
|
-
|
|
94
|
+
steps: [uses: actions/checkout@v4, uses: <setup-action>, run: <install-command>, run: <lint-command>]
|
|
105
95
|
test:
|
|
106
96
|
needs: lint
|
|
107
97
|
runs-on: ubuntu-latest
|
|
108
|
-
steps:
|
|
109
|
-
- uses: actions/checkout@v4
|
|
110
|
-
- uses: <setup-action>
|
|
111
|
-
- run: <install-command>
|
|
112
|
-
- run: <test-command>
|
|
113
|
-
|
|
98
|
+
steps: [uses: actions/checkout@v4, uses: <setup-action>, run: <install-command>, run: <test-command>]
|
|
114
99
|
build:
|
|
115
100
|
needs: test
|
|
116
101
|
runs-on: ubuntu-latest
|
|
117
|
-
steps:
|
|
118
|
-
- uses: actions/checkout@v4
|
|
119
|
-
- uses: <setup-action>
|
|
120
|
-
- run: <install-command>
|
|
121
|
-
- run: <build-command>
|
|
122
|
-
|
|
102
|
+
steps: [uses: actions/checkout@v4, uses: <setup-action>, run: <install-command>, run: <build-command>]
|
|
123
103
|
deploy:
|
|
124
104
|
needs: build
|
|
125
105
|
if: github.ref == 'refs/heads/main'
|
|
126
106
|
environment: <staging|production>
|
|
127
107
|
runs-on: ubuntu-latest
|
|
128
|
-
steps:
|
|
129
|
-
- run: <deploy-command>
|
|
108
|
+
steps: [run: <deploy-command>]
|
|
130
109
|
```
|
|
131
110
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
- [github-actions-patterns.md](references/github-actions-patterns.md) — Caching strategies, matrix builds, reusable workflows, secret management, deployment environments, and common pitfalls
|
|
111
|
+
See `references/github-actions-patterns.md` for caching strategies and deployment patterns.
|
|
@@ -106,29 +106,11 @@ Surface these issues WITHOUT being asked:
|
|
|
106
106
|
|
|
107
107
|
```markdown
|
|
108
108
|
## Schema Design: <Feature Name>
|
|
109
|
-
|
|
110
|
-
###
|
|
111
|
-
| Table |
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
### Relationships
|
|
116
|
-
| From | To | Type | FK |
|
|
117
|
-
|------|-----|------|-----|
|
|
118
|
-
| ... | ... | 1:N | ... |
|
|
119
|
-
|
|
120
|
-
### Indexes
|
|
121
|
-
| Table | Columns | Type | Reason |
|
|
122
|
-
|-------|---------|------|--------|
|
|
123
|
-
| ... | ... | composite | ... |
|
|
124
|
-
|
|
125
|
-
### Migration
|
|
126
|
-
<Laravel migration code>
|
|
127
|
-
|
|
128
|
-
### ERD
|
|
129
|
-
<Mermaid diagram>
|
|
109
|
+
### Entities: | Table | Purpose | Key Columns |
|
|
110
|
+
### Relationships: | From | To | Type | FK |
|
|
111
|
+
### Indexes: | Table | Columns | Type | Reason |
|
|
112
|
+
### Migration: <Laravel migration code>
|
|
113
|
+
### ERD: <Mermaid diagram>
|
|
130
114
|
```
|
|
131
115
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
- [indexing-strategy.md](references/indexing-strategy.md) — B-tree vs hash vs GIN vs GiST, composite index ordering, partial indexes, covering indexes, EXPLAIN ANALYZE interpretation
|
|
116
|
+
See `references/indexing-strategy.md` for B-tree vs hash vs GIN vs GiST and EXPLAIN ANALYZE.
|
|
@@ -117,6 +117,4 @@ Surface these issues WITHOUT being asked:
|
|
|
117
117
|
- Recommendation: {SAFE TO DEPLOY | FIX BEFORE DEPLOY | BLOCK DEPLOY}
|
|
118
118
|
```
|
|
119
119
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
- [license-matrix.md](references/license-matrix.md) — Open source license compatibility matrix, copyleft obligations, commercial use implications, and dual-licensing strategies
|
|
120
|
+
See `references/license-matrix.md` for full license compatibility matrix.
|
|
@@ -101,29 +101,11 @@ Surface these issues WITHOUT being asked:
|
|
|
101
101
|
|
|
102
102
|
```markdown
|
|
103
103
|
## Incident Report: <title>
|
|
104
|
-
|
|
105
|
-
###
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
- Root Cause: {1-2 sentence summary}
|
|
110
|
-
|
|
111
|
-
### Timeline
|
|
112
|
-
| Time | Event |
|
|
113
|
-
|------|-------|
|
|
114
|
-
|
|
115
|
-
### Root Cause Analysis
|
|
116
|
-
[5 Whys / Fishbone / Timeline analysis]
|
|
117
|
-
|
|
118
|
-
### Action Items
|
|
119
|
-
| # | Action | Owner | Due | Status |
|
|
120
|
-
|---|--------|-------|-----|--------|
|
|
121
|
-
|
|
122
|
-
### Lessons Learned
|
|
123
|
-
1. [Key takeaway]
|
|
124
|
-
2. [Key takeaway]
|
|
104
|
+
### Summary: SEV{level} | Duration: {start}-{end} | Impact: {users/services} | Root Cause: {1-2 sentences}
|
|
105
|
+
### Timeline: | Time | Event |
|
|
106
|
+
### Root Cause: [5 Whys / Fishbone analysis]
|
|
107
|
+
### Action Items: | # | Action | Owner | Due | Status |
|
|
108
|
+
### Lessons Learned: 1. [takeaway] 2. [takeaway]
|
|
125
109
|
```
|
|
126
110
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
- [severity-playbook.md](references/severity-playbook.md) — SEV1-4 definitions, escalation paths, communication templates, and PIR checklist
|
|
111
|
+
See `references/severity-playbook.md` for SEV1-4 definitions and escalation paths.
|
|
@@ -101,21 +101,8 @@ Surface these issues WITHOUT being asked:
|
|
|
101
101
|
|
|
102
102
|
```markdown
|
|
103
103
|
## MCP Server: <Server Name>
|
|
104
|
-
|
|
105
|
-
###
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
| ... | ... | ... | ... |
|
|
109
|
-
|
|
110
|
-
### Auth
|
|
111
|
-
- **Strategy:** <env vars / OAuth / API key>
|
|
112
|
-
- **Outbound hosts:** <allowlist>
|
|
113
|
-
|
|
114
|
-
### Versioning
|
|
115
|
-
- **Current:** v<X>
|
|
116
|
-
- **Compatibility:** <backward-compatible since vX>
|
|
117
|
-
|
|
118
|
-
### Deployment
|
|
119
|
-
- **Runtime:** <Python / TypeScript>
|
|
120
|
-
- **Transport:** <stdio / HTTP>
|
|
104
|
+
### Tools: | Tool | Description | Params | Returns |
|
|
105
|
+
### Auth: <strategy> | Outbound hosts: <allowlist>
|
|
106
|
+
### Versioning: v<X> | Compatibility: <backward-compatible since vX>
|
|
107
|
+
### Deployment: <Python / TypeScript> | Transport: <stdio / HTTP>
|
|
121
108
|
```
|
|
@@ -90,34 +90,11 @@ Surface these issues WITHOUT being asked:
|
|
|
90
90
|
|
|
91
91
|
```markdown
|
|
92
92
|
## Observability Design: <project>
|
|
93
|
-
|
|
94
|
-
###
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
### Logging
|
|
99
|
-
- Format: [structured JSON / plaintext -- recommendation]
|
|
100
|
-
- Missing correlation IDs: [list]
|
|
101
|
-
- Level misuse: [list]
|
|
102
|
-
|
|
103
|
-
### Metrics & Alerts
|
|
104
|
-
- Golden signals coverage: [X/4 per service]
|
|
105
|
-
- Alert rules: [count] ([actionable %])
|
|
106
|
-
- Missing alerts: [list]
|
|
107
|
-
|
|
108
|
-
### Tracing
|
|
109
|
-
- Instrumented services: [X/Y]
|
|
110
|
-
- Sampling strategy: [head/tail/adaptive]
|
|
111
|
-
|
|
112
|
-
### Dashboard Plan
|
|
113
|
-
- [Executive | Service | Component] dashboards needed
|
|
114
|
-
|
|
115
|
-
### Recommendations (priority order)
|
|
116
|
-
1. [Most impactful improvement]
|
|
117
|
-
2. [Next priority]
|
|
118
|
-
3. [Next priority]
|
|
93
|
+
### Service Inventory: | Service | SLI | SLO Target | Current |
|
|
94
|
+
### Logging: Format, missing IDs, level issues
|
|
95
|
+
### Metrics & Alerts: Golden signals X/4, alert rules, missing alerts
|
|
96
|
+
### Tracing: Instrumented X/Y, sampling strategy
|
|
97
|
+
### Dashboard Plan: [Executive | Service | Component] dashboards needed
|
|
119
98
|
```
|
|
120
99
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
- [slo-design.md](references/slo-design.md) — SLI/SLO/SLA framework, error budget calculations, and burn rate alert configuration
|
|
100
|
+
See `references/slo-design.md` for SLI/SLO/SLA framework details.
|
|
@@ -99,30 +99,9 @@ Surface these issues WITHOUT being asked:
|
|
|
99
99
|
|
|
100
100
|
```markdown
|
|
101
101
|
## Performance Profile: <Target>
|
|
102
|
-
|
|
103
|
-
###
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
| P95 latency | 1240ms | < 200ms | OVER |
|
|
108
|
-
| P99 latency | 3100ms | < 1000ms | OVER |
|
|
109
|
-
| DB queries/req | 23 | < 10 | OVER |
|
|
110
|
-
|
|
111
|
-
### Root Cause
|
|
112
|
-
[What the profiler revealed]
|
|
113
|
-
|
|
114
|
-
### Fix Applied
|
|
115
|
-
[What changed]
|
|
116
|
-
|
|
117
|
-
### After
|
|
118
|
-
| Metric | Before | After | Delta |
|
|
119
|
-
|--------|--------|-------|-------|
|
|
120
|
-
| P50 | 480ms | 48ms | -90% |
|
|
121
|
-
| P95 | 1240ms | 120ms | -90% |
|
|
122
|
-
| P99 | 3100ms | 280ms | -91% |
|
|
123
|
-
| Queries | 23 | 1 | -96% |
|
|
124
|
-
|
|
125
|
-
### Recommendations
|
|
126
|
-
| Priority | Action | Expected Impact |
|
|
127
|
-
|----------|--------|----------------|
|
|
102
|
+
### Baseline: | Metric | Value | Budget | Status |
|
|
103
|
+
### Root Cause: [what profiler revealed]
|
|
104
|
+
### Fix Applied: [what changed]
|
|
105
|
+
### After: | Metric | Before | After | Delta |
|
|
106
|
+
### Recommendations: | Priority | Action | Expected Impact |
|
|
128
107
|
```
|
|
@@ -103,28 +103,10 @@ Surface these issues WITHOUT being asked:
|
|
|
103
103
|
|
|
104
104
|
```markdown
|
|
105
105
|
## RAG System Design: <System Name>
|
|
106
|
-
|
|
107
|
-
###
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
- **Vector DB:** <database>, <index type>
|
|
111
|
-
- **Retrieval:** <strategy>, top-K=<N>
|
|
112
|
-
- **Reranking:** <model or none>
|
|
113
|
-
|
|
114
|
-
### Evaluation Targets
|
|
115
|
-
| Metric | Target |
|
|
116
|
-
|--------|--------|
|
|
117
|
-
| Faithfulness | >X% |
|
|
118
|
-
| Context Relevance | >X |
|
|
119
|
-
| Answer Relevance | >X |
|
|
120
|
-
|
|
121
|
-
### Cost Estimate
|
|
122
|
-
- Embedding cost: ~$X per 1K docs
|
|
123
|
-
- Storage: ~$X/month for <N> vectors
|
|
124
|
-
- Query cost: ~$X per 1K queries
|
|
106
|
+
### Pipeline: Chunking <strategy+size+overlap> | Embedding <model+dims> | Vector DB <db+index>
|
|
107
|
+
### Retrieval: <strategy>, top-K=<N> | Reranking: <model or none>
|
|
108
|
+
### Evaluation: Faithfulness >X% | Context Relevance >X | Answer Relevance >X
|
|
109
|
+
### Cost: Embedding ~$X/1K docs | Storage ~$X/mo | Query ~$X/1K queries
|
|
125
110
|
```
|
|
126
111
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
- [chunking-strategies.md](references/chunking-strategies.md) — Decision tree and benchmarks for chunking approaches
|
|
130
|
-
- [evaluation-guide.md](references/evaluation-guide.md) — RAGAS metrics and ground truth dataset creation
|
|
112
|
+
See `references/chunking-strategies.md` and `references/evaluation-guide.md` for details.
|
|
@@ -110,21 +110,8 @@ Surface these issues WITHOUT being asked:
|
|
|
110
110
|
|
|
111
111
|
```markdown
|
|
112
112
|
## Release Plan: v{X.Y.Z}
|
|
113
|
-
|
|
114
|
-
###
|
|
115
|
-
###
|
|
116
|
-
|
|
117
|
-
### Readiness
|
|
118
|
-
- [ ] Code quality gates: {PASS/FAIL}
|
|
119
|
-
- [ ] Documentation: {PASS/FAIL}
|
|
120
|
-
- [ ] Approvals: {PASS/FAIL}
|
|
121
|
-
|
|
122
|
-
### Changes Included
|
|
123
|
-
- Features: {count}
|
|
124
|
-
- Fixes: {count}
|
|
125
|
-
- Breaking changes: {count}
|
|
126
|
-
|
|
127
|
-
### Deployment Strategy: {blue-green / canary / rolling}
|
|
128
|
-
### Rollback Plan: {container revert / feature flag / DB-safe}
|
|
129
|
-
### Risk Assessment: {LOW / MEDIUM / HIGH}
|
|
113
|
+
### Version Bump: {MAJOR|MINOR|PATCH} | Reason: {summary}
|
|
114
|
+
### Readiness: Code quality [PASS/FAIL] | Docs [PASS/FAIL] | Approvals [PASS/FAIL]
|
|
115
|
+
### Changes: Features {count} | Fixes {count} | Breaking {count}
|
|
116
|
+
### Deployment: {blue-green/canary/rolling} | Rollback: {plan} | Risk: {LOW/MEDIUM/HIGH}
|
|
130
117
|
```
|