Compare commits
30
Commits
@@ -0,0 +1,15 @@
|
||||
# Server-side .env for netcup deploy. Copy to /srv/librenotes/.env on the host.
|
||||
# Used by: docker compose -f docker-compose.yml -f compose.netcup.yaml up -d --build
|
||||
|
||||
# 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,33 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
ci:
|
||||
runs-on: ubuntu-latest
|
||||
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,99 @@
|
||||
name: Deploy
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
tags: ["v*"]
|
||||
|
||||
# Required repository secrets:
|
||||
# REGISTRY registry hostname, e.g. registry.librete.ch
|
||||
# REGISTRY_USER robot account
|
||||
# REGISTRY_PASS robot token
|
||||
# DEPLOY_HOST deployment SSH target, e.g. root@librenot.es
|
||||
# DEPLOY_KEY private SSH key (PEM, no passphrase)
|
||||
# DEPLOY_PATH remote directory containing the compose stack
|
||||
# HEALTH_URL public URL to verify post-deploy, e.g.
|
||||
# https://librenot.es/healthz
|
||||
#
|
||||
# Tag pushes deploy the tag (vX.Y.Z); main-branch pushes deploy
|
||||
# the rolling :main image. Set image to immutable tag so rollback
|
||||
# is just `docker compose -f ... up -d` with the previous tag.
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
if: ${{ vars.DEPLOY_ENABLED == 'true' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Log in to registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ secrets.REGISTRY }}
|
||||
username: ${{ secrets.REGISTRY_USER }}
|
||||
password: ${{ secrets.REGISTRY_PASS }}
|
||||
|
||||
- name: Compute tags
|
||||
id: tags
|
||||
run: |
|
||||
BASE="${{ secrets.REGISTRY }}/librenotes"
|
||||
if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
|
||||
TAG="${GITHUB_REF##refs/tags/}"
|
||||
echo "tags=${BASE}:${TAG},${BASE}:latest" >> "$GITHUB_OUTPUT"
|
||||
echo "version=${TAG}" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "tags=${BASE}:main,${BASE}:${GITHUB_SHA::7}" >> "$GITHUB_OUTPUT"
|
||||
echo "version=${GITHUB_SHA::7}" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
- uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: ${{ steps.tags.outputs.tags }}
|
||||
build-args: |
|
||||
VERSION=${{ steps.tags.outputs.version }}
|
||||
BUILDTIME=${{ github.event.head_commit.timestamp }}
|
||||
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
timeout-minutes: 10
|
||||
if: ${{ vars.DEPLOY_ENABLED == 'true' }}
|
||||
steps:
|
||||
- name: Configure SSH
|
||||
run: |
|
||||
mkdir -p ~/.ssh
|
||||
echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/id_deploy
|
||||
chmod 600 ~/.ssh/id_deploy
|
||||
ssh-keyscan -H "${{ secrets.DEPLOY_HOST#*@ }}" >> ~/.ssh/known_hosts || true
|
||||
|
||||
- name: Pull and restart on deploy host
|
||||
env:
|
||||
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
||||
DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }}
|
||||
run: |
|
||||
ssh -i ~/.ssh/id_deploy "$DEPLOY_HOST" \
|
||||
"cd $DEPLOY_PATH && \
|
||||
docker compose -f docker-compose.yml -f docker-compose.prod.yml pull && \
|
||||
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --remove-orphans"
|
||||
|
||||
- name: Verify health
|
||||
env:
|
||||
HEALTH_URL: ${{ secrets.HEALTH_URL }}
|
||||
run: |
|
||||
# Give the new container ~30s to come up, then poll for
|
||||
# a 200 from /healthz. Failure aborts the workflow which
|
||||
# is the alert.
|
||||
for i in $(seq 1 12); do
|
||||
if curl -fsS "$HEALTH_URL" >/dev/null; then
|
||||
echo "deploy verified"
|
||||
exit 0
|
||||
fi
|
||||
sleep 5
|
||||
done
|
||||
echo "deploy verification failed"
|
||||
exit 1
|
||||
@@ -9,3 +9,9 @@
|
||||
!.wave/prompts/
|
||||
wave.yaml
|
||||
.env
|
||||
|
||||
# Build artifacts
|
||||
/librenotes
|
||||
/dist/
|
||||
*.test
|
||||
*.out
|
||||
|
||||
@@ -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