diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..899aa68 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,49 @@ +name: Bug report +description: Report a reproducible problem in Skill Feedback Engine. +title: "[Bug]: " +labels: + - bug +body: + - type: textarea + id: description + attributes: + label: What happened? + description: Describe the behavior and its impact. + validations: + required: true + - type: textarea + id: reproduction + attributes: + label: How can we reproduce it? + description: Include the smallest safe command sequence or fixture that demonstrates the issue. + placeholder: | + 1. Run ... + 2. Observe ... + validations: + required: true + - type: textarea + id: expected + attributes: + label: What did you expect? + validations: + required: true + - type: textarea + id: environment + attributes: + label: Environment + description: Include the release or commit, Python version, operating system, and installation method. + placeholder: | + Skill Feedback Engine: v0.1.0 + Python: 3.12 + OS: macOS 15 + Install: pip editable checkout + validations: + required: true + - type: checkboxes + id: privacy + attributes: + label: Privacy check + description: Observations and evidence may contain private work context. + options: + - label: I removed secrets, personal information, raw conversation history, and other private evidence. + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..8005e32 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,2 @@ +blank_issues_enabled: false +contact_links: [] diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..94e6431 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,34 @@ +name: Feature request +description: Propose an evidence-backed improvement to the engine or its adapters. +title: "[Feature]: " +labels: + - enhancement +body: + - type: textarea + id: problem + attributes: + label: What problem should this solve? + description: Describe the repeated workflow friction or missing capability. + validations: + required: true + - type: textarea + id: proposal + attributes: + label: Proposed change + description: Explain the behavior you would like and where it belongs. + validations: + required: true + - type: textarea + id: alternatives + attributes: + label: Alternatives considered + description: Note any existing command, adapter, or workaround you tried. + - type: checkboxes + id: boundaries + attributes: + label: Design boundaries + options: + - label: This preserves local-first evidence handling and explicit human review. + required: true + - label: This can remain provider-neutral, or the provider-specific behavior is isolated to an adapter. + required: true diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..2eb6e1f --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,18 @@ +## What changed + + + +## Why + + + +## Validation + + + +- [ ] Tests pass. +- [ ] The bundled Agent Skill validates. +- [ ] Documentation reflects any user-facing behavior change. +- [ ] No secrets, raw conversation history, or private evidence are included. +- [ ] Provider-specific behavior stays in an adapter; the core remains provider-neutral. +- [ ] Skill changes remain proposal-based and require explicit human review. diff --git a/.project-status/manifest.json b/.project-status/manifest.json new file mode 100644 index 0000000..d176720 --- /dev/null +++ b/.project-status/manifest.json @@ -0,0 +1,491 @@ +{ + "schemaVersion": 1, + "route": "/status", + "initiative": { + "id": "skill-feedback-engine", + "name": "Skill Feedback Engine", + "release": "v0.1.0", + "state": "active" + }, + "source": { + "repository": "https://github.com/Openly-Useful/skill-feedback-engine", + "commit": "1281e0c0eb8ee7cadb17a73c33973cba157fbe80", + "deploymentId": null, + "buildId": "31919870878", + "manifestSha256": null + }, + "audit": { + "auditId": "v0-1-0-launch-audit", + "state": "current", + "evidenceAsOf": "2026-08-16T02:28:28.000Z", + "verifiedAt": "2026-08-16T02:28:28.000Z", + "nextDueAt": "2026-08-23T02:28:28.000Z", + "staleAfterSeconds": 604800 + }, + "totalWeight": 100, + "phases": [ + { + "id": "core", + "name": "Core engine", + "summary": "Local observation storage, review synthesis, privacy boundaries, and portable skill behavior.", + "weight": 50, + "tasks": [ + { + "id": "core-engine", + "name": "Implement the feedback engine", + "summary": "Provide local SQLite observations, incremental and full reviews, proposal coalescing, and sanitized exports.", + "status": "complete", + "weight": 25, + "earnedWeight": 25, + "remainingHours": { + "min": 0, + "max": 0 + }, + "recurring": false, + "deferred": false, + "owner": { + "type": "role", + "id": "maintainer", + "label": "Project maintainer" + }, + "nextAction": null, + "evidenceRequirement": { + "minimumTier": "public_reproducible", + "minCount": 1 + }, + "evidenceRefs": [ + "initial-release-commit" + ], + "gateRefs": [] + }, + { + "id": "privacy-boundary", + "name": "Validate privacy boundaries", + "summary": "Keep raw evidence and private source paths out of proposal exports.", + "status": "complete", + "weight": 15, + "earnedWeight": 15, + "remainingHours": { + "min": 0, + "max": 0 + }, + "recurring": false, + "deferred": false, + "owner": { + "type": "role", + "id": "maintainer", + "label": "Project maintainer" + }, + "nextAction": null, + "evidenceRequirement": { + "minimumTier": "public_reproducible", + "minCount": 1 + }, + "evidenceRefs": [ + "initial-ci-run" + ], + "gateRefs": [] + }, + { + "id": "portable-skill", + "name": "Ship the portable Agent Skill", + "summary": "Provide concise SKILL.md instructions, observation policy, and provider routing guidance.", + "status": "complete", + "weight": 10, + "earnedWeight": 10, + "remainingHours": { + "min": 0, + "max": 0 + }, + "recurring": false, + "deferred": false, + "owner": { + "type": "role", + "id": "maintainer", + "label": "Project maintainer" + }, + "nextAction": null, + "evidenceRequirement": { + "minimumTier": "public_reproducible", + "minCount": 1 + }, + "evidenceRefs": [ + "initial-ci-run" + ], + "gateRefs": [] + } + ] + }, + { + "id": "quality", + "name": "Quality and portability", + "summary": "Automated tests, validation, documentation, and provider-specific activation adapters.", + "weight": 25, + "tasks": [ + { + "id": "automated-validation", + "name": "Run automated validation", + "summary": "Exercise the supported Python versions, CLI installation, core workflow, redaction, alias mapping, and skill structure.", + "status": "complete", + "weight": 15, + "earnedWeight": 15, + "remainingHours": { + "min": 0, + "max": 0 + }, + "recurring": true, + "deferred": false, + "owner": { + "type": "automation", + "id": "github-actions", + "label": "GitHub Actions" + }, + "nextAction": null, + "evidenceRequirement": { + "minimumTier": "public_reproducible", + "minCount": 1 + }, + "evidenceRefs": [ + "initial-ci-run" + ], + "gateRefs": [] + }, + { + "id": "documentation-adapters", + "name": "Document and adapt the workflow", + "summary": "Document installation and usage while keeping Codex, Claude, and generic adapters thin.", + "status": "complete", + "weight": 10, + "earnedWeight": 10, + "remainingHours": { + "min": 0, + "max": 0 + }, + "recurring": false, + "deferred": false, + "owner": { + "type": "role", + "id": "maintainer", + "label": "Project maintainer" + }, + "nextAction": null, + "evidenceRequirement": { + "minimumTier": "public_reproducible", + "minCount": 1 + }, + "evidenceRefs": [ + "initial-release-commit" + ], + "gateRefs": [] + } + ] + }, + { + "id": "launch", + "name": "Public launch", + "summary": "Public repository, versioned release, community entry points, social presentation, and Openly Useful catalog integration.", + "weight": 25, + "tasks": [ + { + "id": "public-repository", + "name": "Publish the public repository", + "summary": "Publish the canonical source under the Openly Useful organization with an MIT license and green CI.", + "status": "complete", + "weight": 10, + "earnedWeight": 10, + "remainingHours": { + "min": 0, + "max": 0 + }, + "recurring": false, + "deferred": false, + "owner": { + "type": "role", + "id": "maintainer", + "label": "Project maintainer" + }, + "nextAction": null, + "evidenceRequirement": { + "minimumTier": "public_reproducible", + "minCount": 1 + }, + "evidenceRefs": [ + "initial-release-commit" + ], + "gateRefs": [] + }, + { + "id": "versioned-release", + "name": "Publish v0.1.0", + "summary": "Create a public release matching the package version and initial validated source commit.", + "status": "complete", + "weight": 5, + "earnedWeight": 5, + "remainingHours": { + "min": 0, + "max": 0 + }, + "recurring": false, + "deferred": false, + "owner": { + "type": "role", + "id": "maintainer", + "label": "Project maintainer" + }, + "nextAction": null, + "evidenceRequirement": { + "minimumTier": "public_reproducible", + "minCount": 1 + }, + "evidenceRefs": [ + "v0-1-0-release" + ], + "gateRefs": [] + }, + { + "id": "site-catalog", + "name": "Add the project to openlyuseful.org", + "summary": "Add the project card, direct repository link, and site validation coverage.", + "status": "in_progress", + "weight": 5, + "earnedWeight": 0, + "remainingHours": { + "min": 0.25, + "max": 0.5 + }, + "recurring": false, + "deferred": false, + "owner": { + "type": "role", + "id": "site-maintainer", + "label": "Openly Useful site maintainer" + }, + "nextAction": "Review and merge https://github.com/Openly-Useful/openlyuseful.org/pull/10.", + "evidenceRequirement": { + "minimumTier": "public_reproducible", + "minCount": 1 + }, + "evidenceRefs": [], + "gateRefs": [ + "site-pr-merge" + ] + }, + { + "id": "community-templates", + "name": "Add repository contribution templates", + "summary": "Provide structured bug, feature, and pull-request entry points in addition to organization defaults.", + "status": "in_progress", + "weight": 3, + "earnedWeight": 0, + "remainingHours": { + "min": 0.1, + "max": 0.25 + }, + "recurring": false, + "deferred": false, + "owner": { + "type": "role", + "id": "maintainer", + "label": "Project maintainer" + }, + "nextAction": "Review and merge https://github.com/Openly-Useful/skill-feedback-engine/pull/1.", + "evidenceRequirement": { + "minimumTier": "public_reproducible", + "minCount": 1 + }, + "evidenceRefs": [], + "gateRefs": [ + "launch-polish-pr-merge" + ] + }, + { + "id": "social-preview", + "name": "Apply a branded repository preview", + "summary": "Use the canonical Openly Useful identity for a project-specific GitHub social preview.", + "status": "complete", + "weight": 2, + "earnedWeight": 2, + "remainingHours": { + "min": 0, + "max": 0 + }, + "recurring": false, + "deferred": false, + "owner": { + "type": "role", + "id": "maintainer", + "label": "Project maintainer" + }, + "nextAction": null, + "evidenceRequirement": { + "minimumTier": "direct", + "minCount": 1 + }, + "evidenceRefs": [ + "repository-social-preview" + ], + "gateRefs": [] + } + ] + } + ], + "evidence": [ + { + "id": "initial-release-commit", + "kind": "deliverable", + "tier": "public_reproducible", + "state": "current", + "visibility": "public", + "assertion": "The canonical public repository contains the initial Skill Feedback Engine implementation, documentation, portable skill, adapters, tests, and MIT license at commit 1281e0c0eb8ee7cadb17a73c33973cba157fbe80.", + "publicSummary": "Initial implementation published in the canonical public repository.", + "capturedAt": "2026-08-16T01:34:10.000Z", + "verifiedAt": "2026-08-16T01:48:45.000Z", + "expiresAt": null, + "locator": { + "type": "commit", + "repository": "https://github.com/Openly-Useful/skill-feedback-engine", + "commit": "1281e0c0eb8ee7cadb17a73c33973cba157fbe80" + }, + "integrity": null, + "verifier": { + "type": "agent", + "id": "codex", + "label": "Codex" + } + }, + { + "id": "initial-ci-run", + "kind": "test_result", + "tier": "public_reproducible", + "state": "current", + "visibility": "public", + "assertion": "GitHub Actions run 31919870878 completed successfully for the initial public commit across the configured Python matrix and skill validation step.", + "publicSummary": "Initial GitHub Actions validation completed successfully.", + "capturedAt": "2026-08-16T01:34:14.000Z", + "verifiedAt": "2026-08-16T01:48:45.000Z", + "expiresAt": null, + "locator": { + "type": "url", + "url": "https://github.com/Openly-Useful/skill-feedback-engine/actions/runs/31919870878" + }, + "integrity": null, + "verifier": { + "type": "automation", + "id": "github-actions", + "label": "GitHub Actions" + } + }, + { + "id": "v0-1-0-release", + "kind": "deliverable", + "tier": "public_reproducible", + "state": "current", + "visibility": "public", + "assertion": "GitHub release v0.1.0 was published from the verified main branch on 2026-08-16.", + "publicSummary": "Version 0.1.0 is publicly available as a GitHub release.", + "capturedAt": "2026-08-16T01:48:19.000Z", + "verifiedAt": "2026-08-16T01:48:45.000Z", + "expiresAt": null, + "locator": { + "type": "url", + "url": "https://github.com/Openly-Useful/skill-feedback-engine/releases/tag/v0.1.0" + }, + "integrity": null, + "verifier": { + "type": "agent", + "id": "codex", + "label": "Codex" + } + }, + { + "id": "repository-social-preview", + "kind": "deliverable", + "tier": "direct", + "state": "current", + "visibility": "public", + "assertion": "The repository uses a custom 1280 by 640 Openly Useful social preview for Skill Feedback Engine, uploaded and verified in GitHub repository settings.", + "publicSummary": "Project-specific Openly Useful social preview is live on the repository.", + "capturedAt": "2026-08-16T02:28:28.000Z", + "verifiedAt": "2026-08-16T02:28:28.000Z", + "expiresAt": null, + "locator": { + "type": "url", + "url": "https://github.com/Openly-Useful/skill-feedback-engine" + }, + "integrity": null, + "verifier": { + "type": "agent", + "id": "codex", + "label": "Codex" + } + } + ], + "gates": [ + { + "id": "site-pr-merge", + "name": "Website catalog pull request merge", + "type": "external_approval", + "status": "waiting", + "reason": "The openlyuseful.org change must be reviewed and merged in its own repository.", + "owner": { + "type": "role", + "id": "site-maintainer", + "label": "Openly Useful site maintainer" + }, + "nextAction": "Review and merge https://github.com/Openly-Useful/openlyuseful.org/pull/10.", + "wait": { + "kind": "unknown", + "label": "Maintainer review" + }, + "taskRefs": [ + "site-catalog" + ] + }, + { + "id": "launch-polish-pr-merge", + "name": "Skill Feedback Engine launch-polish pull request merge", + "type": "external_approval", + "status": "waiting", + "reason": "Repository-facing launch additions must be reviewed before merging to main.", + "owner": { + "type": "role", + "id": "maintainer", + "label": "Project maintainer" + }, + "nextAction": "Review and merge https://github.com/Openly-Useful/skill-feedback-engine/pull/1.", + "wait": { + "kind": "unknown", + "label": "Maintainer review" + }, + "taskRefs": [ + "community-templates" + ] + } + ], + "dependencies": [ + { + "id": "core-before-privacy-validation", + "type": "blocks", + "prerequisiteTaskId": "core-engine", + "dependentTaskId": "privacy-boundary" + }, + { + "id": "core-before-automated-validation", + "type": "blocks", + "prerequisiteTaskId": "core-engine", + "dependentTaskId": "automated-validation" + }, + { + "id": "repository-before-release", + "type": "blocks", + "prerequisiteTaskId": "public-repository", + "dependentTaskId": "versioned-release" + }, + { + "id": "repository-before-site-catalog", + "type": "blocks", + "prerequisiteTaskId": "public-repository", + "dependentTaskId": "site-catalog" + } + ] +} diff --git a/README.md b/README.md index 12330f4..4f63175 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,17 @@ **Observe work. Propose better skills.** +[![CI](https://github.com/Openly-Useful/skill-feedback-engine/actions/workflows/ci.yml/badge.svg)](https://github.com/Openly-Useful/skill-feedback-engine/actions/workflows/ci.yml) +[![Release](https://img.shields.io/github/v/release/Openly-Useful/skill-feedback-engine)](https://github.com/Openly-Useful/skill-feedback-engine/releases/latest) +[![Openly Useful](https://img.shields.io/badge/Openly%20Useful-openlyuseful.org-247a4b)](https://openlyuseful.org/#projects) + Skill Feedback Engine is a local-first, provider-neutral feedback loop for Agent Skills. It captures high-value corrections, failures, reusable patterns, and validated outcomes; groups recurring signals; and prepares sanitized, review-gated skill improvement proposals. It does not silently rewrite skills, publish conversation history, or merge pull requests. ## Status -This repository contains a functional v0.1 core: +This repository contains the functional [`v0.1.0`](https://github.com/Openly-Useful/skill-feedback-engine/releases/tag/v0.1.0) core: - Standard-library Python CLI with no runtime dependencies. - Concurrent-safe SQLite state under `~/.local/share/skill-feedback-engine` by default. diff --git a/assets/README.md b/assets/README.md new file mode 100644 index 0000000..94a57ef --- /dev/null +++ b/assets/README.md @@ -0,0 +1,5 @@ +# Project artwork + +`social-preview.svg` is the inspectable vector source for the repository social preview. It uses fixed text outlines and embeds the canonical Openly Useful reverse lockup and Open Monitor mark, including the source asset hashes in its metadata. + +`social-preview.png` is the production 1280 × 640 GitHub upload. Keep it below GitHub's 1 MB limit and regenerate it whenever the vector source changes. diff --git a/assets/social-preview.png b/assets/social-preview.png new file mode 100644 index 0000000..8ea941c Binary files /dev/null and b/assets/social-preview.png differ diff --git a/assets/social-preview.svg b/assets/social-preview.svg new file mode 100644 index 0000000..e1666ca --- /dev/null +++ b/assets/social-preview.svg @@ -0,0 +1,114 @@ + + Skill Feedback Engine repository social preview + An Openly Useful project card for the local-first, review-gated Skill Feedback Engine. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +