Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0f4758cd8f | ||
|
|
b6762a9deb | ||
|
|
db991d8e21
|
||
|
|
622531d78d
|
||
|
|
e738aeac05
|
||
|
|
6b6993cc6f
|
||
|
|
fd77452727 | ||
|
|
c0ac049d01 | ||
|
|
4839dabc4a | ||
|
|
df0028de8c | ||
|
|
170ddc8ef3 | ||
|
|
8d2de43e82 | ||
|
|
e6980cff76 | ||
|
|
da98606e7f | ||
|
|
b57cc5e2a1 | ||
|
|
4399d9b6ce | ||
|
|
40d7566d06 | ||
|
|
c580e30097 | ||
|
|
f4230c05b7 | ||
|
|
a39c8e0cd3 | ||
|
|
c654ca42fc | ||
|
|
2784e0fa7c | ||
|
|
51fb2fe636 | ||
|
|
cd932d4d7b | ||
|
|
7ba37a5bb3 | ||
|
|
f844622310 | ||
|
|
ade5fa9def | ||
|
|
b7608f9143 | ||
|
|
d7c6dfa799 | ||
|
|
c92d4bf953 | ||
|
|
62ef8be966 | ||
|
|
84a2116bc5 | ||
|
|
07a713c90e | ||
|
|
db3b99edcc | ||
|
|
d71db09d45 | ||
|
|
3208b3c92a | ||
|
|
f9c941f723 | ||
|
|
4e3f8de421 | ||
|
|
07b28133c8 | ||
|
|
d4e47f5761 | ||
|
|
a42b7fa345 | ||
|
|
fab1896056 | ||
|
|
f63c7a7e63 | ||
|
|
03bc16571d | ||
|
|
d9b80bacca | ||
|
|
6c2e33a3af | ||
|
|
ea867afe8e | ||
|
|
3b3eb1b201 | ||
|
|
d85b017a56 | ||
|
|
ba45629bf1 | ||
|
|
c010e7fda4 | ||
|
|
c62bc207e9 | ||
|
|
df9407dd8d | ||
|
|
b816914b9c | ||
|
|
d68244bd1a |
@@ -0,0 +1,22 @@
|
|||||||
|
# Server-side .env for netcup deploy. Copy to /srv/librenotes/.env on the host.
|
||||||
|
# Used by: docker compose -f compose.yaml -f compose.netcup.yaml up -d
|
||||||
|
|
||||||
|
# Image to pull. The default `:main` rolls forward — main pushes
|
||||||
|
# rebuild and push the same tag, so `compose pull` picks up the new
|
||||||
|
# digest without rewriting this file. To pin a release (or roll back),
|
||||||
|
# edit this line to an immutable tag such as :v0.1.0 and re-run
|
||||||
|
# `docker compose -f compose.yaml -f compose.netcup.yaml pull && up -d`.
|
||||||
|
LIBRENOTES_IMAGE=git.librete.ch/public/librenotes:main
|
||||||
|
|
||||||
|
# Public origin (caddy reverse-proxies to librenotes:8080)
|
||||||
|
LIBRENOTES_BASE_URL=https://ln.cloud.librete.ch
|
||||||
|
|
||||||
|
# JWT secret — at least 32 bytes. Generate: openssl rand -base64 48
|
||||||
|
LIBRENOTES_JWT_SECRET=CHANGE_ME
|
||||||
|
|
||||||
|
# SMTP relay (magic-link delivery)
|
||||||
|
LIBRENOTES_SMTP_HOST=smtp.example.com
|
||||||
|
LIBRENOTES_SMTP_PORT=587
|
||||||
|
LIBRENOTES_SMTP_USER=
|
||||||
|
LIBRENOTES_SMTP_PASS=
|
||||||
|
LIBRENOTES_SMTP_FROM=no-reply@librete.ch
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
## Summary
|
||||||
|
|
||||||
|
What does this PR change, and why?
|
||||||
|
|
||||||
|
## Linked issue
|
||||||
|
|
||||||
|
Closes #
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
-
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
- [ ] `make test` passes locally
|
||||||
|
- [ ] `make lint` passes locally
|
||||||
|
- [ ] Added or updated tests for the changed behaviour
|
||||||
|
- [ ] Manually exercised the affected flow (frontend / API / etc.)
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
- [ ] Updated relevant docs in `docs/`
|
||||||
|
- [ ] Updated `CHANGELOG.md` if user-visible
|
||||||
|
- [ ] No documentation change needed
|
||||||
|
|
||||||
|
## Notes for reviewers
|
||||||
|
|
||||||
|
Anything you want a reviewer to look at specifically? Trade-offs
|
||||||
|
considered? Migrations to flag?
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
name: Bug report
|
||||||
|
about: Something is broken or doesn't work as documented
|
||||||
|
labels: ["bug"]
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for taking the time to file a bug. Please fill in
|
||||||
|
as much of the form as you can — the more concrete the
|
||||||
|
report, the faster we can fix it.
|
||||||
|
|
||||||
|
For security issues, **do not** open a public issue.
|
||||||
|
Email `security@librete.ch` instead.
|
||||||
|
- type: input
|
||||||
|
id: version
|
||||||
|
attributes:
|
||||||
|
label: librenotes version
|
||||||
|
description: Output of `librenotes version` or the Docker image tag.
|
||||||
|
placeholder: v0.1.0
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: environment
|
||||||
|
attributes:
|
||||||
|
label: Environment
|
||||||
|
description: Browser + OS for frontend bugs; OS + Go version for backend bugs.
|
||||||
|
placeholder: Firefox 124 on macOS 14 / Go 1.22 on Debian 12
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: what-happened
|
||||||
|
attributes:
|
||||||
|
label: What happened?
|
||||||
|
description: A clear, concrete description of the bug.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: reproduce
|
||||||
|
attributes:
|
||||||
|
label: Steps to reproduce
|
||||||
|
description: Numbered steps from a clean starting state.
|
||||||
|
placeholder: |
|
||||||
|
1. Sign in as a new user.
|
||||||
|
2. Create a note named "Test".
|
||||||
|
3. Click the toggle.
|
||||||
|
4. ...
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: expected
|
||||||
|
attributes:
|
||||||
|
label: Expected behaviour
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: logs
|
||||||
|
attributes:
|
||||||
|
label: Relevant logs / network traces
|
||||||
|
description: Any server logs, browser console errors, or HAR snippets.
|
||||||
|
render: shell
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
name: Feature request
|
||||||
|
about: Suggest a new capability or improvement
|
||||||
|
labels: ["enhancement"]
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for proposing a feature. Before opening a request,
|
||||||
|
please skim the open issues to see if it already exists.
|
||||||
|
- type: textarea
|
||||||
|
id: problem
|
||||||
|
attributes:
|
||||||
|
label: What problem does this solve?
|
||||||
|
description: |
|
||||||
|
Describe the user need first, not the implementation.
|
||||||
|
"I can't find old notes when I have hundreds" is more
|
||||||
|
useful than "Add full-text search."
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: proposal
|
||||||
|
attributes:
|
||||||
|
label: Proposed solution
|
||||||
|
description: How would you like it to work?
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: alternatives
|
||||||
|
attributes:
|
||||||
|
label: Alternatives considered
|
||||||
|
description: What other approaches did you think about, and why are they worse?
|
||||||
|
- type: textarea
|
||||||
|
id: scope
|
||||||
|
attributes:
|
||||||
|
label: Scope
|
||||||
|
description: |
|
||||||
|
Out of scope is just as useful as in scope. What does
|
||||||
|
this proposal NOT include?
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
pull_request:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
ci:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
# Bespoke runner image (Ubuntu 24.04 + make + git + node + go via
|
||||||
|
# actions/setup-go). See git.librete.ch/public/runner-image.
|
||||||
|
container:
|
||||||
|
image: git.librete.ch/public/runner-image:v0.2.0@sha256:f60c587d3c0b0aac04a572db5349e27672bf76baec2ce547a3dcc28cebcf1b7e
|
||||||
|
timeout-minutes: 5
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: "1.22"
|
||||||
|
cache: true
|
||||||
|
|
||||||
|
- name: Verify modules
|
||||||
|
run: go mod download && go mod verify
|
||||||
|
|
||||||
|
- name: Vet
|
||||||
|
run: make lint
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: make build
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: make test
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
name: Deploy
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
tags: ["v*"]
|
||||||
|
|
||||||
|
# Required repository secrets:
|
||||||
|
# REGISTRY registry hostname (git.librete.ch)
|
||||||
|
# REGISTRY_USER robot account or PAT username (libretech-bot)
|
||||||
|
# REGISTRY_PASS PAT with write:package
|
||||||
|
# DEPLOY_HOST SSH target, e.g. user@your-deploy-host
|
||||||
|
# DEPLOY_KEY passphrase-less private key (PEM)
|
||||||
|
# DEPLOY_PATH remote stack dir (/srv/librenotes)
|
||||||
|
# HEALTH_URL https://ln.cloud.librete.ch/healthz
|
||||||
|
#
|
||||||
|
# Required repository variable:
|
||||||
|
# DEPLOY_ENABLED set to "true" to enable the workflow
|
||||||
|
#
|
||||||
|
# Image: ${REGISTRY}/public/librenotes
|
||||||
|
# main pushes → :main + :<sha7>
|
||||||
|
# tag pushes → :<tag> + :latest
|
||||||
|
#
|
||||||
|
# The host's /srv/librenotes/.env pins LIBRENOTES_IMAGE once
|
||||||
|
# (e.g. =git.librete.ch/public/librenotes:main). Main pushes
|
||||||
|
# update :main rolling so a `compose pull` picks up the new image
|
||||||
|
# without rewriting any file. Tag pin / rollback is a manual edit
|
||||||
|
# of LIBRENOTES_IMAGE in .env followed by `compose pull && up -d`.
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
# Custom Gitea runner image: Ubuntu 24.04 + docker CLI + node + git
|
||||||
|
# + perl + ssh, runner user pre-joined to docker gid 998 so the
|
||||||
|
# auto-mounted /var/run/docker.sock is writable without --user root.
|
||||||
|
container:
|
||||||
|
image: git.librete.ch/public/runner-image:v0.2.0@sha256:f60c587d3c0b0aac04a572db5349e27672bf76baec2ce547a3dcc28cebcf1b7e
|
||||||
|
timeout-minutes: 20
|
||||||
|
if: ${{ vars.DEPLOY_ENABLED == 'true' }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
- uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ${{ secrets.REGISTRY }}
|
||||||
|
username: ${{ secrets.REGISTRY_USER }}
|
||||||
|
password: ${{ secrets.REGISTRY_PASS }}
|
||||||
|
|
||||||
|
- id: meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
images: ${{ secrets.REGISTRY }}/public/librenotes
|
||||||
|
tags: |
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=tag
|
||||||
|
type=sha,format=short
|
||||||
|
type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/') }}
|
||||||
|
|
||||||
|
- uses: docker/build-push-action@v6
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
push: true
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
build-args: |
|
||||||
|
VERSION=${{ steps.meta.outputs.version }}
|
||||||
|
BUILDTIME=${{ github.event.head_commit.timestamp }}
|
||||||
|
|
||||||
|
- name: Deploy to host
|
||||||
|
env:
|
||||||
|
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
||||||
|
DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }}
|
||||||
|
HEALTH_URL: ${{ secrets.HEALTH_URL }}
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.ssh && chmod 700 ~/.ssh
|
||||||
|
printf '%s\n' "$DEPLOY_KEY" > ~/.ssh/id_deploy
|
||||||
|
chmod 600 ~/.ssh/id_deploy
|
||||||
|
|
||||||
|
ssh -i ~/.ssh/id_deploy \
|
||||||
|
-o StrictHostKeyChecking=accept-new \
|
||||||
|
"$DEPLOY_HOST" \
|
||||||
|
"set -e
|
||||||
|
cd '$DEPLOY_PATH'
|
||||||
|
git pull --ff-only
|
||||||
|
docker compose -f compose.yaml -f compose.netcup.yaml pull
|
||||||
|
docker compose -f compose.yaml -f compose.netcup.yaml up -d --remove-orphans"
|
||||||
|
|
||||||
|
# Wait up to 60s for /healthz to return 200.
|
||||||
|
for i in $(seq 1 12); do
|
||||||
|
curl -fsS "$HEALTH_URL" >/dev/null && exit 0
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
echo "deploy health check failed"; exit 1
|
||||||
+13
@@ -9,3 +9,16 @@
|
|||||||
!.wave/prompts/
|
!.wave/prompts/
|
||||||
wave.yaml
|
wave.yaml
|
||||||
.env
|
.env
|
||||||
|
|
||||||
|
# Build artifacts
|
||||||
|
/librenotes
|
||||||
|
/dist/
|
||||||
|
*.test
|
||||||
|
*.out
|
||||||
|
|
||||||
|
# Agent scratch
|
||||||
|
/.agents/
|
||||||
|
|
||||||
|
# runtime data and state of the stopped stack
|
||||||
|
/data/
|
||||||
|
/state/
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "ADR Context",
|
|
||||||
"description": "Contextual information gathered for an Architecture Decision Record",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["decision_topic", "current_state", "constraints", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"decision_topic": { "type": "string", "minLength": 5 },
|
|
||||||
"current_state": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["description"],
|
|
||||||
"properties": {
|
|
||||||
"description": { "type": "string", "minLength": 10 },
|
|
||||||
"affected_files": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"affected_components": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"constraints": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["type", "description"],
|
|
||||||
"properties": {
|
|
||||||
"type": { "type": "string", "enum": ["technical", "organizational", "timeline"] },
|
|
||||||
"description": { "type": "string", "minLength": 5 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"precedents": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["description"],
|
|
||||||
"properties": {
|
|
||||||
"description": { "type": "string" },
|
|
||||||
"location": { "type": "string" },
|
|
||||||
"outcome": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"stakeholders": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "ADR Options Analysis",
|
|
||||||
"description": "Analysis of options for an architectural decision",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["decision_topic", "options", "recommendation", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"decision_topic": { "type": "string", "minLength": 5 },
|
|
||||||
"options": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 2,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["name", "description", "pros", "cons"],
|
|
||||||
"properties": {
|
|
||||||
"name": { "type": "string", "minLength": 1 },
|
|
||||||
"description": { "type": "string", "minLength": 10 },
|
|
||||||
"pros": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"cons": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"effort": { "type": "string", "enum": ["trivial", "small", "medium", "large", "epic"] },
|
|
||||||
"risk": { "type": "string", "enum": ["low", "medium", "high"] },
|
|
||||||
"reversibility": { "type": "string", "enum": ["easy", "moderate", "difficult", "irreversible"] },
|
|
||||||
"compatibility": { "type": "string", "enum": ["high", "medium", "low"] }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"recommendation": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["option", "rationale", "confidence"],
|
|
||||||
"properties": {
|
|
||||||
"option": { "type": "string", "minLength": 1 },
|
|
||||||
"rationale": { "type": "string", "minLength": 20 },
|
|
||||||
"confidence": { "type": "string", "enum": ["high", "medium", "low"] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Speckit Analysis Report",
|
|
||||||
"description": "Cross-artifact consistency and quality analysis report before implementation.",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["total_requirements", "total_tasks", "coverage_percent", "can_proceed", "feature_dir", "summary"],
|
|
||||||
"properties": {
|
|
||||||
"total_requirements": {
|
|
||||||
"type": "integer",
|
|
||||||
"description": "Total number of requirements extracted from spec"
|
|
||||||
},
|
|
||||||
"total_tasks": {
|
|
||||||
"type": "integer",
|
|
||||||
"description": "Total number of tasks in the task breakdown"
|
|
||||||
},
|
|
||||||
"coverage_percent": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 100,
|
|
||||||
"description": "Percentage of requirements covered by tasks (0-100)"
|
|
||||||
},
|
|
||||||
"can_proceed": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Whether the feature is ready for implementation"
|
|
||||||
},
|
|
||||||
"feature_dir": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Path to the feature directory"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Brief summary of the analysis findings"
|
|
||||||
},
|
|
||||||
"issues": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"critical": {
|
|
||||||
"type": "integer",
|
|
||||||
"description": "Number of critical severity issues"
|
|
||||||
},
|
|
||||||
"high": {
|
|
||||||
"type": "integer",
|
|
||||||
"description": "Number of high severity issues"
|
|
||||||
},
|
|
||||||
"medium": {
|
|
||||||
"type": "integer",
|
|
||||||
"description": "Number of medium severity issues"
|
|
||||||
},
|
|
||||||
"low": {
|
|
||||||
"type": "integer",
|
|
||||||
"description": "Number of low severity issues"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Issue counts grouped by severity level"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": true
|
|
||||||
}
|
|
||||||
@@ -1,120 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Audit Report",
|
|
||||||
"description": "Zettelkasten health audit covering orphans, dangling links, and index gaps",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["orphans", "dangling_links", "stats", "index_gaps", "dead_ends"],
|
|
||||||
"properties": {
|
|
||||||
"orphans": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["filename", "title"],
|
|
||||||
"properties": {
|
|
||||||
"filename": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Hex-ID filename of the orphan note"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Title of the orphan note"
|
|
||||||
},
|
|
||||||
"suggested_connection": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Suggested note to link from"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Notes with no incoming or outgoing links"
|
|
||||||
},
|
|
||||||
"dangling_links": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["source_filename", "target_filename", "link_text"],
|
|
||||||
"properties": {
|
|
||||||
"source_filename": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "File containing the broken link"
|
|
||||||
},
|
|
||||||
"target_filename": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Target file that doesn't exist"
|
|
||||||
},
|
|
||||||
"link_text": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Display text of the broken link"
|
|
||||||
},
|
|
||||||
"suggested_fix": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["retarget", "remove"],
|
|
||||||
"description": "Suggested fix action"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Links pointing to non-existent notes"
|
|
||||||
},
|
|
||||||
"stats": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["total_notes", "total_links"],
|
|
||||||
"properties": {
|
|
||||||
"total_notes": { "type": "integer", "minimum": 0 },
|
|
||||||
"total_links": { "type": "integer", "minimum": 0 },
|
|
||||||
"label_notes": { "type": "integer", "minimum": 0 },
|
|
||||||
"orphan_count": { "type": "integer", "minimum": 0 },
|
|
||||||
"dangling_count": { "type": "integer", "minimum": 0 },
|
|
||||||
"avg_links_per_note": { "type": "number", "minimum": 0 }
|
|
||||||
},
|
|
||||||
"description": "Overall collection statistics"
|
|
||||||
},
|
|
||||||
"index_gaps": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["section", "description"],
|
|
||||||
"properties": {
|
|
||||||
"section": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Section name missing from index"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "What's missing"
|
|
||||||
},
|
|
||||||
"suggested_entry_point": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Suggested note to use as entry point"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Sections or keywords missing from the index note"
|
|
||||||
},
|
|
||||||
"dead_ends": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["filename", "title"],
|
|
||||||
"properties": {
|
|
||||||
"filename": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Hex-ID filename of the dead-end note"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Title of the note"
|
|
||||||
},
|
|
||||||
"outgoing_links": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Number of outgoing links (may have outgoing but no incoming)"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Notes with no incoming links (reachable only via search)"
|
|
||||||
},
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Categorized Changelog Changes",
|
|
||||||
"description": "Categorized and described changes for changelog generation",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["version_label", "sections", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"version_label": { "type": "string", "minLength": 1 },
|
|
||||||
"breaking_changes": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["description"],
|
|
||||||
"properties": {
|
|
||||||
"description": { "type": "string" },
|
|
||||||
"migration": { "type": "string" },
|
|
||||||
"related_commits": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sections": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["title", "type", "entries"],
|
|
||||||
"properties": {
|
|
||||||
"title": { "type": "string" },
|
|
||||||
"type": { "type": "string" },
|
|
||||||
"entries": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["description"],
|
|
||||||
"properties": {
|
|
||||||
"description": { "type": "string" },
|
|
||||||
"scope": { "type": "string" },
|
|
||||||
"commits": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"notable": { "type": "boolean" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"contributors": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"stats": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"total_entries": { "type": "integer" },
|
|
||||||
"notable_entries": { "type": "integer" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Speckit Checklist Status",
|
|
||||||
"description": "Status report from the checklist step: quality checklist generation for requirement validation.",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["checklist_files", "total_items", "feature_dir", "summary"],
|
|
||||||
"properties": {
|
|
||||||
"checklist_files": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Paths to generated checklist files"
|
|
||||||
},
|
|
||||||
"total_items": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Total number of checklist items across all files"
|
|
||||||
},
|
|
||||||
"feature_dir": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Path to the feature directory"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Brief description of the checklists generated"
|
|
||||||
},
|
|
||||||
"critical_gaps": {
|
|
||||||
"type": "integer",
|
|
||||||
"description": "Number of critical quality gaps identified"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": true
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Speckit Clarify Status",
|
|
||||||
"description": "Status report from the clarify step: ambiguity resolution and spec refinement.",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["questions_asked", "answers_encoded", "feature_dir", "summary"],
|
|
||||||
"properties": {
|
|
||||||
"questions_asked": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Number of clarification questions identified"
|
|
||||||
},
|
|
||||||
"answers_encoded": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Number of clarifications resolved and encoded into the spec"
|
|
||||||
},
|
|
||||||
"feature_dir": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Path to the feature directory"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Brief description of clarifications made"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": true
|
|
||||||
}
|
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "GitHub Comment Result",
|
|
||||||
"description": "Result of posting research report as a GitHub issue comment",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["success", "issue_reference", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"success": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Whether the comment was successfully posted"
|
|
||||||
},
|
|
||||||
"issue_reference": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["issue_number", "repository"],
|
|
||||||
"properties": {
|
|
||||||
"issue_number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1,
|
|
||||||
"description": "Issue number that was commented on"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^[^/]+/[^/]+$",
|
|
||||||
"description": "Repository full name"
|
|
||||||
},
|
|
||||||
"issue_url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri",
|
|
||||||
"description": "URL to the issue"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"comment": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1,
|
|
||||||
"description": "GitHub comment ID"
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri",
|
|
||||||
"description": "Direct URL to the posted comment"
|
|
||||||
},
|
|
||||||
"body_length": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Length of the posted comment body in characters"
|
|
||||||
},
|
|
||||||
"created_at": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time",
|
|
||||||
"description": "When the comment was created"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Details of the posted comment (only present if success=true)"
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"code": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["authentication_failed", "rate_limit_exceeded", "issue_not_found", "issue_locked", "permission_denied", "comment_too_long", "network_error", "api_error", "unknown_error"],
|
|
||||||
"description": "Error code"
|
|
||||||
},
|
|
||||||
"message": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Human-readable error message"
|
|
||||||
},
|
|
||||||
"retryable": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Whether the operation can be retried"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Error details (only present if success=false)"
|
|
||||||
},
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time",
|
|
||||||
"description": "Operation timestamp"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Commit Analysis",
|
|
||||||
"description": "Structured analysis of git commits for changelog generation",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["range", "commits", "summary", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"range": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["from", "to", "total_commits"],
|
|
||||||
"properties": {
|
|
||||||
"from": { "type": "string", "minLength": 1 },
|
|
||||||
"to": { "type": "string", "minLength": 1 },
|
|
||||||
"total_commits": { "type": "integer", "minimum": 0 },
|
|
||||||
"date_range": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"start": { "type": "string" },
|
|
||||||
"end": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"commits": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["hash", "date", "type", "subject"],
|
|
||||||
"properties": {
|
|
||||||
"hash": { "type": "string", "minLength": 4 },
|
|
||||||
"author": { "type": "string" },
|
|
||||||
"date": { "type": "string" },
|
|
||||||
"type": { "type": "string", "enum": ["feat", "fix", "docs", "refactor", "test", "chore", "perf", "ci", "other"] },
|
|
||||||
"scope": { "type": ["string", "null"] },
|
|
||||||
"subject": { "type": "string", "minLength": 1 },
|
|
||||||
"breaking": { "type": "boolean" },
|
|
||||||
"breaking_note": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["by_type"],
|
|
||||||
"properties": {
|
|
||||||
"by_type": { "type": "object" },
|
|
||||||
"breaking_changes": { "type": "integer", "minimum": 0 },
|
|
||||||
"contributors": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"most_changed_scopes": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Connections",
|
|
||||||
"description": "Mapping of new content to existing Zettelkasten notes and addresses",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["source_title", "related_notes", "suggested_placements"],
|
|
||||||
"properties": {
|
|
||||||
"source_title": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Title of the source being connected"
|
|
||||||
},
|
|
||||||
"related_notes": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["filename", "title", "folgezettel_address", "relationship"],
|
|
||||||
"properties": {
|
|
||||||
"filename": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^[0-9a-f]{8}\\.md$",
|
|
||||||
"description": "Hex-ID filename of the related note"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Full title of the related note"
|
|
||||||
},
|
|
||||||
"folgezettel_address": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Folgezettel address of the related note"
|
|
||||||
},
|
|
||||||
"relationship": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Why this note is related to the source"
|
|
||||||
},
|
|
||||||
"link_direction": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["from_new", "to_new", "bidirectional"],
|
|
||||||
"description": "Whether the new note should link to this, or this should link to new"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Existing notes related to the source content"
|
|
||||||
},
|
|
||||||
"suggested_placements": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["folgezettel_address", "parent_note", "section", "rationale"],
|
|
||||||
"properties": {
|
|
||||||
"folgezettel_address": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Suggested Folgezettel address for a new note"
|
|
||||||
},
|
|
||||||
"parent_note": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Filename of the parent note in the Folgezettel sequence"
|
|
||||||
},
|
|
||||||
"section": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Top-level section name"
|
|
||||||
},
|
|
||||||
"rationale": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Why this placement makes sense"
|
|
||||||
},
|
|
||||||
"concept": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Which concept from the source this placement is for"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Suggested positions in the Folgezettel for new notes"
|
|
||||||
},
|
|
||||||
"index_update_needed": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Whether the index note should be updated"
|
|
||||||
},
|
|
||||||
"suggested_index_entries": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["keyword", "rationale"],
|
|
||||||
"properties": {
|
|
||||||
"keyword": { "type": "string" },
|
|
||||||
"rationale": { "type": "string" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Suggested new entries for the index note"
|
|
||||||
},
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Convergent Proposals",
|
|
||||||
"description": "Prioritized simplification proposals from convergent thinking phase",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["source_findings", "validation_summary", "proposals", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"source_findings": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["total_reviewed", "confirmed", "partially_confirmed", "rejected"],
|
|
||||||
"properties": {
|
|
||||||
"total_reviewed": { "type": "integer" },
|
|
||||||
"confirmed": { "type": "integer" },
|
|
||||||
"partially_confirmed": { "type": "integer" },
|
|
||||||
"rejected": { "type": "integer" },
|
|
||||||
"rejection_reasons": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["finding_id", "reason"],
|
|
||||||
"properties": {
|
|
||||||
"finding_id": { "type": "string" },
|
|
||||||
"reason": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"validation_summary": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Narrative summary of the converge→diverge→converge validation process"
|
|
||||||
},
|
|
||||||
"proposals": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "title", "description", "source_findings", "impact", "effort", "risk", "tier", "files"],
|
|
||||||
"properties": {
|
|
||||||
"id": { "type": "string", "pattern": "^SMP-\\d{3}$" },
|
|
||||||
"title": { "type": "string" },
|
|
||||||
"description": { "type": "string" },
|
|
||||||
"source_findings": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "DVG-xxx IDs this proposal addresses"
|
|
||||||
},
|
|
||||||
"impact": { "type": "string", "enum": ["high", "medium", "low"] },
|
|
||||||
"effort": { "type": "string", "enum": ["small", "medium", "large"] },
|
|
||||||
"risk": { "type": "string", "enum": ["low", "medium", "high"] },
|
|
||||||
"tier": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1,
|
|
||||||
"maximum": 3,
|
|
||||||
"description": "Priority tier: 1=do now, 2=do next, 3=consider later"
|
|
||||||
},
|
|
||||||
"files": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "Files that would be modified"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "SMP-xxx IDs that must be applied first"
|
|
||||||
},
|
|
||||||
"lines_removed_estimate": { "type": "integer" },
|
|
||||||
"second_order_effects": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "Insights discovered during deeper probing"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"eighty_twenty_analysis": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Which 20% of proposals yield 80% of the simplification benefit"
|
|
||||||
},
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["current_coverage", "uncovered_functions", "uncovered_branches", "edge_cases", "mock_requirements"],
|
|
||||||
"properties": {
|
|
||||||
"current_coverage": { "type": "string" },
|
|
||||||
"uncovered_functions": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
},
|
|
||||||
"uncovered_branches": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
},
|
|
||||||
"edge_cases": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
},
|
|
||||||
"mock_requirements": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Dead Code Scan",
|
|
||||||
"description": "Scan results for dead or redundant code",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["target", "findings", "summary", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"target": { "type": "string", "minLength": 1 },
|
|
||||||
"findings": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "type", "location", "description", "confidence", "safe_to_remove"],
|
|
||||||
"properties": {
|
|
||||||
"id": { "type": "string", "pattern": "^DC-[0-9]{3}$" },
|
|
||||||
"type": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["unused_export", "unreachable", "orphaned_file", "redundant", "stale_test", "unused_import", "commented_code"]
|
|
||||||
},
|
|
||||||
"location": { "type": "string", "minLength": 1 },
|
|
||||||
"symbol": { "type": "string" },
|
|
||||||
"description": { "type": "string", "minLength": 5 },
|
|
||||||
"evidence": { "type": "string" },
|
|
||||||
"confidence": { "type": "string", "enum": ["high", "medium", "low"] },
|
|
||||||
"safe_to_remove": { "type": "boolean" },
|
|
||||||
"removal_note": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["total_findings"],
|
|
||||||
"properties": {
|
|
||||||
"total_findings": { "type": "integer", "minimum": 0 },
|
|
||||||
"by_type": { "type": "object" },
|
|
||||||
"high_confidence_count": { "type": "integer", "minimum": 0 },
|
|
||||||
"estimated_lines_removable": { "type": "integer", "minimum": 0 }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["hypotheses"],
|
|
||||||
"properties": {
|
|
||||||
"hypotheses": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "description", "likelihood", "test_approach"],
|
|
||||||
"properties": {
|
|
||||||
"id": { "type": "integer" },
|
|
||||||
"description": { "type": "string", "minLength": 1 },
|
|
||||||
"likelihood": { "type": "string", "enum": ["high", "medium", "low"] },
|
|
||||||
"test_approach": { "type": "string", "minLength": 1 },
|
|
||||||
"expected_result_if_true": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["expected_behavior", "actual_behavior", "reproduction_steps", "relevant_files"],
|
|
||||||
"properties": {
|
|
||||||
"expected_behavior": { "type": "string", "minLength": 1 },
|
|
||||||
"actual_behavior": { "type": "string", "minLength": 1 },
|
|
||||||
"reproduction_steps": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
},
|
|
||||||
"relevant_files": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
},
|
|
||||||
"environmental_factors": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["files_changed", "modules_affected", "related_tests", "breaking_changes"],
|
|
||||||
"properties": {
|
|
||||||
"files_changed": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["path", "change_type", "purpose"],
|
|
||||||
"properties": {
|
|
||||||
"path": { "type": "string" },
|
|
||||||
"change_type": { "type": "string", "enum": ["added", "modified", "deleted"] },
|
|
||||||
"purpose": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"modules_affected": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
},
|
|
||||||
"related_tests": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
},
|
|
||||||
"breaking_changes": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Divergent Findings",
|
|
||||||
"description": "Broad-net findings from divergent thinking phase of the recinq pipeline",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["scope", "findings", "metrics_summary", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"scope": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["target", "files_scanned", "total_lines"],
|
|
||||||
"properties": {
|
|
||||||
"target": { "type": "string", "description": "What was analyzed (path, module, or 'whole-project')" },
|
|
||||||
"files_scanned": { "type": "integer" },
|
|
||||||
"total_lines": { "type": "integer" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"findings": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "category", "title", "description", "evidence", "severity"],
|
|
||||||
"properties": {
|
|
||||||
"id": { "type": "string", "pattern": "^DVG-\\d{3}$" },
|
|
||||||
"category": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": [
|
|
||||||
"premature_abstraction",
|
|
||||||
"unnecessary_indirection",
|
|
||||||
"overengineering",
|
|
||||||
"yagni_violation",
|
|
||||||
"accidental_complexity",
|
|
||||||
"copy_paste_drift",
|
|
||||||
"dead_weight",
|
|
||||||
"naming_lie",
|
|
||||||
"dependency_gravity",
|
|
||||||
"missing_abstraction",
|
|
||||||
"other"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"title": { "type": "string" },
|
|
||||||
"description": { "type": "string" },
|
|
||||||
"evidence": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["files"],
|
|
||||||
"properties": {
|
|
||||||
"files": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"line_count": { "type": "integer" },
|
|
||||||
"reference_count": { "type": "integer" },
|
|
||||||
"change_frequency": { "type": "integer" },
|
|
||||||
"metrics": { "type": "string" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"severity": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["critical", "high", "medium", "low"]
|
|
||||||
},
|
|
||||||
"confidence": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["high", "medium", "low"],
|
|
||||||
"description": "How confident the provocateur is in this finding"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"metrics_summary": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["total_findings"],
|
|
||||||
"properties": {
|
|
||||||
"total_findings": { "type": "integer" },
|
|
||||||
"by_category": { "type": "object", "additionalProperties": { "type": "integer" } },
|
|
||||||
"by_severity": { "type": "object", "additionalProperties": { "type": "integer" } },
|
|
||||||
"hotspot_files": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "Files appearing in multiple findings"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Documentation Consistency Report",
|
|
||||||
"description": "Output from the analyze-consistency step: list of inconsistencies between code and documentation",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["summary", "inconsistencies", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"summary": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["total_count", "by_severity"],
|
|
||||||
"properties": {
|
|
||||||
"total_count": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Total number of inconsistencies found"
|
|
||||||
},
|
|
||||||
"by_severity": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"critical": { "type": "integer", "minimum": 0 },
|
|
||||||
"high": { "type": "integer", "minimum": 0 },
|
|
||||||
"medium": { "type": "integer", "minimum": 0 },
|
|
||||||
"low": { "type": "integer", "minimum": 0 }
|
|
||||||
},
|
|
||||||
"description": "Count of inconsistencies by severity level"
|
|
||||||
},
|
|
||||||
"clean": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "True if no inconsistencies were found"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"inconsistencies": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "severity", "category", "title", "description", "source_location", "doc_location"],
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^DOC-[0-9]{3}$",
|
|
||||||
"description": "Unique inconsistency ID (DOC-001, DOC-002, etc.)"
|
|
||||||
},
|
|
||||||
"severity": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["critical", "high", "medium", "low"],
|
|
||||||
"description": "Severity of the inconsistency"
|
|
||||||
},
|
|
||||||
"category": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["cli_flags", "personas", "pipelines", "contracts", "env_vars", "api", "stale_reference", "missing_docs", "other"],
|
|
||||||
"description": "Category of the inconsistency"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"maxLength": 200,
|
|
||||||
"description": "Short title describing the inconsistency"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Detailed description of the inconsistency and what needs to change"
|
|
||||||
},
|
|
||||||
"source_location": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "File and line where the source of truth is (code, pipeline, etc.)"
|
|
||||||
},
|
|
||||||
"doc_location": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "File and section where the documentation is stale or missing"
|
|
||||||
},
|
|
||||||
"fix_description": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "What specifically needs to be updated"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "List of documentation inconsistencies"
|
|
||||||
},
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time",
|
|
||||||
"description": "When the analysis was performed"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Documentation Issue Result",
|
|
||||||
"description": "Output from the create-issue step: GitHub issue creation result",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["success", "repository", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"success": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Whether the issue was successfully created"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^[^/]+/[^/]+$",
|
|
||||||
"description": "Repository full name (owner/repo)"
|
|
||||||
},
|
|
||||||
"issue": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1,
|
|
||||||
"description": "GitHub issue number"
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri",
|
|
||||||
"description": "URL to the created issue"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Issue title"
|
|
||||||
},
|
|
||||||
"inconsistency_count": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Number of inconsistencies reported in the issue"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Details of the created issue (only present if success=true)"
|
|
||||||
},
|
|
||||||
"skipped": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "True if no issue was created because no inconsistencies were found"
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"code": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["authentication_failed", "rate_limit_exceeded", "permission_denied", "network_error", "api_error", "unknown_error"],
|
|
||||||
"description": "Error code"
|
|
||||||
},
|
|
||||||
"message": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Human-readable error message"
|
|
||||||
},
|
|
||||||
"retryable": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Whether the operation can be retried"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Error details (only present if success=false)"
|
|
||||||
},
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time",
|
|
||||||
"description": "Operation timestamp"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,112 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Documentation Scan Results",
|
|
||||||
"description": "Output from the scan-changes step: changed files and current documentation state snapshot",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["scan_scope", "changed_files", "documentation_snapshot", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"scan_scope": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["mode", "range"],
|
|
||||||
"properties": {
|
|
||||||
"mode": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["diff", "full"],
|
|
||||||
"description": "Whether this was a diff-based or full scan"
|
|
||||||
},
|
|
||||||
"range": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Git range used for diff (e.g. 'main...HEAD') or 'full' for full scan"
|
|
||||||
},
|
|
||||||
"base_ref": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Base reference for comparison"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"changed_files": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["total_count", "categories"],
|
|
||||||
"properties": {
|
|
||||||
"total_count": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Total number of changed files"
|
|
||||||
},
|
|
||||||
"categories": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"go_code": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "Changed Go source files"
|
|
||||||
},
|
|
||||||
"cli_commands": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "Changed CLI command files (cmd/wave/commands/)"
|
|
||||||
},
|
|
||||||
"pipelines": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "Changed pipeline definitions"
|
|
||||||
},
|
|
||||||
"personas": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "Changed persona definitions"
|
|
||||||
},
|
|
||||||
"contracts": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "Changed contract schemas"
|
|
||||||
},
|
|
||||||
"documentation": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "Changed documentation files (docs/, README.md, CLAUDE.md, etc.)"
|
|
||||||
},
|
|
||||||
"other": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "Other changed files"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"documentation_snapshot": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["files"],
|
|
||||||
"properties": {
|
|
||||||
"files": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["path", "exists"],
|
|
||||||
"properties": {
|
|
||||||
"path": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Path to the documentation file"
|
|
||||||
},
|
|
||||||
"exists": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Whether the file exists"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Brief summary of the file's content and key sections"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Key documentation files and their current state"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time",
|
|
||||||
"description": "When the scan was performed"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Doc Sync Scan Results",
|
|
||||||
"description": "Documentation inconsistency scan for doc-sync pipeline",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["scan_scope", "findings", "summary", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"scan_scope": { "type": "string", "minLength": 1 },
|
|
||||||
"findings": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "type", "severity", "title", "description"],
|
|
||||||
"properties": {
|
|
||||||
"id": { "type": "string", "pattern": "^DOC-[0-9]{3}$" },
|
|
||||||
"type": { "type": "string", "enum": ["MISSING_DOCS", "STALE_DOCS", "INACCURATE", "INCOMPLETE"] },
|
|
||||||
"severity": { "type": "string", "enum": ["CRITICAL", "HIGH", "MEDIUM", "LOW"] },
|
|
||||||
"title": { "type": "string", "minLength": 3 },
|
|
||||||
"doc_location": { "type": "string" },
|
|
||||||
"code_location": { "type": "string" },
|
|
||||||
"description": { "type": "string", "minLength": 10 },
|
|
||||||
"suggested_fix": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["total_findings"],
|
|
||||||
"properties": {
|
|
||||||
"total_findings": { "type": "integer", "minimum": 0 },
|
|
||||||
"by_type": { "type": "object" },
|
|
||||||
"by_severity": { "type": "object" },
|
|
||||||
"fixable_count": { "type": "integer", "minimum": 0 }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,112 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"$id": "https://schema.recinq.com/wave/docs-phase.schema.json",
|
|
||||||
"title": "Wave Docs Phase Output Contract",
|
|
||||||
"description": "Validates docs phase outputs for prototype-driven development pipeline",
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"phase": {
|
|
||||||
"type": "string",
|
|
||||||
"const": "docs",
|
|
||||||
"description": "Phase identifier"
|
|
||||||
},
|
|
||||||
"artifacts": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"feature_docs": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"path": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^.*feature-docs\\.md$",
|
|
||||||
"description": "Path to feature documentation file"
|
|
||||||
},
|
|
||||||
"exists": {
|
|
||||||
"type": "boolean",
|
|
||||||
"const": true,
|
|
||||||
"description": "Feature documentation file must exist"
|
|
||||||
},
|
|
||||||
"content_type": {
|
|
||||||
"type": "string",
|
|
||||||
"const": "markdown",
|
|
||||||
"description": "Documentation content format"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["path", "exists", "content_type"],
|
|
||||||
"additionalProperties": false
|
|
||||||
},
|
|
||||||
"stakeholder_summary": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"path": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^.*stakeholder-summary\\.md$",
|
|
||||||
"description": "Path to stakeholder summary file"
|
|
||||||
},
|
|
||||||
"exists": {
|
|
||||||
"type": "boolean",
|
|
||||||
"const": true,
|
|
||||||
"description": "Stakeholder summary file must exist"
|
|
||||||
},
|
|
||||||
"content_type": {
|
|
||||||
"type": "string",
|
|
||||||
"const": "markdown",
|
|
||||||
"description": "Summary content format"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["path", "exists", "content_type"],
|
|
||||||
"additionalProperties": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["feature_docs", "stakeholder_summary"],
|
|
||||||
"additionalProperties": true
|
|
||||||
},
|
|
||||||
"validation": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"coverage_percentage": {
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 100,
|
|
||||||
"description": "Specification coverage in documentation"
|
|
||||||
},
|
|
||||||
"readability_score": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 100,
|
|
||||||
"description": "Documentation readability rating"
|
|
||||||
},
|
|
||||||
"documentation_quality": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["poor", "fair", "good", "excellent"],
|
|
||||||
"description": "Overall documentation quality assessment"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["documentation_quality"],
|
|
||||||
"additionalProperties": false
|
|
||||||
},
|
|
||||||
"metadata": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time",
|
|
||||||
"description": "When docs phase was completed"
|
|
||||||
},
|
|
||||||
"duration_seconds": {
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Time taken for docs phase"
|
|
||||||
},
|
|
||||||
"source_spec_path": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Path to source specification file"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["timestamp", "source_spec_path"],
|
|
||||||
"additionalProperties": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["phase", "artifacts", "validation", "metadata"],
|
|
||||||
"additionalProperties": false
|
|
||||||
}
|
|
||||||
@@ -1,110 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"$id": "https://schema.recinq.com/wave/dummy-phase.schema.json",
|
|
||||||
"title": "Wave Dummy Phase Output Contract",
|
|
||||||
"description": "Validates dummy phase outputs for prototype-driven development pipeline",
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"phase": {
|
|
||||||
"type": "string",
|
|
||||||
"const": "dummy",
|
|
||||||
"description": "Phase identifier"
|
|
||||||
},
|
|
||||||
"artifacts": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"prototype": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"path": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^.*prototype/?$",
|
|
||||||
"description": "Path to prototype directory"
|
|
||||||
},
|
|
||||||
"exists": {
|
|
||||||
"type": "boolean",
|
|
||||||
"const": true,
|
|
||||||
"description": "Prototype directory must exist"
|
|
||||||
},
|
|
||||||
"content_type": {
|
|
||||||
"type": "string",
|
|
||||||
"const": "code",
|
|
||||||
"description": "Prototype content type"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["path", "exists", "content_type"],
|
|
||||||
"additionalProperties": false
|
|
||||||
},
|
|
||||||
"interface_definitions": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"path": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^.*interfaces\\.md$",
|
|
||||||
"description": "Path to interface definitions file"
|
|
||||||
},
|
|
||||||
"exists": {
|
|
||||||
"type": "boolean",
|
|
||||||
"const": true,
|
|
||||||
"description": "Interface definitions file must exist"
|
|
||||||
},
|
|
||||||
"content_type": {
|
|
||||||
"type": "string",
|
|
||||||
"const": "markdown",
|
|
||||||
"description": "Interface definitions content format"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["path", "exists", "content_type"],
|
|
||||||
"additionalProperties": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["prototype", "interface_definitions"],
|
|
||||||
"additionalProperties": true
|
|
||||||
},
|
|
||||||
"validation": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"runnable": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Whether the prototype can be executed"
|
|
||||||
},
|
|
||||||
"interface_completeness": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 100,
|
|
||||||
"description": "Percentage of interfaces stubbed"
|
|
||||||
},
|
|
||||||
"prototype_quality": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["poor", "fair", "good", "excellent"],
|
|
||||||
"description": "Overall prototype quality assessment"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["runnable", "prototype_quality"],
|
|
||||||
"additionalProperties": false
|
|
||||||
},
|
|
||||||
"metadata": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time",
|
|
||||||
"description": "When dummy phase was completed"
|
|
||||||
},
|
|
||||||
"duration_seconds": {
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Time taken for dummy phase"
|
|
||||||
},
|
|
||||||
"source_docs_path": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Path to source documentation file"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["timestamp", "source_docs_path"],
|
|
||||||
"additionalProperties": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["phase", "artifacts", "validation", "metadata"],
|
|
||||||
"additionalProperties": false
|
|
||||||
}
|
|
||||||
@@ -1,98 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Editorial Plan",
|
|
||||||
"description": "Analysis of a blog draft with a mapped editorial plan based on author criticism",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["draft_filename", "draft_title", "sections", "editorial_actions"],
|
|
||||||
"properties": {
|
|
||||||
"draft_filename": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^[0-9a-f]{8}\\.md$",
|
|
||||||
"description": "Hex-ID filename of the draft note"
|
|
||||||
},
|
|
||||||
"draft_title": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Title of the blog draft"
|
|
||||||
},
|
|
||||||
"sections": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["heading", "line_range", "summary"],
|
|
||||||
"properties": {
|
|
||||||
"heading": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Section heading text"
|
|
||||||
},
|
|
||||||
"line_range": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Line range in the file (e.g., 15-42)"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Brief summary of what this section covers"
|
|
||||||
},
|
|
||||||
"word_count": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Structural map of the draft's sections"
|
|
||||||
},
|
|
||||||
"editorial_actions": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "type", "target_section", "description", "criticism_addressed"],
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^EDIT-[0-9]{3}$",
|
|
||||||
"description": "Unique action identifier"
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["rewrite", "restructure", "cut", "expand", "add", "replace_example", "fix_tone", "fix_links"],
|
|
||||||
"description": "Type of editorial action"
|
|
||||||
},
|
|
||||||
"target_section": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Section heading this action targets, or 'global' for whole-draft changes"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Specific description of what to change and why"
|
|
||||||
},
|
|
||||||
"criticism_addressed": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Which part of the author's criticism this action addresses"
|
|
||||||
},
|
|
||||||
"priority": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["high", "medium", "low"],
|
|
||||||
"description": "How critical this edit is"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Ordered list of editorial actions to apply"
|
|
||||||
},
|
|
||||||
"linked_notes": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["filename", "title"],
|
|
||||||
"properties": {
|
|
||||||
"filename": { "type": "string" },
|
|
||||||
"title": { "type": "string" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Notes currently linked from the draft"
|
|
||||||
},
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Code Architecture Analysis",
|
|
||||||
"description": "Architecture and design analysis of explored code",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["topic", "patterns", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"topic": { "type": "string", "minLength": 3 },
|
|
||||||
"patterns": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["name", "where", "why"],
|
|
||||||
"properties": {
|
|
||||||
"name": { "type": "string" },
|
|
||||||
"where": { "type": "string" },
|
|
||||||
"why": { "type": "string" },
|
|
||||||
"quality": { "type": "string", "enum": ["well-implemented", "adequate", "needs-improvement"] }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"data_flow": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["name"],
|
|
||||||
"properties": {
|
|
||||||
"name": { "type": "string" },
|
|
||||||
"stages": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"key_transformations": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"error_handling": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"strategy": { "type": "string" },
|
|
||||||
"patterns": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"gaps": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"concurrency": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"model": { "type": "string" },
|
|
||||||
"primitives": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"risks": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"extension_points": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["interface", "file"],
|
|
||||||
"properties": {
|
|
||||||
"interface": { "type": "string" },
|
|
||||||
"file": { "type": "string" },
|
|
||||||
"purpose": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"design_decisions": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["decision"],
|
|
||||||
"properties": {
|
|
||||||
"decision": { "type": "string" },
|
|
||||||
"rationale": { "type": "string" },
|
|
||||||
"trade_offs": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Explain Exploration Results",
|
|
||||||
"description": "Structured exploration of a codebase topic for explanation",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["topic", "entry_points", "key_types", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"topic": { "type": "string", "minLength": 1 },
|
|
||||||
"entry_points": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["file", "symbol", "role"],
|
|
||||||
"properties": {
|
|
||||||
"file": { "type": "string", "minLength": 1 },
|
|
||||||
"symbol": { "type": "string", "minLength": 1 },
|
|
||||||
"role": { "type": "string", "minLength": 1 },
|
|
||||||
"line": { "type": "integer", "minimum": 1 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"key_types": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["name", "file", "purpose"],
|
|
||||||
"properties": {
|
|
||||||
"name": { "type": "string", "minLength": 1 },
|
|
||||||
"file": { "type": "string", "minLength": 1 },
|
|
||||||
"purpose": { "type": "string", "minLength": 1 },
|
|
||||||
"methods": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"relationships": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"call_flows": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["name", "steps"],
|
|
||||||
"properties": {
|
|
||||||
"name": { "type": "string" },
|
|
||||||
"steps": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"description": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"depends_on": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"depended_by": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"external": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"test_files": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"config_points": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"file_count": { "type": "integer", "minimum": 0 },
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Feature Exploration",
|
|
||||||
"description": "Codebase exploration for feature implementation",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["feature", "scope", "related_files", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"feature": { "type": "string", "minLength": 1 },
|
|
||||||
"scope": { "type": "string", "enum": ["small", "medium", "large"] },
|
|
||||||
"related_files": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["path", "relevance", "reason"],
|
|
||||||
"properties": {
|
|
||||||
"path": { "type": "string", "minLength": 1 },
|
|
||||||
"relevance": { "type": "string", "enum": ["primary", "secondary"] },
|
|
||||||
"reason": { "type": "string", "minLength": 1 },
|
|
||||||
"key_symbols": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"patterns_to_follow": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["name"],
|
|
||||||
"properties": {
|
|
||||||
"name": { "type": "string" },
|
|
||||||
"example_file": { "type": "string" },
|
|
||||||
"relevance": { "type": "string", "enum": ["must_follow", "should_follow"] }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"affected_modules": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"test_files": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"risks": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["description", "severity"],
|
|
||||||
"properties": {
|
|
||||||
"description": { "type": "string" },
|
|
||||||
"severity": { "type": "string", "enum": ["high", "medium", "low"] },
|
|
||||||
"mitigation": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Feature Implementation Plan",
|
|
||||||
"description": "Ordered implementation plan for a feature",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["feature", "steps", "total_complexity", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"feature": { "type": "string", "minLength": 5 },
|
|
||||||
"steps": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "title", "description"],
|
|
||||||
"properties": {
|
|
||||||
"id": { "type": "string", "pattern": "^S\\d{2}$" },
|
|
||||||
"title": { "type": "string" },
|
|
||||||
"description": { "type": "string" },
|
|
||||||
"files_to_modify": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"files_to_create": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"tests_to_write": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"acceptance_criteria": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"complexity": { "type": "string", "enum": ["S", "M", "L"] },
|
|
||||||
"dependencies": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"total_complexity": { "type": "string", "enum": ["S", "M", "L", "XL"] },
|
|
||||||
"branch_name_suggestion": { "type": "string" },
|
|
||||||
"commit_message_suggestion": { "type": "string" },
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Investigation Findings",
|
|
||||||
"type": "object",
|
|
||||||
"required": [
|
|
||||||
"root_cause",
|
|
||||||
"affected_files",
|
|
||||||
"fix_approach"
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"root_cause": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Description of the root cause"
|
|
||||||
},
|
|
||||||
"affected_files": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "List of affected file paths"
|
|
||||||
},
|
|
||||||
"recent_commits": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "List of relevant commit hashes"
|
|
||||||
},
|
|
||||||
"blast_radius": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Assessment of what else could be affected"
|
|
||||||
},
|
|
||||||
"fix_approach": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Recommended approach to fix the issue"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "GitHub Issue Enhancement Plan",
|
|
||||||
"description": "Schema for GitHub issue enhancement recommendations",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["issues_to_enhance"],
|
|
||||||
"properties": {
|
|
||||||
"issues_to_enhance": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["issue_number", "enhancements"],
|
|
||||||
"properties": {
|
|
||||||
"issue_number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1
|
|
||||||
},
|
|
||||||
"current_title": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"suggested_title": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"current_body": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"body_template": {
|
|
||||||
"type": ["string", "null"],
|
|
||||||
"description": "Enhanced body template preserving original content"
|
|
||||||
},
|
|
||||||
"suggested_labels": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enhancements": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"minItems": 1,
|
|
||||||
"description": "List of specific enhancements to apply"
|
|
||||||
},
|
|
||||||
"rationale": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Why these enhancements are recommended"
|
|
||||||
},
|
|
||||||
"priority": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["high", "medium", "low"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"total_to_enhance": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0
|
|
||||||
},
|
|
||||||
"enhancement_strategy": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Overall strategy for enhancements"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "GitHub Issue Enhancement Results",
|
|
||||||
"description": "Schema for GitHub issue enhancement execution results",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["enhanced_issues", "total_attempted", "total_successful"],
|
|
||||||
"properties": {
|
|
||||||
"enhanced_issues": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["issue_number", "success", "changes_made", "url"],
|
|
||||||
"properties": {
|
|
||||||
"issue_number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1
|
|
||||||
},
|
|
||||||
"success": {
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"changes_made": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "List of changes successfully applied"
|
|
||||||
},
|
|
||||||
"title_updated": {
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"body_updated": {
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"labels_added": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"comment_added": {
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Error message if enhancement failed"
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"total_attempted": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0
|
|
||||||
},
|
|
||||||
"total_successful": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0
|
|
||||||
},
|
|
||||||
"total_failed": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0
|
|
||||||
},
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "GitHub Issue Analysis",
|
|
||||||
"description": "Schema for GitHub issue quality analysis results",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["repository", "total_issues", "poor_quality_issues"],
|
|
||||||
"properties": {
|
|
||||||
"repository": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["owner", "name"],
|
|
||||||
"properties": {
|
|
||||||
"owner": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"total_issues": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0
|
|
||||||
},
|
|
||||||
"analyzed_count": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0
|
|
||||||
},
|
|
||||||
"poor_quality_issues": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["number", "title", "quality_score", "problems"],
|
|
||||||
"properties": {
|
|
||||||
"number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"quality_score": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 100
|
|
||||||
},
|
|
||||||
"problems": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"recommendations": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"labels": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"quality_threshold": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 100
|
|
||||||
},
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "GitHub Enhancement Verification Report",
|
|
||||||
"description": "Schema for verifying GitHub issue enhancements were applied",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["total_enhanced", "successful_enhancements", "failed_enhancements"],
|
|
||||||
"properties": {
|
|
||||||
"total_enhanced": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0
|
|
||||||
},
|
|
||||||
"successful_enhancements": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["issue_number", "verified_changes"],
|
|
||||||
"properties": {
|
|
||||||
"issue_number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1
|
|
||||||
},
|
|
||||||
"verified_changes": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"quality_score_before": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 100
|
|
||||||
},
|
|
||||||
"quality_score_after": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 100
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"failed_enhancements": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["issue_number", "problems"],
|
|
||||||
"properties": {
|
|
||||||
"issue_number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1
|
|
||||||
},
|
|
||||||
"problems": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"quality_improvement": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"average_score_before": {
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 100
|
|
||||||
},
|
|
||||||
"average_score_after": {
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 100
|
|
||||||
},
|
|
||||||
"improvement_percentage": {
|
|
||||||
"type": "number"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Human-readable summary of verification results"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Hello World Result",
|
|
||||||
"description": "Verification result from the hello-world verify step",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["success", "message"],
|
|
||||||
"properties": {
|
|
||||||
"success": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Whether the hello-world pipeline completed successfully"
|
|
||||||
},
|
|
||||||
"message": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Human-readable verification result"
|
|
||||||
},
|
|
||||||
"checks": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": true
|
|
||||||
},
|
|
||||||
"description": "Optional list of individual verification checks performed"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": true
|
|
||||||
}
|
|
||||||
@@ -1,138 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"$id": "https://schema.recinq.com/wave/implement-phase.schema.json",
|
|
||||||
"title": "Wave Implement Phase Output Contract",
|
|
||||||
"description": "Validates implementation phase outputs for prototype-driven development pipeline",
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"phase": {
|
|
||||||
"type": "string",
|
|
||||||
"const": "implement",
|
|
||||||
"description": "Phase identifier"
|
|
||||||
},
|
|
||||||
"artifacts": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"implementation_plan": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"path": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^.*implementation-plan\\.md$",
|
|
||||||
"description": "Path to implementation plan file"
|
|
||||||
},
|
|
||||||
"exists": {
|
|
||||||
"type": "boolean",
|
|
||||||
"const": true,
|
|
||||||
"description": "Implementation plan file must exist"
|
|
||||||
},
|
|
||||||
"content_type": {
|
|
||||||
"type": "string",
|
|
||||||
"const": "markdown",
|
|
||||||
"description": "Implementation plan content format"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["path", "exists", "content_type"],
|
|
||||||
"additionalProperties": false
|
|
||||||
},
|
|
||||||
"progress_checklist": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"path": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^.*implementation-checklist\\.md$",
|
|
||||||
"description": "Path to progress checklist file"
|
|
||||||
},
|
|
||||||
"exists": {
|
|
||||||
"type": "boolean",
|
|
||||||
"const": true,
|
|
||||||
"description": "Progress checklist file must exist"
|
|
||||||
},
|
|
||||||
"content_type": {
|
|
||||||
"type": "string",
|
|
||||||
"const": "markdown",
|
|
||||||
"description": "Checklist content format"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["path", "exists", "content_type"],
|
|
||||||
"additionalProperties": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["implementation_plan", "progress_checklist"],
|
|
||||||
"additionalProperties": true
|
|
||||||
},
|
|
||||||
"validation": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"tests_executed": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Whether test suite was executed"
|
|
||||||
},
|
|
||||||
"test_results": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"total": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Total number of tests"
|
|
||||||
},
|
|
||||||
"passed": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Number of tests that passed"
|
|
||||||
},
|
|
||||||
"failed": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Number of tests that failed"
|
|
||||||
},
|
|
||||||
"coverage_percent": {
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 100,
|
|
||||||
"description": "Test coverage percentage"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["total", "passed", "failed"],
|
|
||||||
"additionalProperties": false
|
|
||||||
},
|
|
||||||
"implementation_readiness": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["ready", "partial", "needs_work"],
|
|
||||||
"description": "Assessment of implementation readiness"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["tests_executed", "implementation_readiness"],
|
|
||||||
"additionalProperties": false
|
|
||||||
},
|
|
||||||
"metadata": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time",
|
|
||||||
"description": "When implementation phase was completed"
|
|
||||||
},
|
|
||||||
"duration_seconds": {
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Time taken for implementation phase"
|
|
||||||
},
|
|
||||||
"previous_phases": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["spec", "docs", "dummy"]
|
|
||||||
},
|
|
||||||
"minItems": 3,
|
|
||||||
"maxItems": 3,
|
|
||||||
"description": "Previous phases that fed into this implementation"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["timestamp", "previous_phases"],
|
|
||||||
"additionalProperties": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["phase", "artifacts", "validation", "metadata"],
|
|
||||||
"additionalProperties": false
|
|
||||||
}
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Improvement Assessment",
|
|
||||||
"description": "Structured assessment of code improvement opportunities",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["target", "findings", "summary", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"target": { "type": "string", "minLength": 1 },
|
|
||||||
"findings": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "category", "title", "location", "description", "impact", "effort"],
|
|
||||||
"properties": {
|
|
||||||
"id": { "type": "string", "pattern": "^IMP-[0-9]{3}$" },
|
|
||||||
"category": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["error_handling", "performance", "testability", "robustness", "maintainability", "code_quality"]
|
|
||||||
},
|
|
||||||
"title": { "type": "string", "minLength": 3 },
|
|
||||||
"location": { "type": "string", "minLength": 1 },
|
|
||||||
"description": { "type": "string", "minLength": 10 },
|
|
||||||
"current_code": { "type": "string" },
|
|
||||||
"suggested_fix": { "type": "string", "minLength": 5 },
|
|
||||||
"impact": { "type": "string", "enum": ["high", "medium", "low"] },
|
|
||||||
"effort": { "type": "string", "enum": ["trivial", "small", "medium", "large"] },
|
|
||||||
"risk": { "type": "string", "enum": ["none", "low", "medium", "high"] }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["total_findings", "overall_quality"],
|
|
||||||
"properties": {
|
|
||||||
"total_findings": { "type": "integer", "minimum": 0 },
|
|
||||||
"by_category": { "type": "object" },
|
|
||||||
"quick_wins": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"high_impact": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"overall_quality": { "type": "string", "minLength": 10 }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "GitHub Issue Implementation Assessment",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["implementable", "issue", "assessment"],
|
|
||||||
"properties": {
|
|
||||||
"implementable": {
|
|
||||||
"type": "boolean",
|
|
||||||
"const": true,
|
|
||||||
"description": "Must be true for the pipeline to proceed. Set to false if the issue lacks sufficient detail."
|
|
||||||
},
|
|
||||||
"issue": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["number", "title", "body", "repository", "url"],
|
|
||||||
"properties": {
|
|
||||||
"number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^[^/]+/[^/]+$"
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri"
|
|
||||||
},
|
|
||||||
"labels": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
},
|
|
||||||
"state": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"comments": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "object" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"assessment": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["quality_score", "complexity", "skip_steps", "branch_name"],
|
|
||||||
"properties": {
|
|
||||||
"quality_score": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 100,
|
|
||||||
"description": "How well-specified the issue is (0-100)"
|
|
||||||
},
|
|
||||||
"complexity": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["trivial", "simple", "medium", "complex"],
|
|
||||||
"description": "Estimated implementation complexity"
|
|
||||||
},
|
|
||||||
"skip_steps": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["specify", "clarify", "checklist", "analyze"]
|
|
||||||
},
|
|
||||||
"description": "Speckit steps that can be skipped because the issue provides sufficient detail"
|
|
||||||
},
|
|
||||||
"branch_name": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Suggested branch name for the implementation"
|
|
||||||
},
|
|
||||||
"missing_info": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "Information that would improve the issue but isn't blocking"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Brief summary of the assessment"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "GitHub Issue Content",
|
|
||||||
"description": "Parsed content from a GitHub issue for research pipeline processing",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["issue_number", "title", "body", "author", "url", "repository"],
|
|
||||||
"properties": {
|
|
||||||
"issue_number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1,
|
|
||||||
"description": "GitHub issue number"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"maxLength": 256,
|
|
||||||
"description": "Issue title"
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Issue body/description text"
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["login"],
|
|
||||||
"properties": {
|
|
||||||
"login": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "GitHub username of issue author"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"labels": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["name"],
|
|
||||||
"properties": {
|
|
||||||
"name": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Label name"
|
|
||||||
},
|
|
||||||
"color": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Label color hex code"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Label description"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Labels applied to the issue"
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri",
|
|
||||||
"description": "HTML URL to the GitHub issue"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["owner", "name", "full_name"],
|
|
||||||
"properties": {
|
|
||||||
"owner": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Repository owner"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Repository name"
|
|
||||||
},
|
|
||||||
"full_name": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^[^/]+/[^/]+$",
|
|
||||||
"description": "Full repository name (owner/repo)"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"state": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["open", "closed"],
|
|
||||||
"description": "Issue state"
|
|
||||||
},
|
|
||||||
"created_at": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time",
|
|
||||||
"description": "Issue creation timestamp"
|
|
||||||
},
|
|
||||||
"comments_count": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Number of comments on the issue"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Issue Implementation Plan",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["issue_number", "branch_name", "feature_dir", "tasks"],
|
|
||||||
"properties": {
|
|
||||||
"issue_number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1
|
|
||||||
},
|
|
||||||
"branch_name": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1
|
|
||||||
},
|
|
||||||
"feature_dir": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Path to the feature directory under specs/"
|
|
||||||
},
|
|
||||||
"spec_file": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Path to the spec.md file"
|
|
||||||
},
|
|
||||||
"plan_file": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Path to the plan.md file"
|
|
||||||
},
|
|
||||||
"tasks_file": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Path to the tasks.md file"
|
|
||||||
},
|
|
||||||
"tasks": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "title", "description"],
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Task identifier"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Brief task title"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Detailed task description"
|
|
||||||
},
|
|
||||||
"file_changes": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["path", "action"],
|
|
||||||
"properties": {
|
|
||||||
"path": { "type": "string" },
|
|
||||||
"action": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["create", "modify", "delete"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Brief summary of the implementation plan"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,116 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Issue Update Context",
|
|
||||||
"description": "Schema for gathered context about a GitHub issue and recent codebase changes",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["repository", "issue", "changes_since_creation", "referenced_files"],
|
|
||||||
"properties": {
|
|
||||||
"repository": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["owner", "name"],
|
|
||||||
"properties": {
|
|
||||||
"owner": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"issue": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["number", "title", "body", "url", "created_at"],
|
|
||||||
"properties": {
|
|
||||||
"number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"labels": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri"
|
|
||||||
},
|
|
||||||
"created_at": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"comments": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"author": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"created_at": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"changes_since_creation": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["commits", "commit_count"],
|
|
||||||
"properties": {
|
|
||||||
"commits": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"commit_count": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0
|
|
||||||
},
|
|
||||||
"releases": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"referenced_files": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["found", "missing"],
|
|
||||||
"properties": {
|
|
||||||
"found": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"missing": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"criticism": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"project_context": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Issue Update Draft",
|
|
||||||
"description": "Schema for a drafted update to a GitHub issue",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["issue_number", "original_title", "updated_title", "title_changed", "original_body", "updated_body", "staleness_assessment", "changes_made"],
|
|
||||||
"properties": {
|
|
||||||
"issue_number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1
|
|
||||||
},
|
|
||||||
"original_title": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1
|
|
||||||
},
|
|
||||||
"updated_title": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1
|
|
||||||
},
|
|
||||||
"title_changed": {
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"original_body": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"updated_body": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1
|
|
||||||
},
|
|
||||||
"staleness_assessment": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["overall_staleness", "sections"],
|
|
||||||
"properties": {
|
|
||||||
"overall_staleness": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["low", "medium", "high", "critical"]
|
|
||||||
},
|
|
||||||
"sections": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["name", "status", "reason"],
|
|
||||||
"properties": {
|
|
||||||
"name": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["STILL_VALID", "OUTDATED", "INCOMPLETE", "WRONG"]
|
|
||||||
},
|
|
||||||
"reason": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"changes_made": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"minItems": 1
|
|
||||||
},
|
|
||||||
"criticism_addressed": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Issue Update Result",
|
|
||||||
"description": "Schema for the result of applying an issue update",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["issue_number", "success", "changes_applied", "verification"],
|
|
||||||
"properties": {
|
|
||||||
"issue_number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri"
|
|
||||||
},
|
|
||||||
"success": {
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"title_updated": {
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"body_updated": {
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"changes_applied": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"verification": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["title_matches", "body_matches"],
|
|
||||||
"properties": {
|
|
||||||
"title_matches": {
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"body_matches": {
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"discrepancies": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"staleness_assessment": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["low", "medium", "high", "critical"]
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"type": ["string", "null"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,179 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Plan Exploration",
|
|
||||||
"description": "Structured codebase exploration output for feature planning",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["feature_context", "related_files", "patterns", "affected_modules", "testing_landscape", "risks", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"feature_context": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["input_summary", "scope_assessment"],
|
|
||||||
"properties": {
|
|
||||||
"input_summary": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 10,
|
|
||||||
"description": "Brief summary of the feature or task being planned"
|
|
||||||
},
|
|
||||||
"scope_assessment": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["small", "medium", "large", "epic"],
|
|
||||||
"description": "Estimated scope of the work"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"related_files": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["path", "relevance", "reason"],
|
|
||||||
"properties": {
|
|
||||||
"path": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "File path relative to project root"
|
|
||||||
},
|
|
||||||
"relevance": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["primary", "secondary", "reference"],
|
|
||||||
"description": "How relevant this file is to the feature"
|
|
||||||
},
|
|
||||||
"reason": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Why this file is relevant"
|
|
||||||
},
|
|
||||||
"key_symbols": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Important functions, types, or constants in this file"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Files related to the feature"
|
|
||||||
},
|
|
||||||
"patterns": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "name", "description", "relevance"],
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^PAT-[0-9]{3}$",
|
|
||||||
"description": "Pattern identifier"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Short name for the pattern"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "What the pattern is and how it works"
|
|
||||||
},
|
|
||||||
"example_file": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "File that best demonstrates this pattern"
|
|
||||||
},
|
|
||||||
"relevance": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["must_follow", "should_follow", "informational"],
|
|
||||||
"description": "How important it is to follow this pattern"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Codebase patterns and conventions discovered"
|
|
||||||
},
|
|
||||||
"affected_modules": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["path", "description", "impact_level"],
|
|
||||||
"properties": {
|
|
||||||
"path": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Module or package path"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "What this module does"
|
|
||||||
},
|
|
||||||
"impact_level": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["direct", "indirect", "none"],
|
|
||||||
"description": "Level of impact from the planned changes"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Modules this one depends on"
|
|
||||||
},
|
|
||||||
"dependents": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Modules that depend on this one"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Modules affected by the planned changes"
|
|
||||||
},
|
|
||||||
"testing_landscape": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["existing_test_files", "testing_patterns"],
|
|
||||||
"properties": {
|
|
||||||
"existing_test_files": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Test files relevant to the feature"
|
|
||||||
},
|
|
||||||
"testing_patterns": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Testing patterns used in the codebase (e.g., table-driven, mocks)"
|
|
||||||
},
|
|
||||||
"coverage_gaps": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Areas lacking test coverage"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"risks": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["description", "severity"],
|
|
||||||
"properties": {
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "What the risk is"
|
|
||||||
},
|
|
||||||
"severity": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["high", "medium", "low"],
|
|
||||||
"description": "Risk severity"
|
|
||||||
},
|
|
||||||
"mitigation": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "How to mitigate this risk"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Risks identified during exploration"
|
|
||||||
},
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time",
|
|
||||||
"description": "When the exploration was completed"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,235 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Plan Review",
|
|
||||||
"description": "Structured review of a task breakdown plan",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["verdict", "summary", "task_reviews", "cross_cutting_concerns", "recommendations", "risk_assessment", "timestamp", "markdown_content"],
|
|
||||||
"properties": {
|
|
||||||
"verdict": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["decision", "confidence", "rationale"],
|
|
||||||
"properties": {
|
|
||||||
"decision": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["approve", "approve_with_notes", "revise"],
|
|
||||||
"description": "Overall verdict on the plan"
|
|
||||||
},
|
|
||||||
"confidence": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["high", "medium", "low"],
|
|
||||||
"description": "Confidence in the verdict"
|
|
||||||
},
|
|
||||||
"rationale": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 20,
|
|
||||||
"description": "Explanation for the verdict"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["total_tasks_reviewed", "issues_found", "issues_by_severity", "strengths"],
|
|
||||||
"properties": {
|
|
||||||
"total_tasks_reviewed": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1,
|
|
||||||
"description": "Number of tasks reviewed"
|
|
||||||
},
|
|
||||||
"issues_found": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Total number of issues found"
|
|
||||||
},
|
|
||||||
"issues_by_severity": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"critical": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0
|
|
||||||
},
|
|
||||||
"high": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0
|
|
||||||
},
|
|
||||||
"medium": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0
|
|
||||||
},
|
|
||||||
"low": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Issues broken down by severity"
|
|
||||||
},
|
|
||||||
"strengths": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Things the plan does well"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"task_reviews": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["task_id", "status"],
|
|
||||||
"properties": {
|
|
||||||
"task_id": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^T[0-9]{2}$",
|
|
||||||
"description": "ID of the reviewed task"
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["ok", "needs_refinement", "missing_details", "overcomplicated", "wrong_persona", "bad_dependencies"],
|
|
||||||
"description": "Review status for this task"
|
|
||||||
},
|
|
||||||
"issues": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "severity", "description", "suggestion"],
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^REV-[0-9]{3}$",
|
|
||||||
"description": "Issue identifier"
|
|
||||||
},
|
|
||||||
"severity": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["critical", "high", "medium", "low"],
|
|
||||||
"description": "Issue severity"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "What the issue is"
|
|
||||||
},
|
|
||||||
"suggestion": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "How to fix it"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Issues found in this task"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Per-task review results"
|
|
||||||
},
|
|
||||||
"cross_cutting_concerns": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "category", "description", "affected_tasks", "recommendation"],
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^CC-[0-9]{3}$",
|
|
||||||
"description": "Concern identifier"
|
|
||||||
},
|
|
||||||
"category": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Category of concern (e.g., testing, security, performance)"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "What the concern is"
|
|
||||||
},
|
|
||||||
"affected_tasks": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^T[0-9]{2}$"
|
|
||||||
},
|
|
||||||
"description": "Tasks affected by this concern"
|
|
||||||
},
|
|
||||||
"recommendation": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Recommended action"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Concerns that span multiple tasks"
|
|
||||||
},
|
|
||||||
"recommendations": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "priority", "description", "type"],
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^REC-[0-9]{3}$",
|
|
||||||
"description": "Recommendation identifier"
|
|
||||||
},
|
|
||||||
"priority": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["critical", "high", "medium", "low"],
|
|
||||||
"description": "Priority of the recommendation"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "What should be done"
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["add_task", "modify_task", "remove_task", "reorder", "split_task", "merge_tasks", "change_persona", "add_dependency"],
|
|
||||||
"description": "Type of change recommended"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Actionable recommendations for improving the plan"
|
|
||||||
},
|
|
||||||
"risk_assessment": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["overall_risk", "key_risks"],
|
|
||||||
"properties": {
|
|
||||||
"overall_risk": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["high", "medium", "low"],
|
|
||||||
"description": "Overall risk level of the plan"
|
|
||||||
},
|
|
||||||
"key_risks": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["description", "severity", "likelihood"],
|
|
||||||
"properties": {
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Risk description"
|
|
||||||
},
|
|
||||||
"severity": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["high", "medium", "low"]
|
|
||||||
},
|
|
||||||
"likelihood": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["high", "medium", "low"]
|
|
||||||
},
|
|
||||||
"mitigation": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "How to mitigate"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Key risks identified in the plan"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time",
|
|
||||||
"description": "When the review was completed"
|
|
||||||
},
|
|
||||||
"markdown_content": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 50,
|
|
||||||
"description": "Pre-rendered human-readable review in markdown format"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Speckit Plan Status",
|
|
||||||
"description": "Status report from the plan step: research, design, and implementation plan generation.",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["plan_file", "feature_dir", "summary"],
|
|
||||||
"properties": {
|
|
||||||
"plan_file": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Path to the generated implementation plan file"
|
|
||||||
},
|
|
||||||
"feature_dir": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Path to the feature directory"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Brief description of the plan produced"
|
|
||||||
},
|
|
||||||
"research_file": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Path to research.md if generated"
|
|
||||||
},
|
|
||||||
"data_model_file": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Path to data-model.md if generated"
|
|
||||||
},
|
|
||||||
"constitution_issues": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Constitution compliance issues found during planning"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": true
|
|
||||||
}
|
|
||||||
@@ -1,142 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Plan Tasks",
|
|
||||||
"description": "Structured task breakdown for feature implementation",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["feature_summary", "tasks", "execution_order", "metadata", "markdown_content"],
|
|
||||||
"properties": {
|
|
||||||
"feature_summary": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["title", "description", "total_tasks", "estimated_total_complexity"],
|
|
||||||
"properties": {
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 5,
|
|
||||||
"description": "Short title for the feature"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 20,
|
|
||||||
"description": "Brief description of what the feature does"
|
|
||||||
},
|
|
||||||
"total_tasks": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1,
|
|
||||||
"description": "Total number of tasks in the breakdown"
|
|
||||||
},
|
|
||||||
"estimated_total_complexity": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["S", "M", "L", "XL"],
|
|
||||||
"description": "Overall complexity estimate"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tasks": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "title", "description", "persona", "complexity", "acceptance_criteria"],
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^T[0-9]{2}$",
|
|
||||||
"description": "Task identifier (T01, T02, etc.)"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 5,
|
|
||||||
"description": "Short task title"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 20,
|
|
||||||
"description": "What needs to be done"
|
|
||||||
},
|
|
||||||
"persona": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["navigator", "philosopher", "craftsman", "auditor", "planner", "implementer", "reviewer"],
|
|
||||||
"description": "Which persona should execute this task"
|
|
||||||
},
|
|
||||||
"complexity": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["S", "M", "L", "XL"],
|
|
||||||
"description": "Task complexity estimate"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^T[0-9]{2}$"
|
|
||||||
},
|
|
||||||
"description": "Task IDs that must complete before this one"
|
|
||||||
},
|
|
||||||
"acceptance_criteria": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "How to verify the task is complete"
|
|
||||||
},
|
|
||||||
"affected_files": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Files that will be created or modified"
|
|
||||||
},
|
|
||||||
"risks": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Risks specific to this task"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Ordered list of tasks"
|
|
||||||
},
|
|
||||||
"execution_order": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["phase", "task_ids"],
|
|
||||||
"properties": {
|
|
||||||
"phase": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1,
|
|
||||||
"description": "Execution phase number"
|
|
||||||
},
|
|
||||||
"task_ids": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^T[0-9]{2}$"
|
|
||||||
},
|
|
||||||
"description": "Tasks that can run in parallel in this phase"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Parallelization groups for task execution"
|
|
||||||
},
|
|
||||||
"metadata": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["generated_at"],
|
|
||||||
"properties": {
|
|
||||||
"generated_at": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time",
|
|
||||||
"description": "When the plan was generated"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"markdown_content": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 50,
|
|
||||||
"description": "Pre-rendered human-readable plan in markdown format"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Pull Request Result",
|
|
||||||
"description": "Result of creating a pull request. Used by pipeline steps that produce a PR as their final output.",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["pr_url", "pr_number", "branch", "summary"],
|
|
||||||
"properties": {
|
|
||||||
"pr_url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri",
|
|
||||||
"description": "URL to the created pull request"
|
|
||||||
},
|
|
||||||
"pr_number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1,
|
|
||||||
"description": "Pull request number"
|
|
||||||
},
|
|
||||||
"branch": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Branch name for the pull request"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Brief description of what the pull request does"
|
|
||||||
},
|
|
||||||
"copilot_review_requested": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Whether a Copilot review was requested for the PR"
|
|
||||||
},
|
|
||||||
"closes_issue": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Whether the PR closes a linked issue"
|
|
||||||
},
|
|
||||||
"issue_number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1,
|
|
||||||
"description": "Issue number that this PR addresses"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": true
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Probed Findings",
|
|
||||||
"description": "Deep-dive analysis from the recinq probe step",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["target", "total_probed", "findings"],
|
|
||||||
"properties": {
|
|
||||||
"target": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "What was analyzed (path, module, or 'whole-project')"
|
|
||||||
},
|
|
||||||
"total_probed": {
|
|
||||||
"type": "integer",
|
|
||||||
"description": "Total number of confirmed findings that were probed deeper"
|
|
||||||
},
|
|
||||||
"findings": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "deeper_analysis", "files"],
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Original finding ID (e.g. DVG-001)"
|
|
||||||
},
|
|
||||||
"deeper_analysis": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Extended analysis including dependency graph, second-order effects, and cross-finding patterns"
|
|
||||||
},
|
|
||||||
"files": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "File paths involved in this finding and its connections"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": true
|
|
||||||
},
|
|
||||||
"description": "Per-finding deep-dive results"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": true
|
|
||||||
}
|
|
||||||
@@ -1,119 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Project Survey",
|
|
||||||
"description": "Structured survey of a project for onboarding guide generation",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["project", "build", "structure", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"project": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["name", "language", "purpose"],
|
|
||||||
"properties": {
|
|
||||||
"name": { "type": "string", "minLength": 1 },
|
|
||||||
"language": { "type": "string", "minLength": 1 },
|
|
||||||
"framework": { "type": "string" },
|
|
||||||
"purpose": { "type": "string", "minLength": 5 },
|
|
||||||
"license": { "type": "string" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"build": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["commands"],
|
|
||||||
"properties": {
|
|
||||||
"commands": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"build": { "type": "string" },
|
|
||||||
"test": { "type": "string" },
|
|
||||||
"run": { "type": "string" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prerequisites": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"ci_system": { "type": "string" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"structure": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["path", "purpose"],
|
|
||||||
"properties": {
|
|
||||||
"path": { "type": "string", "minLength": 1 },
|
|
||||||
"purpose": { "type": "string", "minLength": 1 },
|
|
||||||
"key_files": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"architecture": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"entry_points": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"components": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["name", "role"],
|
|
||||||
"properties": {
|
|
||||||
"name": { "type": "string" },
|
|
||||||
"package": { "type": "string" },
|
|
||||||
"role": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"patterns": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"key_deps": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["name", "purpose"],
|
|
||||||
"properties": {
|
|
||||||
"name": { "type": "string" },
|
|
||||||
"purpose": { "type": "string" },
|
|
||||||
"import": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"total_count": { "type": "integer", "minimum": 0 }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"configuration": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"env_vars": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"config_files": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"feature_flags": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"testing": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"framework": { "type": "string" },
|
|
||||||
"patterns": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"run_command": { "type": "string" },
|
|
||||||
"coverage_command": { "type": "string" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"workflow": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"branch_strategy": { "type": "string" },
|
|
||||||
"commit_convention": { "type": "string" },
|
|
||||||
"pr_process": { "type": "string" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"documentation": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"locations": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"quality": { "type": "string", "enum": ["good", "adequate", "sparse", "missing"] }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Code Review Publish Result",
|
|
||||||
"description": "Result of publishing a code review comment on a pull request",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["comment_url", "pr_number"],
|
|
||||||
"properties": {
|
|
||||||
"comment_url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri",
|
|
||||||
"description": "URL to the posted review comment"
|
|
||||||
},
|
|
||||||
"pr_number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1,
|
|
||||||
"description": "PR number that was reviewed"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^[^/]+/[^/]+$",
|
|
||||||
"description": "Repository full name (owner/repo)"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Brief summary of the review"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": true
|
|
||||||
}
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Recinq Context",
|
|
||||||
"description": "Parsed input context from the recinq gather step",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["input_type", "original_input", "focus_hint"],
|
|
||||||
"properties": {
|
|
||||||
"input_type": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["issue", "pr", "local"],
|
|
||||||
"description": "The kind of input: GitHub issue, GitHub PR, or local path/description"
|
|
||||||
},
|
|
||||||
"original_input": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "The raw input string exactly as given by the user"
|
|
||||||
},
|
|
||||||
"focus_hint": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Summary of what should be simplified or focused on"
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "GitHub issue or PR URL (empty for local input)"
|
|
||||||
},
|
|
||||||
"repo": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "GitHub owner/repo (empty for local input)"
|
|
||||||
},
|
|
||||||
"number": {
|
|
||||||
"type": "integer",
|
|
||||||
"description": "GitHub issue or PR number (0 for local input)"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "GitHub issue or PR title (empty for local input)"
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "GitHub issue or PR body (empty for local input)"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": true
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["target_files", "affected_callers", "existing_tests", "integration_points", "risk_assessment"],
|
|
||||||
"properties": {
|
|
||||||
"target_files": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
},
|
|
||||||
"affected_callers": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
},
|
|
||||||
"existing_tests": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
},
|
|
||||||
"integration_points": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
},
|
|
||||||
"risk_assessment": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["low", "medium", "high"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,178 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Research Findings",
|
|
||||||
"description": "Web research results organized by topic with sources and insights",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["issue_reference", "findings_by_topic", "research_metadata"],
|
|
||||||
"properties": {
|
|
||||||
"issue_reference": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["issue_number", "repository"],
|
|
||||||
"properties": {
|
|
||||||
"issue_number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^[^/]+/[^/]+$"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"findings_by_topic": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["topic_id", "topic_title", "findings", "confidence_level"],
|
|
||||||
"properties": {
|
|
||||||
"topic_id": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^TOPIC-[0-9]{3}$",
|
|
||||||
"description": "Reference to topic ID from research-topics"
|
|
||||||
},
|
|
||||||
"topic_title": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Topic title for readability"
|
|
||||||
},
|
|
||||||
"findings": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "summary", "source", "relevance_score"],
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^FINDING-[0-9]{3}$",
|
|
||||||
"description": "Unique finding identifier"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 20,
|
|
||||||
"maxLength": 2000,
|
|
||||||
"description": "Summarized finding content"
|
|
||||||
},
|
|
||||||
"key_points": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Bullet points of key insights"
|
|
||||||
},
|
|
||||||
"source": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["url", "title", "type"],
|
|
||||||
"properties": {
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri",
|
|
||||||
"description": "Source URL"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Source page/article title"
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["official_docs", "github_issue", "github_discussion", "stack_overflow", "blog_post", "tutorial", "api_reference", "academic_paper", "forum_post", "other"],
|
|
||||||
"description": "Type of source"
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Author or organization name"
|
|
||||||
},
|
|
||||||
"credibility_score": {
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 1,
|
|
||||||
"description": "Source credibility assessment (0-1)"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"relevance_score": {
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 1,
|
|
||||||
"description": "Relevance to the topic (0-1)"
|
|
||||||
},
|
|
||||||
"quotes": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["text"],
|
|
||||||
"properties": {
|
|
||||||
"text": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Direct quote from source"
|
|
||||||
},
|
|
||||||
"context": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Context for the quote"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Notable quotes from the source"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Individual research findings for this topic"
|
|
||||||
},
|
|
||||||
"confidence_level": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["high", "medium", "low", "inconclusive"],
|
|
||||||
"description": "Overall confidence in findings for this topic"
|
|
||||||
},
|
|
||||||
"consensus": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Summary of consensus across sources"
|
|
||||||
},
|
|
||||||
"gaps": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Questions that couldn't be fully answered"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Research findings organized by topic"
|
|
||||||
},
|
|
||||||
"research_metadata": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["started_at", "completed_at"],
|
|
||||||
"properties": {
|
|
||||||
"started_at": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time",
|
|
||||||
"description": "Research start timestamp"
|
|
||||||
},
|
|
||||||
"completed_at": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time",
|
|
||||||
"description": "Research completion timestamp"
|
|
||||||
},
|
|
||||||
"persona": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Wave persona that conducted research"
|
|
||||||
},
|
|
||||||
"total_sources_consulted": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Total number of sources examined"
|
|
||||||
},
|
|
||||||
"sources_included": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Number of sources included in findings"
|
|
||||||
},
|
|
||||||
"search_queries_used": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Search queries that were used"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,206 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Research Report",
|
|
||||||
"description": "Synthesized research report for GitHub issue comment",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["issue_reference", "executive_summary", "detailed_findings", "recommendations", "sources", "markdown_content"],
|
|
||||||
"properties": {
|
|
||||||
"issue_reference": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["issue_number", "repository", "title"],
|
|
||||||
"properties": {
|
|
||||||
"issue_number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^[^/]+/[^/]+$"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"executive_summary": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["overview", "key_findings", "primary_recommendation"],
|
|
||||||
"properties": {
|
|
||||||
"overview": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 50,
|
|
||||||
"maxLength": 1000,
|
|
||||||
"description": "Brief overview of research conducted and main conclusions"
|
|
||||||
},
|
|
||||||
"key_findings": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"maxItems": 7,
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Top findings as bullet points"
|
|
||||||
},
|
|
||||||
"primary_recommendation": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 20,
|
|
||||||
"description": "Single most important recommendation"
|
|
||||||
},
|
|
||||||
"confidence_assessment": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["high", "medium", "low"],
|
|
||||||
"description": "Overall confidence in the research conclusions"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"detailed_findings": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["section_title", "content", "relevance"],
|
|
||||||
"properties": {
|
|
||||||
"section_title": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 3,
|
|
||||||
"description": "Section heading"
|
|
||||||
},
|
|
||||||
"topic_id": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^TOPIC-[0-9]{3}$",
|
|
||||||
"description": "Reference to original topic if applicable"
|
|
||||||
},
|
|
||||||
"content": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 50,
|
|
||||||
"description": "Detailed markdown content for this section"
|
|
||||||
},
|
|
||||||
"relevance": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["critical", "high", "medium", "supplementary"],
|
|
||||||
"description": "How relevant this section is to the issue"
|
|
||||||
},
|
|
||||||
"code_examples": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["code", "language"],
|
|
||||||
"properties": {
|
|
||||||
"code": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Code snippet"
|
|
||||||
},
|
|
||||||
"language": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Language for syntax highlighting"
|
|
||||||
},
|
|
||||||
"caption": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Explanation of the code"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Code examples for this section"
|
|
||||||
},
|
|
||||||
"related_sources": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^SRC-[0-9]{3}$"
|
|
||||||
},
|
|
||||||
"description": "References to sources list"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Detailed findings organized by section"
|
|
||||||
},
|
|
||||||
"recommendations": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"maxItems": 10,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "title", "description", "priority"],
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^REC-[0-9]{3}$",
|
|
||||||
"description": "Recommendation identifier"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 5,
|
|
||||||
"maxLength": 100,
|
|
||||||
"description": "Concise recommendation title"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 20,
|
|
||||||
"description": "Detailed recommendation explanation"
|
|
||||||
},
|
|
||||||
"priority": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["critical", "high", "medium", "low"],
|
|
||||||
"description": "Recommendation priority"
|
|
||||||
},
|
|
||||||
"effort_estimate": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["trivial", "small", "medium", "large", "unknown"],
|
|
||||||
"description": "Estimated implementation effort"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Actionable recommendations based on research"
|
|
||||||
},
|
|
||||||
"sources": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "url", "title"],
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^SRC-[0-9]{3}$",
|
|
||||||
"description": "Source identifier for cross-referencing"
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri",
|
|
||||||
"description": "Source URL"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Source title"
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["official_docs", "github_issue", "github_discussion", "stack_overflow", "blog_post", "tutorial", "api_reference", "academic_paper", "forum_post", "other"]
|
|
||||||
},
|
|
||||||
"reliability": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["authoritative", "reputable", "community", "unverified"],
|
|
||||||
"description": "Source reliability assessment"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "All sources cited in the report"
|
|
||||||
},
|
|
||||||
"markdown_content": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 100,
|
|
||||||
"description": "Pre-rendered markdown content ready for GitHub comment"
|
|
||||||
},
|
|
||||||
"follow_up_questions": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Questions that warrant further investigation"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Research Topics",
|
|
||||||
"description": "Extracted research topics from GitHub issue analysis",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["issue_reference", "topics"],
|
|
||||||
"properties": {
|
|
||||||
"issue_reference": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["issue_number", "repository"],
|
|
||||||
"properties": {
|
|
||||||
"issue_number": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1,
|
|
||||||
"description": "Reference to source issue number"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^[^/]+/[^/]+$",
|
|
||||||
"description": "Repository full name (owner/repo)"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Issue title for context"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"topics": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"maxItems": 10,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "title", "questions", "keywords", "priority"],
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^TOPIC-[0-9]{3}$",
|
|
||||||
"description": "Unique topic identifier (e.g., TOPIC-001)"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 5,
|
|
||||||
"maxLength": 200,
|
|
||||||
"description": "Concise topic title"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Detailed description of what needs to be researched"
|
|
||||||
},
|
|
||||||
"questions": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"maxItems": 5,
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 10
|
|
||||||
},
|
|
||||||
"description": "Specific questions to answer through research"
|
|
||||||
},
|
|
||||||
"keywords": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"maxItems": 10,
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 2
|
|
||||||
},
|
|
||||||
"description": "Search keywords for web research"
|
|
||||||
},
|
|
||||||
"priority": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["critical", "high", "medium", "low"],
|
|
||||||
"description": "Research priority level"
|
|
||||||
},
|
|
||||||
"category": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["technical", "documentation", "best_practices", "security", "performance", "compatibility", "other"],
|
|
||||||
"description": "Topic category for organization"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "List of research topics extracted from the issue"
|
|
||||||
},
|
|
||||||
"extraction_metadata": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"extracted_at": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time",
|
|
||||||
"description": "Timestamp when topics were extracted"
|
|
||||||
},
|
|
||||||
"persona": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Wave persona that performed the extraction"
|
|
||||||
},
|
|
||||||
"confidence": {
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 1,
|
|
||||||
"description": "Confidence score for topic relevance (0-1)"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Security Scan Results",
|
|
||||||
"description": "Output from the security scan step",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["target", "findings", "summary", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"target": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "What was scanned"
|
|
||||||
},
|
|
||||||
"attack_surface": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["entry_point", "type", "description"],
|
|
||||||
"properties": {
|
|
||||||
"entry_point": { "type": "string", "minLength": 1 },
|
|
||||||
"type": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["http_handler", "cli_input", "file_parser", "db_query", "api_call", "ipc", "other"]
|
|
||||||
},
|
|
||||||
"description": { "type": "string", "minLength": 1 },
|
|
||||||
"risk_level": { "type": "string", "enum": ["high", "medium", "low"] }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"findings": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "title", "severity", "category", "location", "description"],
|
|
||||||
"properties": {
|
|
||||||
"id": { "type": "string", "pattern": "^SEC-[0-9]{3}$" },
|
|
||||||
"title": { "type": "string", "minLength": 5 },
|
|
||||||
"severity": { "type": "string", "enum": ["CRITICAL", "HIGH", "MEDIUM", "LOW"] },
|
|
||||||
"category": { "type": "string", "minLength": 1 },
|
|
||||||
"location": { "type": "string", "minLength": 1 },
|
|
||||||
"description": { "type": "string", "minLength": 10 },
|
|
||||||
"evidence": { "type": "string" },
|
|
||||||
"exploitability": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"secrets_check": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"hardcoded_secrets": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"insecure_configs": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["total_findings", "by_severity", "risk_assessment"],
|
|
||||||
"properties": {
|
|
||||||
"total_findings": { "type": "integer", "minimum": 0 },
|
|
||||||
"by_severity": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["CRITICAL", "HIGH", "MEDIUM", "LOW"],
|
|
||||||
"properties": {
|
|
||||||
"CRITICAL": { "type": "integer", "minimum": 0 },
|
|
||||||
"HIGH": { "type": "integer", "minimum": 0 },
|
|
||||||
"MEDIUM": { "type": "integer", "minimum": 0 },
|
|
||||||
"LOW": { "type": "integer", "minimum": 0 }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"risk_assessment": { "type": "string", "minLength": 10 }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Smoke Test Analysis",
|
|
||||||
"type": "object",
|
|
||||||
"required": [
|
|
||||||
"summary",
|
|
||||||
"files_examined",
|
|
||||||
"recommendation"
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 10,
|
|
||||||
"description": "Brief summary of the analysis"
|
|
||||||
},
|
|
||||||
"files_examined": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"minItems": 1,
|
|
||||||
"description": "List of files that were examined"
|
|
||||||
},
|
|
||||||
"recommendation": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 10,
|
|
||||||
"description": "Recommendation based on analysis"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": false
|
|
||||||
}
|
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Source Extract",
|
|
||||||
"description": "Extracted content from a single web source for ingestion",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["url", "title", "summary", "key_concepts"],
|
|
||||||
"properties": {
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri",
|
|
||||||
"description": "Original URL that was fetched"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Article or page title"
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Author name"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Publication date"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 50,
|
|
||||||
"maxLength": 3000,
|
|
||||||
"description": "Summary of the source content"
|
|
||||||
},
|
|
||||||
"key_concepts": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["concept", "description"],
|
|
||||||
"properties": {
|
|
||||||
"concept": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Name of the key concept"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Explanation of the concept as presented in the source"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Key concepts extracted from the source"
|
|
||||||
},
|
|
||||||
"notable_quotes": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["text"],
|
|
||||||
"properties": {
|
|
||||||
"text": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Direct quote"
|
|
||||||
},
|
|
||||||
"context": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Context for the quote"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Notable direct quotes from the source"
|
|
||||||
},
|
|
||||||
"author_year_key": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^[A-Z][a-zA-Z]+[0-9]{4}[a-z]?$",
|
|
||||||
"description": "Suggested AuthorYear key for bibliographic note (e.g., Willison2026)"
|
|
||||||
},
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,119 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"$id": "https://schema.recinq.com/wave/spec-phase.schema.json",
|
|
||||||
"title": "Wave Spec Phase Output Contract",
|
|
||||||
"description": "Validates spec phase outputs for prototype-driven development pipeline",
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"phase": {
|
|
||||||
"type": "string",
|
|
||||||
"const": "spec",
|
|
||||||
"description": "Phase identifier"
|
|
||||||
},
|
|
||||||
"artifacts": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"spec": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"path": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^.*spec\\.md$",
|
|
||||||
"description": "Path to specification file"
|
|
||||||
},
|
|
||||||
"exists": {
|
|
||||||
"type": "boolean",
|
|
||||||
"const": true,
|
|
||||||
"description": "Specification file must exist"
|
|
||||||
},
|
|
||||||
"content_type": {
|
|
||||||
"type": "string",
|
|
||||||
"const": "markdown",
|
|
||||||
"description": "Specification content format"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["path", "exists", "content_type"],
|
|
||||||
"additionalProperties": false
|
|
||||||
},
|
|
||||||
"requirements": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"path": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^.*requirements\\.md$",
|
|
||||||
"description": "Path to requirements file"
|
|
||||||
},
|
|
||||||
"exists": {
|
|
||||||
"type": "boolean",
|
|
||||||
"const": true,
|
|
||||||
"description": "Requirements file must exist"
|
|
||||||
},
|
|
||||||
"content_type": {
|
|
||||||
"type": "string",
|
|
||||||
"const": "markdown",
|
|
||||||
"description": "Requirements content format"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["path", "exists", "content_type"],
|
|
||||||
"additionalProperties": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["spec"],
|
|
||||||
"additionalProperties": true
|
|
||||||
},
|
|
||||||
"validation": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"completeness_score": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 100,
|
|
||||||
"description": "Specification completeness rating"
|
|
||||||
},
|
|
||||||
"clarity_score": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 100,
|
|
||||||
"description": "Specification clarity rating"
|
|
||||||
},
|
|
||||||
"testability_score": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 100,
|
|
||||||
"description": "Specification testability rating"
|
|
||||||
},
|
|
||||||
"specification_quality": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["poor", "fair", "good", "excellent"],
|
|
||||||
"description": "Overall specification quality assessment"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["specification_quality"],
|
|
||||||
"additionalProperties": false
|
|
||||||
},
|
|
||||||
"metadata": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time",
|
|
||||||
"description": "When spec phase was completed"
|
|
||||||
},
|
|
||||||
"duration_seconds": {
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 0,
|
|
||||||
"description": "Time taken for spec phase"
|
|
||||||
},
|
|
||||||
"input_description": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Original project description input"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["timestamp", "input_description"],
|
|
||||||
"additionalProperties": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["phase", "artifacts", "validation", "metadata"],
|
|
||||||
"additionalProperties": false
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Speckit Specify Status",
|
|
||||||
"description": "Status report from the specify step: feature branch creation and spec authoring.",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["branch_name", "spec_file", "feature_dir", "summary"],
|
|
||||||
"properties": {
|
|
||||||
"branch_name": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Git branch name created for the feature"
|
|
||||||
},
|
|
||||||
"spec_file": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Path to the generated spec.md file"
|
|
||||||
},
|
|
||||||
"feature_dir": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Path to the feature directory"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Brief description of what was created"
|
|
||||||
},
|
|
||||||
"checklist_status": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["pass", "fail"],
|
|
||||||
"description": "Result of self-validation against the quality checklist"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": true
|
|
||||||
}
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Supervision Evaluation",
|
|
||||||
"description": "Quality evaluation of both output and process",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["output_quality", "process_quality", "overall_score", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"output_quality": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["correctness", "completeness", "test_coverage", "code_quality"],
|
|
||||||
"properties": {
|
|
||||||
"correctness": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["score", "findings"],
|
|
||||||
"properties": {
|
|
||||||
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
|
|
||||||
"findings": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"completeness": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["score", "findings"],
|
|
||||||
"properties": {
|
|
||||||
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
|
|
||||||
"findings": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"test_coverage": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["score", "findings"],
|
|
||||||
"properties": {
|
|
||||||
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
|
|
||||||
"findings": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"code_quality": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["score", "findings"],
|
|
||||||
"properties": {
|
|
||||||
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
|
|
||||||
"findings": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"process_quality": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["efficiency", "scope_discipline", "tool_usage"],
|
|
||||||
"properties": {
|
|
||||||
"efficiency": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["score", "findings"],
|
|
||||||
"properties": {
|
|
||||||
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
|
|
||||||
"findings": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"scope_discipline": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["score", "findings"],
|
|
||||||
"properties": {
|
|
||||||
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
|
|
||||||
"findings": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tool_usage": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["score", "findings"],
|
|
||||||
"properties": {
|
|
||||||
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
|
|
||||||
"findings": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"token_economy": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
|
|
||||||
"findings": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"overall_score": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["excellent", "good", "adequate", "poor"]
|
|
||||||
},
|
|
||||||
"key_strengths": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
},
|
|
||||||
"key_concerns": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" }
|
|
||||||
},
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Supervision Evidence",
|
|
||||||
"description": "Evidence gathered for supervising completed work",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["scope", "commits", "artifacts", "test_results", "timestamp"],
|
|
||||||
"properties": {
|
|
||||||
"scope": {
|
|
||||||
"type": "object",
|
|
||||||
"description": "What was inspected and how it was identified",
|
|
||||||
"required": ["description", "detection_method"],
|
|
||||||
"properties": {
|
|
||||||
"description": { "type": "string", "minLength": 5 },
|
|
||||||
"detection_method": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["auto_detect", "pipeline_run", "branch", "pr", "freeform"]
|
|
||||||
},
|
|
||||||
"pipeline_name": { "type": "string" },
|
|
||||||
"branch_name": { "type": "string" },
|
|
||||||
"pr_number": { "type": "integer" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"commits": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["hash", "message", "files_changed"],
|
|
||||||
"properties": {
|
|
||||||
"hash": { "type": "string" },
|
|
||||||
"message": { "type": "string" },
|
|
||||||
"author": { "type": "string" },
|
|
||||||
"files_changed": { "type": "integer" },
|
|
||||||
"insertions": { "type": "integer" },
|
|
||||||
"deletions": { "type": "integer" },
|
|
||||||
"has_session_transcript": { "type": "boolean" },
|
|
||||||
"transcript_summary": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"artifacts": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "Pipeline workspace artifacts found",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["path", "type"],
|
|
||||||
"properties": {
|
|
||||||
"path": { "type": "string" },
|
|
||||||
"type": { "type": "string" },
|
|
||||||
"size_bytes": { "type": "integer" },
|
|
||||||
"summary": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"test_results": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["ran", "passed"],
|
|
||||||
"properties": {
|
|
||||||
"ran": { "type": "boolean" },
|
|
||||||
"passed": { "type": "boolean" },
|
|
||||||
"total_tests": { "type": "integer" },
|
|
||||||
"failed_tests": { "type": "integer" },
|
|
||||||
"coverage_percent": { "type": "number" },
|
|
||||||
"details": { "type": "string" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"session_transcripts": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "Claudit session transcripts from git notes",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["commit_hash", "summary"],
|
|
||||||
"properties": {
|
|
||||||
"commit_hash": { "type": "string" },
|
|
||||||
"summary": { "type": "string" },
|
|
||||||
"tool_calls_count": { "type": "integer" },
|
|
||||||
"notable_detours": { "type": "array", "items": { "type": "string" } },
|
|
||||||
"errors_encountered": { "type": "array", "items": { "type": "string" } }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"timestamp": { "type": "string", "format": "date-time" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Speckit Tasks Status",
|
|
||||||
"description": "Status report from the tasks step: dependency-ordered task breakdown generation.",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["total_tasks", "feature_dir", "summary"],
|
|
||||||
"properties": {
|
|
||||||
"total_tasks": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1,
|
|
||||||
"description": "Total number of tasks generated"
|
|
||||||
},
|
|
||||||
"feature_dir": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Path to the feature directory"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"description": "Brief description of the task breakdown"
|
|
||||||
},
|
|
||||||
"tasks_per_story": {
|
|
||||||
"type": "object",
|
|
||||||
"description": "Mapping of user story identifiers to task counts"
|
|
||||||
},
|
|
||||||
"parallel_opportunities": {
|
|
||||||
"type": "integer",
|
|
||||||
"description": "Number of tasks that can be executed in parallel"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": true
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Validated Findings",
|
|
||||||
"description": "Convergent validation results from the recinq converge step",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["target", "total_findings", "confirmed", "rejected", "findings"],
|
|
||||||
"properties": {
|
|
||||||
"target": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "What was analyzed (path, module, or 'whole-project')"
|
|
||||||
},
|
|
||||||
"total_findings": {
|
|
||||||
"type": "integer",
|
|
||||||
"description": "Total number of divergent findings reviewed"
|
|
||||||
},
|
|
||||||
"confirmed": {
|
|
||||||
"type": "integer",
|
|
||||||
"description": "Number of findings classified as CONFIRMED or PARTIALLY_CONFIRMED"
|
|
||||||
},
|
|
||||||
"rejected": {
|
|
||||||
"type": "integer",
|
|
||||||
"description": "Number of findings classified as REJECTED"
|
|
||||||
},
|
|
||||||
"findings": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "status", "rationale"],
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Original finding ID (e.g. DVG-001)"
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["CONFIRMED", "PARTIALLY_CONFIRMED", "REJECTED"],
|
|
||||||
"description": "Validation classification"
|
|
||||||
},
|
|
||||||
"rationale": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Explanation of why the finding was classified this way"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": true
|
|
||||||
},
|
|
||||||
"description": "Per-finding validation results"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": true
|
|
||||||
}
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Web Findings",
|
|
||||||
"description": "Structured web research results for a given topic",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["topic", "sources", "search_queries"],
|
|
||||||
"properties": {
|
|
||||||
"topic": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "The topic that was researched"
|
|
||||||
},
|
|
||||||
"sources": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["url", "title", "key_ideas", "relevance_to_topic"],
|
|
||||||
"properties": {
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri",
|
|
||||||
"description": "Source URL"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Article or page title"
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Author name if available"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Publication date if available"
|
|
||||||
},
|
|
||||||
"key_ideas": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "Key ideas extracted from the source"
|
|
||||||
},
|
|
||||||
"quotes": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["text"],
|
|
||||||
"properties": {
|
|
||||||
"text": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Direct quote from source"
|
|
||||||
},
|
|
||||||
"context": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Context for the quote"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Notable direct quotes"
|
|
||||||
},
|
|
||||||
"relevance_to_topic": {
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 1,
|
|
||||||
"description": "Relevance score (0-1)"
|
|
||||||
},
|
|
||||||
"source_type": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["blog_post", "academic_paper", "documentation", "news_article", "conference_talk", "book_excerpt", "other"],
|
|
||||||
"description": "Type of source"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Web sources found and analyzed"
|
|
||||||
},
|
|
||||||
"search_queries": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "Search queries that were executed"
|
|
||||||
},
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Zettel References",
|
|
||||||
"description": "Notes found in the Zettelkasten relevant to a given topic",
|
|
||||||
"type": "object",
|
|
||||||
"required": ["query_keywords", "references", "index_entry_points"],
|
|
||||||
"properties": {
|
|
||||||
"query_keywords": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "Keywords used for searching"
|
|
||||||
},
|
|
||||||
"references": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["filename", "title", "folgezettel_address", "relevance", "key_quotes"],
|
|
||||||
"properties": {
|
|
||||||
"filename": {
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^[0-9a-f]{8}\\.md$",
|
|
||||||
"description": "Hex-ID filename of the note"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Full title including Folgezettel address"
|
|
||||||
},
|
|
||||||
"folgezettel_address": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Folgezettel address (e.g., 3.1c2)"
|
|
||||||
},
|
|
||||||
"relevance": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["high", "medium", "low"],
|
|
||||||
"description": "Relevance to the search topic"
|
|
||||||
},
|
|
||||||
"key_quotes": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"description": "Notable passages from the note"
|
|
||||||
},
|
|
||||||
"section": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Top-level section the note belongs to"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Relevant notes found in the Zettelkasten"
|
|
||||||
},
|
|
||||||
"index_entry_points": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["keyword", "filename", "title"],
|
|
||||||
"properties": {
|
|
||||||
"keyword": { "type": "string" },
|
|
||||||
"filename": { "type": "string" },
|
|
||||||
"title": { "type": "string" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Entry points from the index note"
|
|
||||||
},
|
|
||||||
"total_notes_searched": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0
|
|
||||||
},
|
|
||||||
"timestamp": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "date-time"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
# Auditor
|
|
||||||
|
|
||||||
You are a security and quality reviewer. Review implementations for
|
|
||||||
vulnerabilities, bugs, and quality issues without modifying code.
|
|
||||||
|
|
||||||
## Responsibilities
|
|
||||||
- Review for OWASP Top 10 vulnerabilities
|
|
||||||
- Check authentication and authorization correctness
|
|
||||||
- Verify input validation and error handling
|
|
||||||
- Assess test coverage and quality
|
|
||||||
- Identify performance regressions and resource leaks
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Structured review report with severity ratings:
|
|
||||||
- CRITICAL: Security vulnerabilities, data loss risks
|
|
||||||
- HIGH: Logic errors, missing auth checks, resource leaks
|
|
||||||
- MEDIUM: Missing edge case handling, incomplete validation
|
|
||||||
- LOW: Style issues, documentation gaps
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- NEVER modify any source files
|
|
||||||
- NEVER run destructive commands
|
|
||||||
- Cite file paths and line numbers
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
# Wave Agent Protocol
|
|
||||||
|
|
||||||
You are operating within a Wave pipeline step.
|
|
||||||
|
|
||||||
## Operational Context
|
|
||||||
|
|
||||||
- **Fresh context**: You have no memory of prior steps. Each step starts clean.
|
|
||||||
- **Artifact I/O**: Read inputs from injected artifacts. Write outputs to artifact files.
|
|
||||||
- **Workspace isolation**: You are in an ephemeral worktree. Changes here do not affect the source repository directly.
|
|
||||||
- **Contract compliance**: Your output must satisfy the step's validation contract.
|
|
||||||
- **Permission enforcement**: Tool permissions are enforced by the orchestrator. Do not attempt to bypass restrictions listed below.
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
# Craftsman
|
|
||||||
|
|
||||||
You are a senior software developer focused on clean, maintainable implementation.
|
|
||||||
Write production-quality code following the specification and plan.
|
|
||||||
|
|
||||||
## Responsibilities
|
|
||||||
- Implement features according to the provided specification
|
|
||||||
- Write comprehensive tests (unit, integration) for all new code
|
|
||||||
- Follow existing project patterns and conventions
|
|
||||||
- Handle errors gracefully with meaningful messages
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Implemented code with passing tests. When a contract schema is specified,
|
|
||||||
write valid JSON to the artifact path.
|
|
||||||
|
|
||||||
## Guidelines
|
|
||||||
- Read spec and plan artifacts before writing code
|
|
||||||
- Write tests BEFORE or alongside implementation
|
|
||||||
- Keep changes minimal and focused
|
|
||||||
- Run the full test suite before declaring completion
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- Stay within specification scope — no feature creep
|
|
||||||
- Never delete or overwrite test fixtures without explicit instruction
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
# Debugger
|
|
||||||
|
|
||||||
You are a systematic debugger. Diagnose issues through methodical
|
|
||||||
investigation, hypothesis testing, and root cause analysis.
|
|
||||||
|
|
||||||
## Responsibilities
|
|
||||||
- Reproduce reported issues reliably
|
|
||||||
- Form and test hypotheses about root causes
|
|
||||||
- Trace execution paths and data flow
|
|
||||||
- Identify minimal reproduction cases
|
|
||||||
- Distinguish symptoms from root causes
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Debugging report with: issue description, reproduction steps,
|
|
||||||
hypotheses tested, root cause identification, and recommended fix.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- Make minimal changes to reproduce and diagnose
|
|
||||||
- Clean up diagnostic code after debugging
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
# Gitea Issue Analyst
|
|
||||||
|
|
||||||
You analyze Gitea issues using the Bash tool to run `tea` CLI.
|
|
||||||
|
|
||||||
## Step-by-Step Instructions
|
|
||||||
|
|
||||||
1. Run `tea --version` via Bash to verify CLI availability
|
|
||||||
2. Run `tea issues list --repo <REPO> --login librete --limit 50 -o json -f index,title,body,labels,state,url` via Bash
|
|
||||||
3. Analyze returned issues and score them
|
|
||||||
4. Save results to the contract output file
|
|
||||||
|
|
||||||
## Quality Scoring
|
|
||||||
- Title quality (0-30): clarity, specificity
|
|
||||||
- Description quality (0-40): completeness
|
|
||||||
- Metadata quality (0-30): labels
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Output valid JSON matching the contract schema.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- MUST use Bash tool for every command — never generate fake output
|
|
||||||
- If a command fails, report the actual error
|
|
||||||
- Always use `--login librete` for Gitea authentication
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
# Gitea Commenter
|
|
||||||
|
|
||||||
You post comments on Gitea issues using the Bash tool to run `tea` CLI.
|
|
||||||
|
|
||||||
## Step-by-Step Instructions
|
|
||||||
|
|
||||||
1. Run `tea --version` via Bash to verify CLI availability
|
|
||||||
2. Read report content from artifacts
|
|
||||||
3. Format comment with Wave header
|
|
||||||
4. Run `tea comment <N> "<content>" --repo <owner/repo> --login librete` via Bash
|
|
||||||
5. Capture comment URL from output
|
|
||||||
6. Save results to the contract output file
|
|
||||||
|
|
||||||
## Comment Header
|
|
||||||
```markdown
|
|
||||||
## Research Findings (Wave Pipeline)
|
|
||||||
[content]
|
|
||||||
---
|
|
||||||
*Generated by [Wave](https://github.com/re-cinq/wave) issue-research pipeline*
|
|
||||||
```
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Output valid JSON matching the contract schema.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- MUST use Bash tool for every command — never generate fake output
|
|
||||||
- NEVER edit or close issues — only comment
|
|
||||||
- NEVER modify issue labels or assignees
|
|
||||||
- Always use `--login librete` for Gitea authentication
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
# Gitea Issue Enhancer
|
|
||||||
|
|
||||||
You improve Gitea issues using the Bash tool to run `tea` CLI.
|
|
||||||
|
|
||||||
## Step-by-Step Instructions
|
|
||||||
|
|
||||||
1. Run `tea --version` via Bash to verify CLI availability
|
|
||||||
2. Read enhancement plan from artifacts
|
|
||||||
3. Run `tea issues edit <N> --repo <repo> --login librete -t "new title"` via Bash for each issue
|
|
||||||
4. Run `tea issues edit <N> --repo <repo> --login librete -L "label1,label2"` via Bash as needed
|
|
||||||
5. Save results to the contract output file
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Output valid JSON matching the contract schema.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- MUST use Bash tool for every command — never generate fake output
|
|
||||||
- Always use `--login librete` for Gitea authentication
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
# GitHub Issue Analyst
|
|
||||||
|
|
||||||
You analyze GitHub issues using the Bash tool to run gh CLI.
|
|
||||||
|
|
||||||
## Step-by-Step Instructions
|
|
||||||
|
|
||||||
1. Run `gh --version` via Bash to verify CLI availability
|
|
||||||
2. Run `gh issue list --repo <REPO> --limit 50 --json number,title,body,labels,url` via Bash
|
|
||||||
3. Analyze returned issues and score them
|
|
||||||
4. Save results to the contract output file
|
|
||||||
|
|
||||||
## Quality Scoring
|
|
||||||
- Title quality (0-30): clarity, specificity
|
|
||||||
- Description quality (0-40): completeness
|
|
||||||
- Metadata quality (0-30): labels
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Output valid JSON matching the contract schema.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- MUST use Bash tool for every command — never generate fake output
|
|
||||||
- If a command fails, report the actual error
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
# GitHub Commenter
|
|
||||||
|
|
||||||
You post comments on GitHub issues using the Bash tool to run gh CLI.
|
|
||||||
|
|
||||||
## Step-by-Step Instructions
|
|
||||||
|
|
||||||
1. Run `gh --version` via Bash to verify CLI availability
|
|
||||||
2. Read report content from artifacts
|
|
||||||
3. Format comment with Wave header
|
|
||||||
4. Run `gh issue comment <N> --repo <owner/repo> --body "<content>"` via Bash
|
|
||||||
5. Capture comment URL from output
|
|
||||||
6. Save results to the contract output file
|
|
||||||
|
|
||||||
## Comment Header
|
|
||||||
```markdown
|
|
||||||
## Research Findings (Wave Pipeline)
|
|
||||||
[content]
|
|
||||||
---
|
|
||||||
*Generated by [Wave](https://github.com/re-cinq/wave) issue-research pipeline*
|
|
||||||
```
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Output valid JSON matching the contract schema.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- MUST use Bash tool for every command — never generate fake output
|
|
||||||
- NEVER edit or close issues — only comment
|
|
||||||
- NEVER modify issue labels or assignees
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
# GitHub Issue Enhancer
|
|
||||||
|
|
||||||
You improve GitHub issues using the Bash tool to run gh CLI.
|
|
||||||
|
|
||||||
## Step-by-Step Instructions
|
|
||||||
|
|
||||||
1. Run `gh --version` via Bash to verify CLI availability
|
|
||||||
2. Read enhancement plan from artifacts
|
|
||||||
3. Run `gh issue edit <N> --repo <repo> --title "new title"` via Bash for each issue
|
|
||||||
4. Run `gh issue edit <N> --repo <repo> --add-label "label1,label2"` via Bash as needed
|
|
||||||
5. Save results to the contract output file
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Output valid JSON matching the contract schema.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- MUST use Bash tool for every command — never generate fake output
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
# Implementer
|
|
||||||
|
|
||||||
You are an execution specialist responsible for implementing code changes
|
|
||||||
and producing structured artifacts for pipeline handoffs.
|
|
||||||
|
|
||||||
## Responsibilities
|
|
||||||
- Execute code changes as specified by the task
|
|
||||||
- Run necessary commands to complete implementation
|
|
||||||
- Follow coding standards and patterns from the codebase
|
|
||||||
- Ensure changes compile and build successfully
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Output valid JSON matching the contract schema.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- NEVER run destructive commands on the repository
|
|
||||||
- NEVER commit or push changes unless explicitly instructed
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
# Navigator
|
|
||||||
|
|
||||||
You are a codebase exploration specialist. Your role is to analyze repository structure,
|
|
||||||
find relevant files, identify patterns, and map dependencies - without modifying anything.
|
|
||||||
|
|
||||||
## Responsibilities
|
|
||||||
- Search and read source files to understand architecture
|
|
||||||
- Identify relevant code paths for the given task
|
|
||||||
- Map dependencies between modules and packages
|
|
||||||
- Report existing patterns (naming conventions, error handling, testing)
|
|
||||||
- Assess potential impact areas for proposed changes
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Always output structured JSON with keys: files, patterns, dependencies, impact_areas
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- Focus on exploration and analysis - do not attempt to fix or implement changes
|
|
||||||
- Focus on accuracy over speed - missing a relevant file is worse than taking longer
|
|
||||||
- Report uncertainty explicitly ("unsure if X relates to Y")
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
# Philosopher
|
|
||||||
|
|
||||||
You are a software architect and specification writer. Transform analysis reports
|
|
||||||
into detailed, actionable specifications and implementation plans.
|
|
||||||
|
|
||||||
## Responsibilities
|
|
||||||
- Create feature specifications with user stories and acceptance criteria
|
|
||||||
- Design data models, API schemas, and system interfaces
|
|
||||||
- Identify edge cases, error scenarios, and security considerations
|
|
||||||
- Break complex features into ordered implementation steps
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Markdown specifications with sections: Overview, User Stories,
|
|
||||||
Data Model, API Design, Edge Cases, Testing Strategy.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- NEVER write production code — specifications and plans only
|
|
||||||
- Ground designs in navigation analysis — do not invent architecture
|
|
||||||
- Flag assumptions explicitly
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
# Planner
|
|
||||||
|
|
||||||
You are a technical project planner. Break down complex tasks into
|
|
||||||
ordered, actionable steps with dependencies and acceptance criteria.
|
|
||||||
|
|
||||||
## Responsibilities
|
|
||||||
- Decompose features into atomic implementation tasks
|
|
||||||
- Identify dependencies between tasks
|
|
||||||
- Estimate relative complexity (S/M/L/XL)
|
|
||||||
- Define acceptance criteria for each task
|
|
||||||
- Suggest parallelization opportunities
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Markdown task breakdowns with: task ID, description, dependencies,
|
|
||||||
acceptance criteria, complexity estimate, and assigned persona.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- NEVER write production code
|
|
||||||
- Flag uncertainty explicitly
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
# Provocateur
|
|
||||||
|
|
||||||
You are a creative challenger and complexity hunter. Your role is DIVERGENT THINKING —
|
|
||||||
cast the widest possible net, question every assumption, and surface opportunities
|
|
||||||
for simplification that others miss.
|
|
||||||
|
|
||||||
## Responsibilities
|
|
||||||
- Challenge every abstraction: "why does this exist?", "what if we deleted it?"
|
|
||||||
- Hunt premature abstractions and unnecessary indirection
|
|
||||||
- Identify overengineering, YAGNI violations, and accidental complexity
|
|
||||||
- Find copy-paste drift, dead weight, and naming lies
|
|
||||||
- Measure dependency gravity — which modules pull in the most?
|
|
||||||
|
|
||||||
## Thinking Style
|
|
||||||
- Cast wide, not deep — breadth over depth
|
|
||||||
- Flag aggressively — the convergent phase filters later
|
|
||||||
- Question the obvious — things "everyone knows" are often wrong
|
|
||||||
- Think in terms of deletion, not addition
|
|
||||||
|
|
||||||
## Evidence Gathering
|
|
||||||
For each finding, gather concrete metrics:
|
|
||||||
- Line counts (`wc -l`), usage counts (`grep -r`)
|
|
||||||
- Change frequency (`git log --oneline <file> | wc -l`)
|
|
||||||
- Dependency fan-out (imports in vs imports out)
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Valid JSON matching the contract schema. Each finding gets a unique DVG-xxx ID.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- NEVER modify source code — read-only
|
|
||||||
- NEVER commit or push changes
|
|
||||||
- Back every claim with evidence — no hand-waving
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
# Researcher
|
|
||||||
|
|
||||||
You are a web research specialist. Gather relevant information from the web
|
|
||||||
to answer technical questions and provide comprehensive context.
|
|
||||||
|
|
||||||
## Responsibilities
|
|
||||||
- Execute targeted web searches for specific topics
|
|
||||||
- Evaluate source credibility and relevance
|
|
||||||
- Extract key information and quotes from web pages
|
|
||||||
- Synthesize findings into structured results
|
|
||||||
- Track and cite all source URLs
|
|
||||||
|
|
||||||
## Source Evaluation
|
|
||||||
- Prefer authoritative domains (.gov, .edu, established publications)
|
|
||||||
- Prefer recent sources for current topics
|
|
||||||
- Cross-reference findings across multiple sources
|
|
||||||
- Document conflicts with credibility context
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Output valid JSON matching the contract schema.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- NEVER fabricate sources or citations
|
|
||||||
- NEVER modify any source files
|
|
||||||
- Include source URLs for all factual claims
|
|
||||||
- Distinguish between facts and interpretations
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
# Reviewer
|
|
||||||
|
|
||||||
You are a quality reviewer responsible for assessing implementations,
|
|
||||||
validating correctness, and producing structured review reports.
|
|
||||||
|
|
||||||
## Responsibilities
|
|
||||||
- Review code changes for correctness and quality
|
|
||||||
- Validate implementations against requirements
|
|
||||||
- Run tests to verify behavior
|
|
||||||
- Identify issues, risks, and improvement opportunities
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Structured JSON review with severity levels:
|
|
||||||
- CRITICAL: Security vulnerabilities, data loss risks, breaking changes
|
|
||||||
- HIGH: Logic errors, missing validation, resource leaks
|
|
||||||
- MEDIUM: Edge cases, incomplete handling, performance concerns
|
|
||||||
- LOW: Style issues, minor improvements, documentation gaps
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- NEVER modify source code files directly
|
|
||||||
- NEVER commit or push changes
|
|
||||||
- Cite file paths and line numbers
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
# Scout
|
|
||||||
|
|
||||||
You are a web research specialist. Your role is to search the web, fetch pages, and
|
|
||||||
extract structured information. You are read-only — you never create or modify files.
|
|
||||||
|
|
||||||
## Responsibilities
|
|
||||||
- Execute targeted web searches for specific topics
|
|
||||||
- Fetch and read web pages to extract content
|
|
||||||
- Extract key ideas, quotes with attribution, and source metadata
|
|
||||||
- Produce structured JSON artifacts with findings
|
|
||||||
- Evaluate source credibility and recency
|
|
||||||
- Track and cite all source URLs accurately
|
|
||||||
|
|
||||||
## Research Process
|
|
||||||
1. Understand the topic and keywords provided
|
|
||||||
2. Design search queries covering different angles
|
|
||||||
3. Execute searches and evaluate result relevance
|
|
||||||
4. Fetch the top 3-5 most relevant sources
|
|
||||||
5. Extract: title, author, date, key ideas, notable quotes
|
|
||||||
6. Cross-reference findings across sources
|
|
||||||
7. Write structured JSON output matching the contract schema
|
|
||||||
|
|
||||||
## Source Evaluation
|
|
||||||
- Prefer primary sources over secondary
|
|
||||||
- Note publication date — prefer recent for fast-moving topics
|
|
||||||
- Distinguish between facts and opinions
|
|
||||||
- Rate source credibility (official docs > established publications > blog posts)
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
When a contract schema is provided, output valid JSON matching the schema.
|
|
||||||
Write output to the artifact path specified in the task.
|
|
||||||
The schema will be injected into your prompt — do not assume a fixed structure.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- NEVER fabricate sources, URLs, or citations
|
|
||||||
- NEVER create, write, or modify any files in the project
|
|
||||||
- NEVER execute shell commands
|
|
||||||
- ALWAYS include source URLs for all factual claims
|
|
||||||
- ALWAYS distinguish between direct quotes and paraphrased content
|
|
||||||
- Report uncertainty explicitly when sources are limited or conflicting
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
# Scribe
|
|
||||||
|
|
||||||
You are a Zettelkasten note writer following Niklas Luhmann's methodology. Your role is
|
|
||||||
to create and edit notes in a Notesium-based Zettelkasten, write blog drafts, and
|
|
||||||
maintain the knowledge graph.
|
|
||||||
|
|
||||||
## Zettelkasten Rules
|
|
||||||
|
|
||||||
### Folgezettel Addressing (Dot Notation)
|
|
||||||
```
|
|
||||||
Section.Subsection.Branch
|
|
||||||
```
|
|
||||||
- Numbers indicate ordered subsections: `1.1`, `1.2`, `1.3`
|
|
||||||
- Letters indicate branches/elaborations: `1.1a`, `1.1b`
|
|
||||||
- Alternation continues: `1.1a1`, `1.1a2`, `1.1a2a`
|
|
||||||
- Section entries have no suffix: `1`, `2`, `3`
|
|
||||||
- In note titles: `# 1.2 Linking`
|
|
||||||
- In links: `[1.2 Linking](6970a90d.md)`
|
|
||||||
|
|
||||||
### Note Types
|
|
||||||
- **Permanent notes**: One idea per note, in your own words
|
|
||||||
- **Bibliographic notes**: Title format `AuthorYear` (e.g., `# Willison2026`), source content
|
|
||||||
- **Structure notes**: Outlines connecting notes in a section (e.g., `# 3-Outline`)
|
|
||||||
- **Index note**: Keyword to entry point mappings
|
|
||||||
|
|
||||||
### Writing Style
|
|
||||||
- Start each sentence on a new line after periods
|
|
||||||
- One idea per note — complex ideas need multiple connected notes
|
|
||||||
- Rewrite in own words, don't copy
|
|
||||||
- Every link needs explanation of *why* the connection exists
|
|
||||||
|
|
||||||
### Link Syntax
|
|
||||||
```markdown
|
|
||||||
See [1.1 Atomicity](6970a725.md) for the one-idea principle.
|
|
||||||
```
|
|
||||||
|
|
||||||
## Responsibilities
|
|
||||||
- Create new notes using `notesium new` for hex-ID filenames
|
|
||||||
- Write note content following Folgezettel addressing and link conventions
|
|
||||||
- Create bibliographic notes for web sources (AuthorYear title format)
|
|
||||||
- Write blog drafts with proper structure and source attribution
|
|
||||||
- Add contextual links between notes explaining the connection
|
|
||||||
- Update the index note when new entry points are warranted
|
|
||||||
- Commit new notes with simple lowercase git messages
|
|
||||||
|
|
||||||
## Creating Notes
|
|
||||||
1. Get a new filename: `notesium new` (returns a hex-ID path like `6981d89a.md`)
|
|
||||||
2. Write the note with proper Folgezettel title: `# 1.2 Linking`
|
|
||||||
3. Add contextual links to related notes
|
|
||||||
4. Stage and commit: `git add *.md && git commit -m "message"`
|
|
||||||
|
|
||||||
## Git Commits
|
|
||||||
- Simple, short commit messages in lowercase
|
|
||||||
- NEVER add Co-Authored-By, Signed-off-by, or any other trailer
|
|
||||||
- NEVER push to remote
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
When a contract schema is provided, output valid JSON matching the schema.
|
|
||||||
Otherwise, write summary artifacts as markdown to the specified output path.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- NEVER delete files with `rm`
|
|
||||||
- NEVER push to remote with `git push`
|
|
||||||
- ALWAYS use `notesium new` for new note filenames — never invent hex IDs
|
|
||||||
- ALWAYS follow one-sentence-per-line writing style
|
|
||||||
- ALWAYS explain link context — never add bare links
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
# Summarizer
|
|
||||||
|
|
||||||
You are a context compaction specialist. Distill long conversation histories
|
|
||||||
into concise checkpoint summaries preserving essential context.
|
|
||||||
|
|
||||||
## Responsibilities
|
|
||||||
- Summarize key decisions and their rationale
|
|
||||||
- Preserve file paths, function names, and technical specifics
|
|
||||||
- Maintain the thread of what was attempted and what worked
|
|
||||||
- Flag unresolved issues or pending decisions
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Markdown checkpoint summary (under 2000 tokens) with sections:
|
|
||||||
- Objective: What is being accomplished
|
|
||||||
- Progress: What has been done so far
|
|
||||||
- Key Decisions: Important choices and rationale
|
|
||||||
- Current State: Where things stand now
|
|
||||||
- Next Steps: What remains to be done
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- NEVER modify source code
|
|
||||||
- Accuracy over brevity — never lose a key technical detail
|
|
||||||
- Include exact file paths and identifiers
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
# Supervisor
|
|
||||||
|
|
||||||
You are a work supervision specialist. Evaluate both OUTPUT quality and PROCESS quality
|
|
||||||
of completed work — including AI agent session transcripts stored as git notes.
|
|
||||||
|
|
||||||
## Responsibilities
|
|
||||||
- Inspect pipeline artifacts, workspace outputs, and git history
|
|
||||||
- Read session transcripts from git notes (`git notes show <commit>`)
|
|
||||||
- Evaluate output correctness, completeness, and alignment with intent
|
|
||||||
- Evaluate process efficiency: detours, scope creep, wasted effort
|
|
||||||
- Cross-reference transcripts with actual commits and diffs
|
|
||||||
|
|
||||||
## Evidence Gathering
|
|
||||||
- Recent commits and diffs
|
|
||||||
- Pipeline workspace artifacts from `.wave/workspaces/`
|
|
||||||
- Git notes (session transcripts) for relevant commits
|
|
||||||
- Test results and coverage data
|
|
||||||
- Branch state and PR status
|
|
||||||
|
|
||||||
## Evaluation Criteria
|
|
||||||
### Output Quality
|
|
||||||
- Correctness, completeness, test coverage, code quality
|
|
||||||
|
|
||||||
### Process Quality
|
|
||||||
- Efficiency, scope discipline, tool usage, token economy
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Valid JSON matching the contract schema. Write to the specified artifact path.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- NEVER modify source code — read-only
|
|
||||||
- NEVER commit or push changes
|
|
||||||
- Cite commit hashes, file paths, and line numbers
|
|
||||||
- Report findings with evidence, not speculation
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
# Synthesizer
|
|
||||||
|
|
||||||
You are a technical synthesizer. Transform raw analysis findings into structured,
|
|
||||||
prioritized, actionable proposals.
|
|
||||||
|
|
||||||
## Responsibilities
|
|
||||||
- Cross-reference multiple analysis artifacts
|
|
||||||
- Identify patterns across findings and group related items
|
|
||||||
- Prioritize proposals by impact, effort, and risk
|
|
||||||
- Perform 80/20 analysis to identify highest-leverage changes
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Valid JSON only — never markdown or prose. Every output must conform to the
|
|
||||||
schema specified in the step prompt.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- NEVER write code or make changes — synthesize and prioritize only
|
|
||||||
- Every proposal must trace back to specific validated findings
|
|
||||||
- Use Read, Grep, and Glob to verify claims from findings
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
# Validator
|
|
||||||
|
|
||||||
You are a technical validator. Rigorously verify claims, metrics, and findings
|
|
||||||
against actual source code.
|
|
||||||
|
|
||||||
## Responsibilities
|
|
||||||
- Verify cited code actually exists and behaves as described
|
|
||||||
- Re-check metrics (line counts, reference counts, change frequency)
|
|
||||||
- Classify findings as CONFIRMED, PARTIALLY_CONFIRMED, or REJECTED
|
|
||||||
- Catch false positives, exaggerated claims, and misattributed evidence
|
|
||||||
|
|
||||||
## Approach
|
|
||||||
- Trust nothing — read actual code for every finding
|
|
||||||
- Re-run metric checks independently
|
|
||||||
- Consider full context: a "premature abstraction" might have justification
|
|
||||||
- Be skeptical but fair — reject confidently, confirm only with evidence
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
Structured JSON with classification and rationale for every finding.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- NEVER suggest improvements — only validate what is claimed
|
|
||||||
- NEVER create new findings — validation only
|
|
||||||
- Every classification must include a rationale with evidence
|
|
||||||
@@ -1,222 +0,0 @@
|
|||||||
kind: WavePipeline
|
|
||||||
metadata:
|
|
||||||
name: adr
|
|
||||||
description: "Create an Architecture Decision Record for a design choice"
|
|
||||||
release: true
|
|
||||||
|
|
||||||
input:
|
|
||||||
source: cli
|
|
||||||
example: "ADR: should we use SQLite or PostgreSQL for pipeline state?"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- id: explore-context
|
|
||||||
persona: navigator
|
|
||||||
workspace:
|
|
||||||
mount:
|
|
||||||
- source: ./
|
|
||||||
target: /project
|
|
||||||
mode: readonly
|
|
||||||
exec:
|
|
||||||
type: prompt
|
|
||||||
source: |
|
|
||||||
Explore the codebase to gather context for this architectural decision: {{ input }}
|
|
||||||
|
|
||||||
## Exploration
|
|
||||||
|
|
||||||
1. **Understand the decision space**: What part of the system is this about?
|
|
||||||
Find all related code, configs, and documentation.
|
|
||||||
|
|
||||||
2. **Map current state**: How does the system work today?
|
|
||||||
What would be affected by this decision?
|
|
||||||
|
|
||||||
3. **Find constraints**: What technical constraints exist?
|
|
||||||
(dependencies, performance requirements, deployment model, team skills)
|
|
||||||
|
|
||||||
4. **Check precedents**: Are there similar decisions already made in this
|
|
||||||
codebase? Look for ADRs, design docs, or relevant comments.
|
|
||||||
|
|
||||||
5. **Identify stakeholders**: Which components/teams/users are affected?
|
|
||||||
|
|
||||||
Write your findings as structured JSON.
|
|
||||||
Include: decision_topic, current_state (description, affected_files, affected_components),
|
|
||||||
constraints, precedents, stakeholders, and timestamp.
|
|
||||||
output_artifacts:
|
|
||||||
- name: context
|
|
||||||
path: .wave/output/adr-context.json
|
|
||||||
type: json
|
|
||||||
handover:
|
|
||||||
contract:
|
|
||||||
type: json_schema
|
|
||||||
source: .wave/output/adr-context.json
|
|
||||||
schema_path: .wave/contracts/adr-context.schema.json
|
|
||||||
on_failure: retry
|
|
||||||
max_retries: 2
|
|
||||||
|
|
||||||
- id: analyze-options
|
|
||||||
persona: planner
|
|
||||||
dependencies: [explore-context]
|
|
||||||
memory:
|
|
||||||
inject_artifacts:
|
|
||||||
- step: explore-context
|
|
||||||
artifact: context
|
|
||||||
as: decision_context
|
|
||||||
workspace:
|
|
||||||
mount:
|
|
||||||
- source: ./
|
|
||||||
target: /project
|
|
||||||
mode: readonly
|
|
||||||
exec:
|
|
||||||
type: prompt
|
|
||||||
source: |
|
|
||||||
Analyze the options for this architectural decision.
|
|
||||||
|
|
||||||
Original decision: {{ input }}
|
|
||||||
|
|
||||||
## Analysis
|
|
||||||
|
|
||||||
For each viable option:
|
|
||||||
|
|
||||||
1. **Describe it**: What would this option look like in practice?
|
|
||||||
2. **Pros**: What are the benefits? Be specific to THIS project.
|
|
||||||
3. **Cons**: What are the drawbacks? Be honest.
|
|
||||||
4. **Effort**: How much work to implement?
|
|
||||||
5. **Risk**: What could go wrong?
|
|
||||||
6. **Reversibility**: How hard to undo if it's the wrong choice?
|
|
||||||
7. **Compatibility**: How well does it fit with existing constraints?
|
|
||||||
|
|
||||||
Write your analysis as structured JSON.
|
|
||||||
Include: decision_topic, options (name, description, pros, cons, effort, risk,
|
|
||||||
reversibility, compatibility), recommendation (option, rationale, confidence), and timestamp.
|
|
||||||
output_artifacts:
|
|
||||||
- name: options
|
|
||||||
path: .wave/output/adr-options.json
|
|
||||||
type: json
|
|
||||||
handover:
|
|
||||||
contract:
|
|
||||||
type: json_schema
|
|
||||||
source: .wave/output/adr-options.json
|
|
||||||
schema_path: .wave/contracts/adr-options.schema.json
|
|
||||||
on_failure: retry
|
|
||||||
max_retries: 2
|
|
||||||
|
|
||||||
- id: draft-record
|
|
||||||
persona: philosopher
|
|
||||||
dependencies: [analyze-options]
|
|
||||||
memory:
|
|
||||||
inject_artifacts:
|
|
||||||
- step: explore-context
|
|
||||||
artifact: context
|
|
||||||
as: decision_context
|
|
||||||
- step: analyze-options
|
|
||||||
artifact: options
|
|
||||||
as: analysis
|
|
||||||
exec:
|
|
||||||
type: prompt
|
|
||||||
source: |
|
|
||||||
Draft the Architecture Decision Record using the injected context and analysis.
|
|
||||||
|
|
||||||
Use this standard ADR format:
|
|
||||||
|
|
||||||
# ADR-NNN: [Title]
|
|
||||||
|
|
||||||
## Status
|
|
||||||
Proposed
|
|
||||||
|
|
||||||
## Date
|
|
||||||
YYYY-MM-DD
|
|
||||||
|
|
||||||
## Context
|
|
||||||
What is the issue that we're seeing that is motivating this decision?
|
|
||||||
Include technical context from the codebase exploration.
|
|
||||||
|
|
||||||
## Decision
|
|
||||||
What is the change that we're proposing and/or doing?
|
|
||||||
State the recommended option clearly.
|
|
||||||
|
|
||||||
## Options Considered
|
|
||||||
|
|
||||||
### Option 1: [Name]
|
|
||||||
Description, pros, cons.
|
|
||||||
|
|
||||||
### Option 2: [Name]
|
|
||||||
Description, pros, cons.
|
|
||||||
|
|
||||||
(etc.)
|
|
||||||
|
|
||||||
## Consequences
|
|
||||||
|
|
||||||
### Positive
|
|
||||||
- What becomes easier or better?
|
|
||||||
|
|
||||||
### Negative
|
|
||||||
- What becomes harder or worse?
|
|
||||||
|
|
||||||
### Neutral
|
|
||||||
- What other changes are required?
|
|
||||||
|
|
||||||
## Implementation Notes
|
|
||||||
- Key steps to implement the decision
|
|
||||||
- Files/components that need changes
|
|
||||||
- Migration plan if applicable
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Write clearly and concisely. The ADR should be understandable by
|
|
||||||
someone who wasn't part of the original discussion.
|
|
||||||
output_artifacts:
|
|
||||||
- name: adr
|
|
||||||
path: .wave/output/adr.md
|
|
||||||
type: markdown
|
|
||||||
|
|
||||||
- id: publish
|
|
||||||
persona: craftsman
|
|
||||||
dependencies: [draft-record]
|
|
||||||
memory:
|
|
||||||
inject_artifacts:
|
|
||||||
- step: draft-record
|
|
||||||
artifact: adr
|
|
||||||
as: adr
|
|
||||||
workspace:
|
|
||||||
type: worktree
|
|
||||||
branch: "docs/{{ pipeline_id }}"
|
|
||||||
exec:
|
|
||||||
type: prompt
|
|
||||||
source: |
|
|
||||||
PUBLISH — commit the ADR and create a pull request.
|
|
||||||
|
|
||||||
## Steps
|
|
||||||
|
|
||||||
1. Copy the ADR into the project docs:
|
|
||||||
- Determine the next ADR number by listing existing ADR files
|
|
||||||
(e.g., `ls docs/adr/` or similar convention)
|
|
||||||
- Copy `.wave/artifacts/adr` to the appropriate location
|
|
||||||
(e.g., `docs/adr/NNN-title.md`)
|
|
||||||
|
|
||||||
2. Commit:
|
|
||||||
```bash
|
|
||||||
git add docs/adr/
|
|
||||||
git commit -m "docs: add ADR for <decision topic>"
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Push and create PR:
|
|
||||||
```bash
|
|
||||||
git push -u origin HEAD
|
|
||||||
gh pr create --title "docs: ADR — <decision topic>" --body-file .wave/artifacts/adr
|
|
||||||
```
|
|
||||||
output_artifacts:
|
|
||||||
- name: pr-result
|
|
||||||
path: .wave/output/pr-result.json
|
|
||||||
type: json
|
|
||||||
handover:
|
|
||||||
contract:
|
|
||||||
type: json_schema
|
|
||||||
source: .wave/output/pr-result.json
|
|
||||||
schema_path: .wave/contracts/pr-result.schema.json
|
|
||||||
must_pass: true
|
|
||||||
on_failure: retry
|
|
||||||
max_retries: 2
|
|
||||||
outcomes:
|
|
||||||
- type: pr
|
|
||||||
extract_from: .wave/output/pr-result.json
|
|
||||||
json_path: .pr_url
|
|
||||||
label: "Pull Request"
|
|
||||||
@@ -1,168 +0,0 @@
|
|||||||
kind: WavePipeline
|
|
||||||
metadata:
|
|
||||||
name: blog-draft
|
|
||||||
description: "Draft a blog post from Zettelkasten notes and web research"
|
|
||||||
release: true
|
|
||||||
|
|
||||||
input:
|
|
||||||
source: cli
|
|
||||||
examples:
|
|
||||||
- "Context Economy | context windows, token economics, agent memory"
|
|
||||||
- "The Frame Problem in Code | divergent thinking, convergent thinking, planner worker"
|
|
||||||
- "Temporal Code Graphs | git history, co-modification, relevance signals"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- id: zettel-search
|
|
||||||
persona: navigator
|
|
||||||
workspace:
|
|
||||||
mount:
|
|
||||||
- source: ./
|
|
||||||
target: /project
|
|
||||||
mode: readonly
|
|
||||||
exec:
|
|
||||||
type: prompt
|
|
||||||
source: |
|
|
||||||
Search the Zettelkasten for notes relevant to a blog post.
|
|
||||||
|
|
||||||
Input: {{ input }}
|
|
||||||
|
|
||||||
The input format is "Title | keyword1, keyword2, keyword3".
|
|
||||||
Parse the title and keywords from the input.
|
|
||||||
|
|
||||||
## Steps
|
|
||||||
|
|
||||||
1. For each keyword, search with: `notesium lines --filter="keyword"`
|
|
||||||
2. Read the index note to find entry points for related sections
|
|
||||||
3. Read the most relevant notes found (up to 15 notes)
|
|
||||||
4. For each note, extract: filename, title, Folgezettel address, key quotes
|
|
||||||
|
|
||||||
## Output
|
|
||||||
|
|
||||||
Write the result as JSON to output/zettel-references.json matching the contract schema.
|
|
||||||
Include:
|
|
||||||
- query_keywords: the keywords parsed from input
|
|
||||||
- references: list of relevant notes with filename, title, folgezettel_address,
|
|
||||||
relevance (high/medium/low), key_quotes, and section
|
|
||||||
- index_entry_points: relevant entry points from the index note
|
|
||||||
- total_notes_searched: count of notes examined
|
|
||||||
- timestamp: current ISO 8601 timestamp
|
|
||||||
output_artifacts:
|
|
||||||
- name: zettel-references
|
|
||||||
path: output/zettel-references.json
|
|
||||||
type: json
|
|
||||||
handover:
|
|
||||||
contract:
|
|
||||||
type: json_schema
|
|
||||||
source: output/zettel-references.json
|
|
||||||
schema_path: .wave/contracts/zettel-references.schema.json
|
|
||||||
on_failure: retry
|
|
||||||
max_retries: 2
|
|
||||||
|
|
||||||
- id: web-research
|
|
||||||
persona: scout
|
|
||||||
workspace:
|
|
||||||
mount:
|
|
||||||
- source: ./
|
|
||||||
target: /project
|
|
||||||
mode: readonly
|
|
||||||
exec:
|
|
||||||
type: prompt
|
|
||||||
source: |
|
|
||||||
Research the web for recent information on a blog post topic.
|
|
||||||
|
|
||||||
Input: {{ input }}
|
|
||||||
|
|
||||||
The input format is "Title | keyword1, keyword2, keyword3".
|
|
||||||
Parse the title and keywords from the input.
|
|
||||||
|
|
||||||
## Steps
|
|
||||||
|
|
||||||
1. WebSearch for the topic title + recent developments
|
|
||||||
2. WebSearch for each keyword individually
|
|
||||||
3. Fetch the top 3-5 most relevant and credible sources
|
|
||||||
4. Extract key ideas, direct quotes with attribution, and URLs
|
|
||||||
5. Focus on recent content (2025-2026) when available
|
|
||||||
|
|
||||||
## Output
|
|
||||||
|
|
||||||
Write the result as JSON to output/web-findings.json matching the contract schema.
|
|
||||||
Include:
|
|
||||||
- topic: the blog post title
|
|
||||||
- sources: list of sources with url, title, author, date, key_ideas,
|
|
||||||
quotes (text + context), relevance_to_topic (0-1), source_type
|
|
||||||
- search_queries: all queries executed
|
|
||||||
- timestamp: current ISO 8601 timestamp
|
|
||||||
output_artifacts:
|
|
||||||
- name: web-findings
|
|
||||||
path: output/web-findings.json
|
|
||||||
type: json
|
|
||||||
handover:
|
|
||||||
contract:
|
|
||||||
type: json_schema
|
|
||||||
source: output/web-findings.json
|
|
||||||
schema_path: .wave/contracts/web-findings.schema.json
|
|
||||||
on_failure: retry
|
|
||||||
max_retries: 2
|
|
||||||
|
|
||||||
- id: draft
|
|
||||||
persona: scribe
|
|
||||||
dependencies: [zettel-search, web-research]
|
|
||||||
memory:
|
|
||||||
inject_artifacts:
|
|
||||||
- step: zettel-search
|
|
||||||
artifact: zettel-references
|
|
||||||
as: zettel_refs
|
|
||||||
- step: web-research
|
|
||||||
artifact: web-findings
|
|
||||||
as: web_refs
|
|
||||||
workspace:
|
|
||||||
mount:
|
|
||||||
- source: ./
|
|
||||||
target: /project
|
|
||||||
mode: readwrite
|
|
||||||
exec:
|
|
||||||
type: prompt
|
|
||||||
source: |
|
|
||||||
Draft a blog post using Zettelkasten notes and web research findings.
|
|
||||||
|
|
||||||
Input: {{ input }}
|
|
||||||
|
|
||||||
Parse the title from the input (format: "Title | keywords").
|
|
||||||
|
|
||||||
Read the artifacts:
|
|
||||||
cat artifacts/zettel_refs
|
|
||||||
cat artifacts/web_refs
|
|
||||||
|
|
||||||
## Steps
|
|
||||||
|
|
||||||
1. **Create bibliographic notes** for each web source:
|
|
||||||
- Use `notesium new` for each new note
|
|
||||||
- Title format: `# AuthorYear` (e.g., `# Willison2026`)
|
|
||||||
- Include: source URL, author, date, summary, key quotes
|
|
||||||
- One sentence per line
|
|
||||||
|
|
||||||
2. **Create the blog draft note**:
|
|
||||||
- Use `notesium new` for the filename
|
|
||||||
- Title: the blog post title from input
|
|
||||||
- Structure the draft with:
|
|
||||||
- Opening hook — a concrete scenario the reader recognizes
|
|
||||||
- Numbered sections building on each other
|
|
||||||
- Quotes with source attribution (from both Zettelkasten and web)
|
|
||||||
- Links to all referenced Zettelkasten notes: `[1.2 Linking](filename.md)`
|
|
||||||
- Links to newly created bibliographic notes
|
|
||||||
- Follow the blog series voice: authoritative, framework-oriented, technically substantive
|
|
||||||
- One sentence per line
|
|
||||||
|
|
||||||
3. **Commit all new notes**:
|
|
||||||
- `git add *.md`
|
|
||||||
- `git commit -m "blog-draft: {title in lowercase}"`
|
|
||||||
|
|
||||||
4. **Write a summary** to output/draft-summary.md:
|
|
||||||
- Draft filename and title
|
|
||||||
- List of new bibliographic notes created
|
|
||||||
- List of Zettelkasten notes linked
|
|
||||||
- Total new files created
|
|
||||||
output_artifacts:
|
|
||||||
- name: draft-summary
|
|
||||||
path: output/draft-summary.md
|
|
||||||
type: markdown
|
|
||||||
@@ -1,137 +0,0 @@
|
|||||||
kind: WavePipeline
|
|
||||||
metadata:
|
|
||||||
name: changelog
|
|
||||||
description: "Generate structured changelog from git history"
|
|
||||||
release: true
|
|
||||||
|
|
||||||
input:
|
|
||||||
source: cli
|
|
||||||
example: "generate changelog from v0.1.0 to HEAD"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- id: analyze-commits
|
|
||||||
persona: navigator
|
|
||||||
workspace:
|
|
||||||
type: worktree
|
|
||||||
branch: "{{ pipeline_id }}"
|
|
||||||
exec:
|
|
||||||
type: prompt
|
|
||||||
source: |
|
|
||||||
Analyze git history for changelog generation: {{ input }}
|
|
||||||
|
|
||||||
## Process
|
|
||||||
|
|
||||||
1. **Determine range**: Parse input to identify the commit range.
|
|
||||||
If tags mentioned, use them. If time period, calculate dates.
|
|
||||||
If unclear, use last tag to HEAD (or last 50 commits).
|
|
||||||
|
|
||||||
2. **Extract commits**: Use `git log --format` to get hash, author,
|
|
||||||
date, subject, and body for each commit.
|
|
||||||
|
|
||||||
3. **Parse conventional commits**: Categorize by prefix:
|
|
||||||
feat → Features, fix → Fixes, docs → Documentation,
|
|
||||||
refactor → Refactoring, test → Testing, chore → Maintenance,
|
|
||||||
perf → Performance, ci → CI/CD, no prefix → Other
|
|
||||||
|
|
||||||
4. **Identify breaking changes**: Look for `BREAKING CHANGE:` in body,
|
|
||||||
`!` after prefix, API removals in body.
|
|
||||||
|
|
||||||
5. **Extract scope**: Parse from prefix (e.g., `fix(pipeline):` → "pipeline")
|
|
||||||
output_artifacts:
|
|
||||||
- name: commits
|
|
||||||
path: .wave/output/commit-analysis.json
|
|
||||||
type: json
|
|
||||||
handover:
|
|
||||||
contract:
|
|
||||||
type: json_schema
|
|
||||||
source: .wave/output/commit-analysis.json
|
|
||||||
schema_path: .wave/contracts/commit-analysis.schema.json
|
|
||||||
on_failure: retry
|
|
||||||
max_retries: 2
|
|
||||||
|
|
||||||
- id: categorize
|
|
||||||
persona: planner
|
|
||||||
dependencies: [analyze-commits]
|
|
||||||
memory:
|
|
||||||
inject_artifacts:
|
|
||||||
- step: analyze-commits
|
|
||||||
artifact: commits
|
|
||||||
as: raw_commits
|
|
||||||
workspace:
|
|
||||||
type: worktree
|
|
||||||
branch: "{{ pipeline_id }}"
|
|
||||||
exec:
|
|
||||||
type: prompt
|
|
||||||
source: |
|
|
||||||
Categorize and describe changes for a changelog using the injected commit analysis.
|
|
||||||
|
|
||||||
## Rules
|
|
||||||
|
|
||||||
1. **Group by type** into sections
|
|
||||||
2. **Write user-facing descriptions**: Rewrite technical messages into
|
|
||||||
clear descriptions focused on what changed and why it matters.
|
|
||||||
3. **Highlight breaking changes** first with migration notes
|
|
||||||
4. **Deduplicate**: Combine commits for the same logical change
|
|
||||||
5. **Add context** for significant features
|
|
||||||
output_artifacts:
|
|
||||||
- name: categorized
|
|
||||||
path: .wave/output/categorized-changes.json
|
|
||||||
type: json
|
|
||||||
handover:
|
|
||||||
contract:
|
|
||||||
type: json_schema
|
|
||||||
source: .wave/output/categorized-changes.json
|
|
||||||
schema_path: .wave/contracts/categorized-changes.schema.json
|
|
||||||
on_failure: retry
|
|
||||||
max_retries: 2
|
|
||||||
|
|
||||||
- id: format
|
|
||||||
persona: philosopher
|
|
||||||
dependencies: [categorize]
|
|
||||||
memory:
|
|
||||||
inject_artifacts:
|
|
||||||
- step: analyze-commits
|
|
||||||
artifact: commits
|
|
||||||
as: raw_commits
|
|
||||||
- step: categorize
|
|
||||||
artifact: categorized
|
|
||||||
as: changes
|
|
||||||
workspace:
|
|
||||||
type: worktree
|
|
||||||
branch: "{{ pipeline_id }}"
|
|
||||||
exec:
|
|
||||||
type: prompt
|
|
||||||
source: |
|
|
||||||
Format the injected commit analysis and categorized changes into a polished changelog.
|
|
||||||
|
|
||||||
Use Keep a Changelog format:
|
|
||||||
|
|
||||||
# Changelog
|
|
||||||
|
|
||||||
## [Version or Date Range] - YYYY-MM-DD
|
|
||||||
|
|
||||||
### Breaking Changes
|
|
||||||
- **scope**: Description. Migration: what to do
|
|
||||||
|
|
||||||
### Added
|
|
||||||
- **scope**: Feature description
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
- **scope**: Bug fix description
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
- **scope**: Change description
|
|
||||||
|
|
||||||
### Security
|
|
||||||
- **scope**: Security fix description
|
|
||||||
|
|
||||||
Rules:
|
|
||||||
- Only include sections with entries
|
|
||||||
- Bold scope if present
|
|
||||||
- Most notable entries first per section
|
|
||||||
- One line per entry, concise
|
|
||||||
- Contributors list at bottom
|
|
||||||
output_artifacts:
|
|
||||||
- name: changelog
|
|
||||||
path: .wave/output/CHANGELOG.md
|
|
||||||
type: markdown
|
|
||||||
@@ -1,165 +0,0 @@
|
|||||||
kind: WavePipeline
|
|
||||||
metadata:
|
|
||||||
name: code-review
|
|
||||||
description: "Comprehensive code review for pull requests"
|
|
||||||
release: true
|
|
||||||
|
|
||||||
input:
|
|
||||||
source: cli
|
|
||||||
example: "review the authentication module"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- id: diff-analysis
|
|
||||||
persona: navigator
|
|
||||||
workspace:
|
|
||||||
mount:
|
|
||||||
- source: ./
|
|
||||||
target: /project
|
|
||||||
mode: readonly
|
|
||||||
exec:
|
|
||||||
type: prompt
|
|
||||||
source: |
|
|
||||||
Analyze the code changes for: {{ input }}
|
|
||||||
|
|
||||||
1. Identify all modified files and their purposes
|
|
||||||
2. Map the change scope (which modules/packages affected)
|
|
||||||
3. Find related tests that should be updated
|
|
||||||
4. Check for breaking API changes
|
|
||||||
|
|
||||||
Produce a structured result matching the contract schema.
|
|
||||||
output_artifacts:
|
|
||||||
- name: diff
|
|
||||||
path: .wave/output/diff-analysis.json
|
|
||||||
type: json
|
|
||||||
handover:
|
|
||||||
contract:
|
|
||||||
type: json_schema
|
|
||||||
source: .wave/output/diff-analysis.json
|
|
||||||
schema_path: .wave/contracts/diff-analysis.schema.json
|
|
||||||
on_failure: retry
|
|
||||||
max_retries: 2
|
|
||||||
|
|
||||||
- id: security-review
|
|
||||||
persona: auditor
|
|
||||||
dependencies: [diff-analysis]
|
|
||||||
memory:
|
|
||||||
inject_artifacts:
|
|
||||||
- step: diff-analysis
|
|
||||||
artifact: diff
|
|
||||||
as: changes
|
|
||||||
exec:
|
|
||||||
type: prompt
|
|
||||||
source: |
|
|
||||||
Security review of the changes:
|
|
||||||
|
|
||||||
Check for:
|
|
||||||
1. SQL injection, XSS, CSRF vulnerabilities
|
|
||||||
2. Hardcoded secrets or credentials
|
|
||||||
3. Insecure deserialization
|
|
||||||
4. Missing input validation
|
|
||||||
5. Authentication/authorization gaps
|
|
||||||
6. Sensitive data exposure
|
|
||||||
|
|
||||||
Output findings with severity (CRITICAL/HIGH/MEDIUM/LOW).
|
|
||||||
output_artifacts:
|
|
||||||
- name: security
|
|
||||||
path: .wave/output/security-review.md
|
|
||||||
type: markdown
|
|
||||||
|
|
||||||
- id: quality-review
|
|
||||||
persona: auditor
|
|
||||||
dependencies: [diff-analysis]
|
|
||||||
memory:
|
|
||||||
inject_artifacts:
|
|
||||||
- step: diff-analysis
|
|
||||||
artifact: diff
|
|
||||||
as: changes
|
|
||||||
exec:
|
|
||||||
type: prompt
|
|
||||||
source: |
|
|
||||||
Quality review of the changes:
|
|
||||||
|
|
||||||
Check for:
|
|
||||||
1. Error handling completeness
|
|
||||||
2. Edge cases not covered
|
|
||||||
3. Code duplication
|
|
||||||
4. Naming consistency
|
|
||||||
5. Missing or inadequate tests
|
|
||||||
6. Performance implications
|
|
||||||
7. Documentation gaps
|
|
||||||
|
|
||||||
Output findings with severity and suggestions.
|
|
||||||
output_artifacts:
|
|
||||||
- name: quality
|
|
||||||
path: .wave/output/quality-review.md
|
|
||||||
type: markdown
|
|
||||||
|
|
||||||
- id: summary
|
|
||||||
persona: summarizer
|
|
||||||
dependencies: [security-review, quality-review]
|
|
||||||
memory:
|
|
||||||
inject_artifacts:
|
|
||||||
- step: security-review
|
|
||||||
artifact: security
|
|
||||||
as: security_findings
|
|
||||||
- step: quality-review
|
|
||||||
artifact: quality
|
|
||||||
as: quality_findings
|
|
||||||
exec:
|
|
||||||
type: prompt
|
|
||||||
source: |
|
|
||||||
Synthesize the review findings into a final verdict:
|
|
||||||
|
|
||||||
1. Overall assessment (APPROVE / REQUEST_CHANGES / NEEDS_DISCUSSION)
|
|
||||||
2. Critical issues that must be fixed
|
|
||||||
3. Suggested improvements (optional but recommended)
|
|
||||||
4. Positive observations
|
|
||||||
|
|
||||||
Format as a PR review comment ready to post.
|
|
||||||
Do NOT include a title/header line — the publish step adds one.
|
|
||||||
output_artifacts:
|
|
||||||
- name: verdict
|
|
||||||
path: .wave/output/review-summary.md
|
|
||||||
type: markdown
|
|
||||||
|
|
||||||
- id: publish
|
|
||||||
persona: github-commenter
|
|
||||||
dependencies: [summary]
|
|
||||||
memory:
|
|
||||||
inject_artifacts:
|
|
||||||
- step: summary
|
|
||||||
artifact: verdict
|
|
||||||
as: review_summary
|
|
||||||
exec:
|
|
||||||
type: prompt
|
|
||||||
source: |
|
|
||||||
Post the code review summary as a PR comment.
|
|
||||||
|
|
||||||
The original input was: {{ input }}
|
|
||||||
Extract the PR number or URL from the input.
|
|
||||||
|
|
||||||
1. Post the review as a PR comment using:
|
|
||||||
gh pr comment <PR_NUMBER_OR_URL> --body "## Code Review (Wave Pipeline)
|
|
||||||
|
|
||||||
<review content>
|
|
||||||
|
|
||||||
---
|
|
||||||
*Generated by [Wave](https://github.com/re-cinq/wave) code-review pipeline*"
|
|
||||||
|
|
||||||
output_artifacts:
|
|
||||||
- name: publish-result
|
|
||||||
path: .wave/output/publish-result.json
|
|
||||||
type: json
|
|
||||||
handover:
|
|
||||||
contract:
|
|
||||||
type: json_schema
|
|
||||||
source: .wave/output/publish-result.json
|
|
||||||
schema_path: .wave/contracts/publish-result.schema.json
|
|
||||||
must_pass: true
|
|
||||||
on_failure: retry
|
|
||||||
max_retries: 2
|
|
||||||
outcomes:
|
|
||||||
- type: url
|
|
||||||
extract_from: .wave/output/publish-result.json
|
|
||||||
json_path: .comment_url
|
|
||||||
label: "Review Comment"
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user