loop-engineer 0.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- loop_engineer-0.7.0/.claude-plugin/marketplace.json +7 -0
- loop_engineer-0.7.0/.claude-plugin/plugin.json +24 -0
- loop_engineer-0.7.0/.github/ISSUE_TEMPLATE/bug_report.md +31 -0
- loop_engineer-0.7.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
- loop_engineer-0.7.0/.github/ISSUE_TEMPLATE/feature_request.md +24 -0
- loop_engineer-0.7.0/.github/PULL_REQUEST_TEMPLATE.md +20 -0
- loop_engineer-0.7.0/.github/workflows/ci.yml +82 -0
- loop_engineer-0.7.0/.github/workflows/publish.yml +58 -0
- loop_engineer-0.7.0/.gitignore +35 -0
- loop_engineer-0.7.0/.pre-commit-hooks.yaml +11 -0
- loop_engineer-0.7.0/CHANGELOG.md +686 -0
- loop_engineer-0.7.0/CODE_OF_CONDUCT.md +58 -0
- loop_engineer-0.7.0/CONTRIBUTING.md +71 -0
- loop_engineer-0.7.0/GLOSSARY.md +150 -0
- loop_engineer-0.7.0/LICENSE +21 -0
- loop_engineer-0.7.0/PKG-INFO +470 -0
- loop_engineer-0.7.0/README.md +433 -0
- loop_engineer-0.7.0/SECURITY.md +41 -0
- loop_engineer-0.7.0/action.yml +104 -0
- loop_engineer-0.7.0/docs/ROADMAP-v1.0.md +235 -0
- loop_engineer-0.7.0/docs/demo.cast +294 -0
- loop_engineer-0.7.0/docs/demo.gif +0 -0
- loop_engineer-0.7.0/docs/integrations/langgraph.md +30 -0
- loop_engineer-0.7.0/docs/metrics-baseline.json +52 -0
- loop_engineer-0.7.0/docs/social-card.png +0 -0
- loop_engineer-0.7.0/docs/superpowers/plans/2026-06-20-loop-engineer-v1.md +337 -0
- loop_engineer-0.7.0/docs/superpowers/plans/2026-06-30-loop-engineer-v1.0-roadmap.md +444 -0
- loop_engineer-0.7.0/docs/superpowers/plans/2026-07-03-adoption-slices.md +1858 -0
- loop_engineer-0.7.0/docs/superpowers/specs/2026-06-20-loop-engineer-design.md +209 -0
- loop_engineer-0.7.0/docs/superpowers/specs/2026-06-30-st1-metrics-baseline.md +176 -0
- loop_engineer-0.7.0/docs/superpowers/specs/2026-06-30-st2-portable-contract-spec.md +438 -0
- loop_engineer-0.7.0/docs/superpowers/specs/2026-06-30-st3-integration-adapters.md +400 -0
- loop_engineer-0.7.0/docs/superpowers/specs/2026-06-30-v04-credibility-enforcement.md +547 -0
- loop_engineer-0.7.0/docs/superpowers/specs/2026-07-03-adoption-slices-design.md +143 -0
- loop_engineer-0.7.0/evals/cases/structural.json +96 -0
- loop_engineer-0.7.0/evals/rubric.md +177 -0
- loop_engineer-0.7.0/examples/coverage-repair/ADR.md +88 -0
- loop_engineer-0.7.0/examples/coverage-repair/README.md +113 -0
- loop_engineer-0.7.0/examples/coverage-repair/RUNLOG.md +91 -0
- loop_engineer-0.7.0/examples/coverage-repair/SPEC.md +63 -0
- loop_engineer-0.7.0/examples/coverage-repair/TASKS.json +33 -0
- loop_engineer-0.7.0/examples/coverage-repair/WORKFLOW.md +86 -0
- loop_engineer-0.7.0/examples/coverage-repair/scripts/run-example +60 -0
- loop_engineer-0.7.0/examples/coverage-repair/scripts/verify-fast +8 -0
- loop_engineer-0.7.0/examples/coverage-repair/scripts/verify-full +17 -0
- loop_engineer-0.7.0/examples/coverage-repair/target/manifest.json +9 -0
- loop_engineer-0.7.0/examples/coverage-repair/target/measure_coverage.py +89 -0
- loop_engineer-0.7.0/examples/coverage-repair/target/pricing.py +68 -0
- loop_engineer-0.7.0/examples/coverage-repair/target/test_holdout.py +32 -0
- loop_engineer-0.7.0/examples/coverage-repair/target/test_visible.py +62 -0
- loop_engineer-0.7.0/examples/coverage-repair/terminal_state.json +17 -0
- loop_engineer-0.7.0/examples/langgraph-emit/README.md +34 -0
- loop_engineer-0.7.0/examples/langgraph-emit/graph_example.py +82 -0
- loop_engineer-0.7.0/examples/naive-loop/README.md +22 -0
- loop_engineer-0.7.0/hooks/stop_firewall.py +122 -0
- loop_engineer-0.7.0/loop/__init__.py +17 -0
- loop_engineer-0.7.0/loop/__main__.py +176 -0
- loop_engineer-0.7.0/loop/_resources.py +43 -0
- loop_engineer-0.7.0/loop/contract.py +577 -0
- loop_engineer-0.7.0/loop/emit.py +258 -0
- loop_engineer-0.7.0/loop/paths.py +77 -0
- loop_engineer-0.7.0/loop/scaffold.py +131 -0
- loop_engineer-0.7.0/pyproject.toml +49 -0
- loop_engineer-0.7.0/reference/architecture-matrix.md +166 -0
- loop_engineer-0.7.0/reference/eval-suite.md +206 -0
- loop_engineer-0.7.0/reference/loop-patterns.md +211 -0
- loop_engineer-0.7.0/reference/model-routing.md +54 -0
- loop_engineer-0.7.0/reference/platform-map.md +88 -0
- loop_engineer-0.7.0/reference/prompt-templates.md +297 -0
- loop_engineer-0.7.0/reference/repo-os-contract.md +546 -0
- loop_engineer-0.7.0/reference/safety-and-approvals.md +134 -0
- loop_engineer-0.7.0/schemas/manifest.schema.json +41 -0
- loop_engineer-0.7.0/schemas/receipt.schema.json +21 -0
- loop_engineer-0.7.0/schemas/repair-record.schema.json +42 -0
- loop_engineer-0.7.0/schemas/rollout-record.schema.json +27 -0
- loop_engineer-0.7.0/schemas/state.schema.json +25 -0
- loop_engineer-0.7.0/schemas/tasks.schema.json +30 -0
- loop_engineer-0.7.0/schemas/terminal.schema.json +19 -0
- loop_engineer-0.7.0/scripts/action_scorecard.py +114 -0
- loop_engineer-0.7.0/scripts/anticheat_scan.py +490 -0
- loop_engineer-0.7.0/scripts/benchmark_harness.py +195 -0
- loop_engineer-0.7.0/scripts/holdout_gate.py +121 -0
- loop_engineer-0.7.0/scripts/inspect_loop.py +669 -0
- loop_engineer-0.7.0/scripts/metrics.py +725 -0
- loop_engineer-0.7.0/scripts/rollout_ledger.py +162 -0
- loop_engineer-0.7.0/scripts/runtime_monitor.py +317 -0
- loop_engineer-0.7.0/scripts/self_eval.py +376 -0
- loop_engineer-0.7.0/scripts/test_action_scorecard.py +205 -0
- loop_engineer-0.7.0/scripts/test_anticheat_scan.py +417 -0
- loop_engineer-0.7.0/scripts/test_benchmark_harness.py +333 -0
- loop_engineer-0.7.0/scripts/test_conformance.py +417 -0
- loop_engineer-0.7.0/scripts/test_contract_records.py +182 -0
- loop_engineer-0.7.0/scripts/test_docs_adoption.py +77 -0
- loop_engineer-0.7.0/scripts/test_docs_baseline.py +41 -0
- loop_engineer-0.7.0/scripts/test_docs_claims.py +70 -0
- loop_engineer-0.7.0/scripts/test_docs_version.py +54 -0
- loop_engineer-0.7.0/scripts/test_emit.py +178 -0
- loop_engineer-0.7.0/scripts/test_example_runnable.py +69 -0
- loop_engineer-0.7.0/scripts/test_holdout_gate.py +73 -0
- loop_engineer-0.7.0/scripts/test_inspect_loop.py +1085 -0
- loop_engineer-0.7.0/scripts/test_langgraph_recipe.py +39 -0
- loop_engineer-0.7.0/scripts/test_loop_cli.py +149 -0
- loop_engineer-0.7.0/scripts/test_loop_contract_core.py +707 -0
- loop_engineer-0.7.0/scripts/test_metrics.py +689 -0
- loop_engineer-0.7.0/scripts/test_metrics_cli.py +116 -0
- loop_engineer-0.7.0/scripts/test_precommit_hook.py +65 -0
- loop_engineer-0.7.0/scripts/test_resources.py +34 -0
- loop_engineer-0.7.0/scripts/test_rollout_ledger.py +175 -0
- loop_engineer-0.7.0/scripts/test_runtime_monitor.py +418 -0
- loop_engineer-0.7.0/scripts/test_scaffold.py +172 -0
- loop_engineer-0.7.0/scripts/test_schemas_metrics.py +88 -0
- loop_engineer-0.7.0/scripts/test_self_eval.py +121 -0
- loop_engineer-0.7.0/scripts/test_stop_firewall.py +156 -0
- loop_engineer-0.7.0/scripts/test_template_roundtrip.py +251 -0
- loop_engineer-0.7.0/scripts/test_validate_frontmatter.py +23 -0
- loop_engineer-0.7.0/scripts/test_wheel_selfcontained.py +94 -0
- loop_engineer-0.7.0/scripts/validate_frontmatter.py +37 -0
- loop_engineer-0.7.0/skills/loop-architect/SKILL.md +135 -0
- loop_engineer-0.7.0/skills/loop-contract/SKILL.md +132 -0
- loop_engineer-0.7.0/skills/loop-engineer/SKILL.md +82 -0
- loop_engineer-0.7.0/skills/loop-evals/SKILL.md +107 -0
- loop_engineer-0.7.0/skills/loop-flywheel/SKILL.md +89 -0
- loop_engineer-0.7.0/skills/loop-inspector/SKILL.md +143 -0
- loop_engineer-0.7.0/skills/loop-inspector/reference/patterns.md +133 -0
- loop_engineer-0.7.0/skills/loop-repair/SKILL.md +109 -0
- loop_engineer-0.7.0/skills/loop-run/SKILL.md +105 -0
- loop_engineer-0.7.0/skills/loop-runtime-monitor/SKILL.md +71 -0
- loop_engineer-0.7.0/skills/loop-runtime-monitor/reference/patterns.md +75 -0
- loop_engineer-0.7.0/templates/AGENTS.md.tmpl +67 -0
- loop_engineer-0.7.0/templates/EVALS-rubric.md.tmpl +114 -0
- loop_engineer-0.7.0/templates/RUNLOG.md.tmpl +42 -0
- loop_engineer-0.7.0/templates/SPEC.md.tmpl +61 -0
- loop_engineer-0.7.0/templates/TASKS.json.tmpl +23 -0
- loop_engineer-0.7.0/templates/WORKFLOW.md.tmpl +84 -0
- loop_engineer-0.7.0/templates/extract-trace-metrics.sh +27 -0
- loop_engineer-0.7.0/templates/judge-rubric.sh +28 -0
- loop_engineer-0.7.0/templates/manifest.yaml.tmpl +47 -0
- loop_engineer-0.7.0/templates/state.json.tmpl +38 -0
- loop_engineer-0.7.0/templates/terminal_state.json.tmpl +13 -0
- loop_engineer-0.7.0/templates/verify-fast.sh +27 -0
- loop_engineer-0.7.0/templates/verify-full.sh +34 -0
- loop_engineer-0.7.0/templates/verify-safety.sh +35 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "loop-engineer",
|
|
3
|
+
"owner": { "name": "SollanSystems", "url": "https://github.com/SollanSystems" },
|
|
4
|
+
"plugins": [
|
|
5
|
+
{ "name": "loop-engineer", "source": "./", "description": "Agent-loop architect+operator skill suite — design, run, verify, repair, and improve agentic coding loops." }
|
|
6
|
+
]
|
|
7
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "loop-engineer",
|
|
3
|
+
"version": "0.7.0",
|
|
4
|
+
"description": "Design, launch, verify, repair, and improve agent loops. A Claude-Code-native architect+operator for long-running, verifiable, self-improving agentic-coding systems.",
|
|
5
|
+
"author": { "name": "Sollan Systems", "url": "https://github.com/SollanSystems" },
|
|
6
|
+
"homepage": "https://github.com/SollanSystems/loop-engineer",
|
|
7
|
+
"repository": "https://github.com/SollanSystems/loop-engineer",
|
|
8
|
+
"keywords": ["agent", "loop", "agentic", "verification", "harness", "orchestration", "self-improvement", "claude-code", "eval", "repair"],
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"hooks": {
|
|
11
|
+
"Stop": [
|
|
12
|
+
{
|
|
13
|
+
"matcher": "",
|
|
14
|
+
"hooks": [
|
|
15
|
+
{
|
|
16
|
+
"type": "command",
|
|
17
|
+
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/hooks/stop_firewall.py",
|
|
18
|
+
"timeout": 90
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: A skill, the portable CLI, or a gate behaves incorrectly
|
|
4
|
+
title: "bug: "
|
|
5
|
+
labels: bug
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## What happened
|
|
9
|
+
|
|
10
|
+
<!-- The incorrect behavior. If a skill misbehaved, name it (e.g. loop-run). -->
|
|
11
|
+
|
|
12
|
+
## Expected
|
|
13
|
+
|
|
14
|
+
<!-- What you expected instead. -->
|
|
15
|
+
|
|
16
|
+
## Reproduction
|
|
17
|
+
|
|
18
|
+
<!-- Minimal steps. For the portable core, include the command, e.g.:
|
|
19
|
+
python3 -m loop doctor path/to/workspace -->
|
|
20
|
+
|
|
21
|
+
## Environment
|
|
22
|
+
|
|
23
|
+
- Loop Engineer version (`plugin.json` / git tag):
|
|
24
|
+
- Claude Code version (if the plugin path):
|
|
25
|
+
- Python version (`python3 --version`):
|
|
26
|
+
- OS:
|
|
27
|
+
|
|
28
|
+
## Gate output (if relevant)
|
|
29
|
+
|
|
30
|
+
<!-- Paste output of the failing gate:
|
|
31
|
+
python3 scripts/self_eval.py / python3 -m pytest -q scripts -->
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
blank_issues_enabled: false
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: Security vulnerability
|
|
4
|
+
url: https://github.com/SollanSystems/loop-engineer/security/advisories/new
|
|
5
|
+
about: Report security issues privately — please do not open a public issue.
|
|
6
|
+
- name: Question / discussion
|
|
7
|
+
url: https://github.com/SollanSystems/loop-engineer/discussions
|
|
8
|
+
about: Ask a question or discuss an idea before filing an issue.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature request
|
|
3
|
+
about: Propose a new capability, skill, or contract element
|
|
4
|
+
title: "feat: "
|
|
5
|
+
labels: enhancement
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Problem
|
|
9
|
+
|
|
10
|
+
<!-- The loop-engineering problem this would solve. What fails or is awkward today? -->
|
|
11
|
+
|
|
12
|
+
## Proposed change
|
|
13
|
+
|
|
14
|
+
<!-- Which spoke, reference doc, schema, or gate it touches. -->
|
|
15
|
+
|
|
16
|
+
## Does it preserve the invariants?
|
|
17
|
+
|
|
18
|
+
<!-- Loop Engineer keeps a few load-bearing properties. Note how your idea fits:
|
|
19
|
+
- typed termination (the 7 terminal states)
|
|
20
|
+
- deterministic gate before advisory rubric
|
|
21
|
+
- bring-your-own-verifier default (no hard dependency on unbundled tools)
|
|
22
|
+
- bounded, recorded repair -->
|
|
23
|
+
|
|
24
|
+
## Alternatives considered
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!-- Conventional-commit title, e.g. "fix(loop-run): ..." -->
|
|
2
|
+
|
|
3
|
+
## What & why
|
|
4
|
+
|
|
5
|
+
<!-- The change and the problem it solves. Link any issue (Closes #N). -->
|
|
6
|
+
|
|
7
|
+
## Gates (must be green)
|
|
8
|
+
|
|
9
|
+
- [ ] `python3 scripts/validate_frontmatter.py`
|
|
10
|
+
- [ ] `python3 scripts/self_eval.py` (13/13)
|
|
11
|
+
- [ ] `python3 -m pytest -q scripts`
|
|
12
|
+
- [ ] `python3 -m py_compile loop/*.py scripts/*.py`
|
|
13
|
+
- [ ] `python3 -m loop doctor examples/coverage-repair` still passes
|
|
14
|
+
|
|
15
|
+
## Checklist
|
|
16
|
+
|
|
17
|
+
- [ ] If a skill mentions an optional integration, it also names the bundled default path (BYO-default)
|
|
18
|
+
- [ ] Any agent-dispatch code fence names an explicit `model:`
|
|
19
|
+
- [ ] Added a test/eval case for any fixed bug
|
|
20
|
+
- [ ] Updated `CHANGELOG.md` under `## Unreleased`
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
gates:
|
|
10
|
+
name: gates (py${{ matrix.python-version }})
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
fail-fast: false
|
|
14
|
+
matrix:
|
|
15
|
+
python-version: ["3.10", "3.11", "3.12"]
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: ${{ matrix.python-version }}
|
|
22
|
+
|
|
23
|
+
- name: Install gate dependencies
|
|
24
|
+
run: python -m pip install --upgrade pip pyyaml pytest jsonschema
|
|
25
|
+
|
|
26
|
+
- name: Frontmatter gate
|
|
27
|
+
run: python -B scripts/validate_frontmatter.py
|
|
28
|
+
|
|
29
|
+
- name: Structural self-eval gate
|
|
30
|
+
run: python -B scripts/self_eval.py
|
|
31
|
+
|
|
32
|
+
- name: Test suite
|
|
33
|
+
run: python -B -m pytest -q -p no:cacheprovider scripts
|
|
34
|
+
|
|
35
|
+
- name: Compile portable core
|
|
36
|
+
run: python -B -m py_compile loop/*.py scripts/*.py
|
|
37
|
+
|
|
38
|
+
- name: Manifests and schemas are valid JSON
|
|
39
|
+
run: |
|
|
40
|
+
python -B -c "import json, glob; \
|
|
41
|
+
files = ['.claude-plugin/plugin.json', '.claude-plugin/marketplace.json'] \
|
|
42
|
+
+ glob.glob('schemas/*.json') + glob.glob('evals/**/*.json', recursive=True); \
|
|
43
|
+
[json.load(open(f)) for f in files]; \
|
|
44
|
+
print(f'valid JSON: {len(files)} files')"
|
|
45
|
+
|
|
46
|
+
- name: Quickstart smoke test
|
|
47
|
+
run: |
|
|
48
|
+
python -B -m loop doctor examples/coverage-repair
|
|
49
|
+
python -B -m loop inspect examples/coverage-repair
|
|
50
|
+
|
|
51
|
+
recipe-langgraph:
|
|
52
|
+
name: recipe (langgraph)
|
|
53
|
+
runs-on: ubuntu-latest
|
|
54
|
+
steps:
|
|
55
|
+
- uses: actions/checkout@v4
|
|
56
|
+
- uses: actions/setup-python@v5
|
|
57
|
+
with:
|
|
58
|
+
python-version: "3.12"
|
|
59
|
+
- name: Install recipe dependencies
|
|
60
|
+
run: python -m pip install --upgrade pip pyyaml pytest jsonschema langgraph
|
|
61
|
+
- name: LangGraph recipe end-to-end
|
|
62
|
+
run: python -B -m pytest -q -p no:cacheprovider scripts/test_langgraph_recipe.py
|
|
63
|
+
|
|
64
|
+
action-dogfood:
|
|
65
|
+
name: action (dogfood on flagship example)
|
|
66
|
+
runs-on: ubuntu-latest
|
|
67
|
+
steps:
|
|
68
|
+
- uses: actions/checkout@v4
|
|
69
|
+
# The repo root's live .loop/ is gitignored, so it does not exist in a fresh
|
|
70
|
+
# CI checkout — the tracked flagship example is the contract the action gates
|
|
71
|
+
# (doctor-clean, inspect 90/strong in the action's dependency-free install).
|
|
72
|
+
- uses: ./
|
|
73
|
+
with:
|
|
74
|
+
path: "examples/coverage-repair"
|
|
75
|
+
fail-under-score: "90"
|
|
76
|
+
|
|
77
|
+
- name: pre-commit consumer fixture
|
|
78
|
+
# bare `python` is on PATH here because the preceding `uses: ./` composite step ran setup-python
|
|
79
|
+
# (persisted via GITHUB_PATH) — keep the action step before this one.
|
|
80
|
+
run: |
|
|
81
|
+
python -m pip install --quiet pre-commit pytest pyyaml
|
|
82
|
+
python -B -m pytest -q -p no:cacheprovider scripts/test_precommit_hook.py
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
name: publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
build:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v4
|
|
12
|
+
|
|
13
|
+
- uses: actions/setup-python@v5
|
|
14
|
+
with:
|
|
15
|
+
python-version: "3.12"
|
|
16
|
+
|
|
17
|
+
- name: Tag matches pyproject version
|
|
18
|
+
run: |
|
|
19
|
+
tag="${GITHUB_REF_NAME#v}"
|
|
20
|
+
version="$(python -c 'import tomllib; print(tomllib.load(open("pyproject.toml","rb"))["project"]["version"])')"
|
|
21
|
+
if [ "$tag" != "$version" ]; then
|
|
22
|
+
echo "tag v$tag != pyproject version $version" >&2
|
|
23
|
+
exit 1
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
- name: Build sdist + wheel
|
|
27
|
+
run: |
|
|
28
|
+
python -m pip install --upgrade build
|
|
29
|
+
python -m build
|
|
30
|
+
|
|
31
|
+
- name: Smoke-test the wheel from a temp dir
|
|
32
|
+
run: |
|
|
33
|
+
python -m venv /tmp/smoke
|
|
34
|
+
/tmp/smoke/bin/pip install --no-index dist/*.whl
|
|
35
|
+
cd /tmp
|
|
36
|
+
/tmp/smoke/bin/loop-engineer --version
|
|
37
|
+
/tmp/smoke/bin/loop scaffold /tmp/smoke-loop
|
|
38
|
+
/tmp/smoke/bin/loop doctor /tmp/smoke-loop
|
|
39
|
+
/tmp/smoke/bin/loop inspect /tmp/smoke-loop || true
|
|
40
|
+
|
|
41
|
+
- uses: actions/upload-artifact@v4
|
|
42
|
+
with:
|
|
43
|
+
name: dist
|
|
44
|
+
path: dist/
|
|
45
|
+
|
|
46
|
+
publish:
|
|
47
|
+
needs: build
|
|
48
|
+
runs-on: ubuntu-latest
|
|
49
|
+
environment: pypi
|
|
50
|
+
permissions:
|
|
51
|
+
id-token: write
|
|
52
|
+
steps:
|
|
53
|
+
- uses: actions/download-artifact@v4
|
|
54
|
+
with:
|
|
55
|
+
name: dist
|
|
56
|
+
path: dist/
|
|
57
|
+
|
|
58
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Ephemeral workbench
|
|
2
|
+
.tmp/
|
|
3
|
+
|
|
4
|
+
# Loop run telemetry (operating-contract state for the self-improvement run; not plugin content)
|
|
5
|
+
.loop/
|
|
6
|
+
|
|
7
|
+
# Machine-local Claude Code config + GSD audit telemetry (not plugin content)
|
|
8
|
+
.claude/
|
|
9
|
+
.gsd/
|
|
10
|
+
|
|
11
|
+
# Local session memory / private build narrative (not plugin content)
|
|
12
|
+
memory/
|
|
13
|
+
|
|
14
|
+
# Workbench dirs (review scratch + roadmap drafts; not plugin content)
|
|
15
|
+
review/
|
|
16
|
+
roadmap/
|
|
17
|
+
|
|
18
|
+
# Python
|
|
19
|
+
__pycache__/
|
|
20
|
+
*.pyc
|
|
21
|
+
.venv/
|
|
22
|
+
.pytest_cache/
|
|
23
|
+
# uv resolution lock — the core declares no required runtime deps; CI uses pip, not `uv sync`
|
|
24
|
+
uv.lock
|
|
25
|
+
|
|
26
|
+
# Node
|
|
27
|
+
node_modules/
|
|
28
|
+
|
|
29
|
+
# OS / editor
|
|
30
|
+
.DS_Store
|
|
31
|
+
Thumbs.db
|
|
32
|
+
|
|
33
|
+
# Secrets — never commit
|
|
34
|
+
.env
|
|
35
|
+
*.local
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
- id: loop-doctor
|
|
2
|
+
name: loop doctor (loop-contract validity gate)
|
|
3
|
+
description: "Validate the repo's .loop/ contract objects; fails on a dishonest or malformed contract."
|
|
4
|
+
entry: loop doctor .
|
|
5
|
+
language: python
|
|
6
|
+
# The CLI default is pure-stdlib structural validation; the gate surface runs
|
|
7
|
+
# the strict path. pre-commit installs these into the hook's isolated env so
|
|
8
|
+
# loop/contract.py takes the jsonschema branch and PyYAML parses the manifest.
|
|
9
|
+
additional_dependencies: ["jsonschema>=4", "pyyaml>=6"]
|
|
10
|
+
pass_filenames: false
|
|
11
|
+
always_run: true
|