trueline 0.1.0.dev0__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.
- trueline-0.1.0.dev0/.gitignore +15 -0
- trueline-0.1.0.dev0/.gitlab-ci.yml +38 -0
- trueline-0.1.0.dev0/.python-version +1 -0
- trueline-0.1.0.dev0/CLAUDE.md +220 -0
- trueline-0.1.0.dev0/LICENSE +21 -0
- trueline-0.1.0.dev0/PKG-INFO +57 -0
- trueline-0.1.0.dev0/README.md +33 -0
- trueline-0.1.0.dev0/THIRD-PARTY-NOTICES.md +38 -0
- trueline-0.1.0.dev0/docs/ASSETS-REVIEW.md +276 -0
- trueline-0.1.0.dev0/docs/DESIGN.md +455 -0
- trueline-0.1.0.dev0/docs/M1-E2E-PLAN.md +389 -0
- trueline-0.1.0.dev0/docs/M1-HANDOFF.md +75 -0
- trueline-0.1.0.dev0/docs/M1-SPEC.md +641 -0
- trueline-0.1.0.dev0/docs/M2-ASSETS.md +1206 -0
- trueline-0.1.0.dev0/docs/M2-E2E-PLAN.md +398 -0
- trueline-0.1.0.dev0/docs/M2-HANDOFF.md +612 -0
- trueline-0.1.0.dev0/docs/M2-IMPL-PLAN.md +904 -0
- trueline-0.1.0.dev0/docs/M2-SPEC.md +653 -0
- trueline-0.1.0.dev0/docs/M3-E2E-PLAN.md +761 -0
- trueline-0.1.0.dev0/docs/M3-FOLLOWUP-HANDOFF.md +163 -0
- trueline-0.1.0.dev0/docs/M3-HANDOFF.md +126 -0
- trueline-0.1.0.dev0/docs/M3-IMPL-PLAN.md +717 -0
- trueline-0.1.0.dev0/docs/M3-SPEC.md +745 -0
- trueline-0.1.0.dev0/docs/M4-ASSETS.md +1320 -0
- trueline-0.1.0.dev0/docs/M4-E2E-PLAN.md +1244 -0
- trueline-0.1.0.dev0/docs/M4-HANDOFF.md +325 -0
- trueline-0.1.0.dev0/docs/M4-IMPL-PLAN.md +1292 -0
- trueline-0.1.0.dev0/docs/M4-SPEC.md +1594 -0
- trueline-0.1.0.dev0/docs/POST-M4-DESIGN.md +449 -0
- trueline-0.1.0.dev0/docs/PROJECT-REVIEW.md +330 -0
- trueline-0.1.0.dev0/docs/PROMPT-NEXT-SESSION.md +42 -0
- trueline-0.1.0.dev0/docs/PUBLICATION-HANDOFF.md +157 -0
- trueline-0.1.0.dev0/docs/STATE.md +140 -0
- trueline-0.1.0.dev0/pyproject.toml +73 -0
- trueline-0.1.0.dev0/scripts/publish.sh +20 -0
- trueline-0.1.0.dev0/src/trueline/__init__.py +1 -0
- trueline-0.1.0.dev0/src/trueline/__main__.py +9 -0
- trueline-0.1.0.dev0/src/trueline/adoption/__init__.py +72 -0
- trueline-0.1.0.dev0/src/trueline/adoption/assemble.py +270 -0
- trueline-0.1.0.dev0/src/trueline/adoption/derive.py +143 -0
- trueline-0.1.0.dev0/src/trueline/adoption/facts.py +211 -0
- trueline-0.1.0.dev0/src/trueline/adoption/fingerprint.py +36 -0
- trueline-0.1.0.dev0/src/trueline/adoption/parse.py +188 -0
- trueline-0.1.0.dev0/src/trueline/adoption/records.py +184 -0
- trueline-0.1.0.dev0/src/trueline/adoption/scan.py +103 -0
- trueline-0.1.0.dev0/src/trueline/adoption/universe.py +54 -0
- trueline-0.1.0.dev0/src/trueline/adr/__init__.py +24 -0
- trueline-0.1.0.dev0/src/trueline/adr/parse.py +48 -0
- trueline-0.1.0.dev0/src/trueline/adr/project.py +64 -0
- trueline-0.1.0.dev0/src/trueline/adr/validate.py +211 -0
- trueline-0.1.0.dev0/src/trueline/amendments.py +47 -0
- trueline-0.1.0.dev0/src/trueline/assets/ci/trueline-validate.yml +22 -0
- trueline-0.1.0.dev0/src/trueline/assets/hooks/post-merge +4 -0
- trueline-0.1.0.dev0/src/trueline/assets/hooks/pre-push +6 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/adr-deriver.md +54 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/architecture-review.md +48 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/architecture-synthesis.md +34 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/assembler.md +52 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/capability-planner.md +44 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/charter-review.md +26 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/ci-semantic.md +28 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/clarify.md +43 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/constitution-check.md +52 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/decompose-judge.md +54 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/describer.md +83 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/judge.md +39 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/recon.md +60 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/scanner.md +31 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/skeptic.md +45 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/synthesizer.md +27 -0
- trueline-0.1.0.dev0/src/trueline/assets/instructions/validator.md +67 -0
- trueline-0.1.0.dev0/src/trueline/assets/taxonomy.md +31 -0
- trueline-0.1.0.dev0/src/trueline/assets/templates/architecture-setup.md +50 -0
- trueline-0.1.0.dev0/src/trueline/assets/templates/build.md +33 -0
- trueline-0.1.0.dev0/src/trueline/assets/templates/charter.md +32 -0
- trueline-0.1.0.dev0/src/trueline/assets/templates/constitution.md +45 -0
- trueline-0.1.0.dev0/src/trueline/assets/templates/decompose.md +51 -0
- trueline-0.1.0.dev0/src/trueline/assets/templates/implementation-report.md +14 -0
- trueline-0.1.0.dev0/src/trueline/assets/templates/plan.md +83 -0
- trueline-0.1.0.dev0/src/trueline/assets/templates/propose.md +64 -0
- trueline-0.1.0.dev0/src/trueline/checks/__init__.py +19 -0
- trueline-0.1.0.dev0/src/trueline/checks/battery.py +1316 -0
- trueline-0.1.0.dev0/src/trueline/checks/context.py +40 -0
- trueline-0.1.0.dev0/src/trueline/clarifications.py +56 -0
- trueline-0.1.0.dev0/src/trueline/cli/__init__.py +93 -0
- trueline-0.1.0.dev0/src/trueline/cli/adopt_cmds.py +846 -0
- trueline-0.1.0.dev0/src/trueline/cli/adopt_gate.py +678 -0
- trueline-0.1.0.dev0/src/trueline/cli/adopt_run.py +143 -0
- trueline-0.1.0.dev0/src/trueline/cli/adr_cmd.py +55 -0
- trueline-0.1.0.dev0/src/trueline/cli/assets_util.py +8 -0
- trueline-0.1.0.dev0/src/trueline/cli/clarify_cmd.py +175 -0
- trueline-0.1.0.dev0/src/trueline/cli/conversation.py +65 -0
- trueline-0.1.0.dev0/src/trueline/cli/finalize_cmds.py +275 -0
- trueline-0.1.0.dev0/src/trueline/cli/governance_cmds.py +389 -0
- trueline-0.1.0.dev0/src/trueline/cli/init_cmd.py +607 -0
- trueline-0.1.0.dev0/src/trueline/cli/output.py +39 -0
- trueline-0.1.0.dev0/src/trueline/cli/phase_cmds.py +603 -0
- trueline-0.1.0.dev0/src/trueline/cli/project.py +104 -0
- trueline-0.1.0.dev0/src/trueline/cli/roles.py +513 -0
- trueline-0.1.0.dev0/src/trueline/cli/runtime_opts.py +32 -0
- trueline-0.1.0.dev0/src/trueline/cli/status_cmd.py +60 -0
- trueline-0.1.0.dev0/src/trueline/cli/template_cmd.py +29 -0
- trueline-0.1.0.dev0/src/trueline/cli/validate_cmd.py +209 -0
- trueline-0.1.0.dev0/src/trueline/conformance.py +111 -0
- trueline-0.1.0.dev0/src/trueline/fold/__init__.py +35 -0
- trueline-0.1.0.dev0/src/trueline/fold/apply.py +117 -0
- trueline-0.1.0.dev0/src/trueline/fold/parser.py +316 -0
- trueline-0.1.0.dev0/src/trueline/fold/validate.py +256 -0
- trueline-0.1.0.dev0/src/trueline/gates/__init__.py +26 -0
- trueline-0.1.0.dev0/src/trueline/gates/executor.py +40 -0
- trueline-0.1.0.dev0/src/trueline/gates/facts.py +151 -0
- trueline-0.1.0.dev0/src/trueline/gates/table.py +83 -0
- trueline-0.1.0.dev0/src/trueline/gitio.py +239 -0
- trueline-0.1.0.dev0/src/trueline/governance.py +196 -0
- trueline-0.1.0.dev0/src/trueline/invoke/__init__.py +56 -0
- trueline-0.1.0.dev0/src/trueline/invoke/drivers.py +212 -0
- trueline-0.1.0.dev0/src/trueline/invoke/interactive.py +333 -0
- trueline-0.1.0.dev0/src/trueline/invoke/policy.py +115 -0
- trueline-0.1.0.dev0/src/trueline/invoke/request.py +159 -0
- trueline-0.1.0.dev0/src/trueline/judge/__init__.py +52 -0
- trueline-0.1.0.dev0/src/trueline/judge/errors.py +13 -0
- trueline-0.1.0.dev0/src/trueline/judge/loop.py +201 -0
- trueline-0.1.0.dev0/src/trueline/judge/precondition.py +99 -0
- trueline-0.1.0.dev0/src/trueline/judge/workspace.py +143 -0
- trueline-0.1.0.dev0/src/trueline/judge/write.py +135 -0
- trueline-0.1.0.dev0/src/trueline/py.typed +0 -0
- trueline-0.1.0.dev0/src/trueline/schemas/__init__.py +62 -0
- trueline-0.1.0.dev0/src/trueline/schemas/adoption.py +289 -0
- trueline-0.1.0.dev0/src/trueline/schemas/adr.py +37 -0
- trueline-0.1.0.dev0/src/trueline/schemas/base.py +43 -0
- trueline-0.1.0.dev0/src/trueline/schemas/change.py +34 -0
- trueline-0.1.0.dev0/src/trueline/schemas/clarify.py +17 -0
- trueline-0.1.0.dev0/src/trueline/schemas/config.py +138 -0
- trueline-0.1.0.dev0/src/trueline/schemas/control.py +100 -0
- trueline-0.1.0.dev0/src/trueline/schemas/finding.py +10 -0
- trueline-0.1.0.dev0/src/trueline/state/__init__.py +63 -0
- trueline-0.1.0.dev0/src/trueline/state/derive.py +98 -0
- trueline-0.1.0.dev0/src/trueline/state/init_state.py +86 -0
- trueline-0.1.0.dev0/src/trueline/state/inventory.py +244 -0
- trueline-0.1.0.dev0/stderr.txt +1 -0
- trueline-0.1.0.dev0/tests/__init__.py +0 -0
- trueline-0.1.0.dev0/tests/adoption/__init__.py +0 -0
- trueline-0.1.0.dev0/tests/adoption/test_assemble.py +208 -0
- trueline-0.1.0.dev0/tests/adoption/test_derive.py +85 -0
- trueline-0.1.0.dev0/tests/adoption/test_fingerprint.py +99 -0
- trueline-0.1.0.dev0/tests/adoption/test_parse.py +138 -0
- trueline-0.1.0.dev0/tests/adoption/test_scan.py +96 -0
- trueline-0.1.0.dev0/tests/adr/__init__.py +0 -0
- trueline-0.1.0.dev0/tests/adr/test_parse.py +78 -0
- trueline-0.1.0.dev0/tests/adr/test_project.py +105 -0
- trueline-0.1.0.dev0/tests/adr/test_validate.py +295 -0
- trueline-0.1.0.dev0/tests/checks/__init__.py +0 -0
- trueline-0.1.0.dev0/tests/checks/test_adoption_battery.py +388 -0
- trueline-0.1.0.dev0/tests/checks/test_battery.py +965 -0
- trueline-0.1.0.dev0/tests/cli/__init__.py +0 -0
- trueline-0.1.0.dev0/tests/cli/test_adopt_assemble.py +239 -0
- trueline-0.1.0.dev0/tests/cli/test_adopt_gate.py +668 -0
- trueline-0.1.0.dev0/tests/cli/test_adopt_run.py +223 -0
- trueline-0.1.0.dev0/tests/cli/test_adopt_scan_describe.py +405 -0
- trueline-0.1.0.dev0/tests/cli/test_adopt_validate_reopen.py +276 -0
- trueline-0.1.0.dev0/tests/cli/test_asset_calibrations.py +120 -0
- trueline-0.1.0.dev0/tests/cli/test_clarify_commands.py +358 -0
- trueline-0.1.0.dev0/tests/cli/test_conversation.py +55 -0
- trueline-0.1.0.dev0/tests/cli/test_core_commands.py +600 -0
- trueline-0.1.0.dev0/tests/cli/test_entrypoint.py +51 -0
- trueline-0.1.0.dev0/tests/cli/test_finalize_commands.py +405 -0
- trueline-0.1.0.dev0/tests/cli/test_governance_commands.py +431 -0
- trueline-0.1.0.dev0/tests/cli/test_governance_edge_commit.py +162 -0
- trueline-0.1.0.dev0/tests/cli/test_init_assisted.py +599 -0
- trueline-0.1.0.dev0/tests/cli/test_init_brownfield.py +191 -0
- trueline-0.1.0.dev0/tests/cli/test_phase_commands.py +1056 -0
- trueline-0.1.0.dev0/tests/cli/test_roles.py +36 -0
- trueline-0.1.0.dev0/tests/cli/test_template_cmd.py +45 -0
- trueline-0.1.0.dev0/tests/factories.py +139 -0
- trueline-0.1.0.dev0/tests/fold/__init__.py +0 -0
- trueline-0.1.0.dev0/tests/fold/parity/fixtures.json +108 -0
- trueline-0.1.0.dev0/tests/fold/parity/generate_fixtures.mts +399 -0
- trueline-0.1.0.dev0/tests/fold/test_apply.py +183 -0
- trueline-0.1.0.dev0/tests/fold/test_apply_parity.py +41 -0
- trueline-0.1.0.dev0/tests/fold/test_parser.py +155 -0
- trueline-0.1.0.dev0/tests/fold/test_validate.py +196 -0
- trueline-0.1.0.dev0/tests/gates/__init__.py +0 -0
- trueline-0.1.0.dev0/tests/gates/test_executor.py +134 -0
- trueline-0.1.0.dev0/tests/gates/test_facts.py +164 -0
- trueline-0.1.0.dev0/tests/invoke/__init__.py +0 -0
- trueline-0.1.0.dev0/tests/invoke/test_drivers.py +303 -0
- trueline-0.1.0.dev0/tests/invoke/test_interactive.py +455 -0
- trueline-0.1.0.dev0/tests/invoke/test_policy.py +68 -0
- trueline-0.1.0.dev0/tests/invoke/test_request.py +121 -0
- trueline-0.1.0.dev0/tests/judge/__init__.py +0 -0
- trueline-0.1.0.dev0/tests/judge/test_loop.py +352 -0
- trueline-0.1.0.dev0/tests/judge/test_precondition.py +109 -0
- trueline-0.1.0.dev0/tests/judge/test_workspace.py +148 -0
- trueline-0.1.0.dev0/tests/judge/test_write.py +205 -0
- trueline-0.1.0.dev0/tests/schemas/__init__.py +0 -0
- trueline-0.1.0.dev0/tests/schemas/test_adoption.py +280 -0
- trueline-0.1.0.dev0/tests/schemas/test_adr.py +103 -0
- trueline-0.1.0.dev0/tests/schemas/test_base.py +63 -0
- trueline-0.1.0.dev0/tests/schemas/test_change.py +82 -0
- trueline-0.1.0.dev0/tests/schemas/test_config.py +249 -0
- trueline-0.1.0.dev0/tests/schemas/test_control.py +230 -0
- trueline-0.1.0.dev0/tests/state/__init__.py +0 -0
- trueline-0.1.0.dev0/tests/state/test_derive.py +197 -0
- trueline-0.1.0.dev0/tests/state/test_init_state.py +65 -0
- trueline-0.1.0.dev0/tests/state/test_inventory.py +267 -0
- trueline-0.1.0.dev0/tests/test_amendments.py +47 -0
- trueline-0.1.0.dev0/tests/test_clarifications.py +55 -0
- trueline-0.1.0.dev0/tests/test_conformance.py +105 -0
- trueline-0.1.0.dev0/tests/test_gitio.py +254 -0
- trueline-0.1.0.dev0/tests/test_governance.py +248 -0
- trueline-0.1.0.dev0/tests/test_smoke.py +33 -0
- trueline-0.1.0.dev0/uv.lock +914 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# You can override the included template(s) by including variable overrides
|
|
2
|
+
# SAST customization: https://docs.gitlab.com/user/application_security/sast/#available-cicd-variables
|
|
3
|
+
# Secret Detection customization: https://docs.gitlab.com/user/application_security/secret_detection/pipeline/configure/
|
|
4
|
+
# Dependency Scanning customization: https://docs.gitlab.com/user/application_security/dependency_scanning/dependency_scanning_sbom/#customizing-analyzer-behavior
|
|
5
|
+
# Container Scanning customization: https://docs.gitlab.com/user/application_security/container_scanning/#customizing-analyzer-behavior
|
|
6
|
+
# Note that environment variables can be set in several places
|
|
7
|
+
# See https://docs.gitlab.com/ci/variables/#cicd-variable-precedence
|
|
8
|
+
stages:
|
|
9
|
+
- test
|
|
10
|
+
- secret-detection
|
|
11
|
+
sast:
|
|
12
|
+
stage: test
|
|
13
|
+
include:
|
|
14
|
+
- template: Security/SAST.gitlab-ci.yml
|
|
15
|
+
- template: Security/Secret-Detection.gitlab-ci.yml
|
|
16
|
+
variables:
|
|
17
|
+
SECRET_DETECTION_ENABLED: 'true'
|
|
18
|
+
secret_detection:
|
|
19
|
+
stage: secret-detection
|
|
20
|
+
lint-test:
|
|
21
|
+
stage: test
|
|
22
|
+
image: ghcr.io/astral-sh/uv:python3.12-bookworm-slim
|
|
23
|
+
variables:
|
|
24
|
+
UV_CACHE_DIR: .uv-cache
|
|
25
|
+
cache:
|
|
26
|
+
key:
|
|
27
|
+
files: [uv.lock]
|
|
28
|
+
paths: [.uv-cache]
|
|
29
|
+
before_script:
|
|
30
|
+
# The slim uv image ships neither git (the test suite spawns real `git`
|
|
31
|
+
# subprocesses) nor libatomic.so.1 (pyright-python's bundled Node needs it).
|
|
32
|
+
- apt-get update && apt-get install -y --no-install-recommends git libatomic1
|
|
33
|
+
script:
|
|
34
|
+
- uv sync --locked
|
|
35
|
+
- uv run ruff check .
|
|
36
|
+
- uv run ruff format --check .
|
|
37
|
+
- uv run pyright
|
|
38
|
+
- uv run pytest
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## What this is
|
|
6
|
+
|
|
7
|
+
`trueline` is a **Spec-Driven Development (SDD) framework for Claude Code users**: specs and
|
|
8
|
+
architecture are living documents and the source of truth; code is regenerable output. It is a Python
|
|
9
|
+
CLI (`trueline`) over a **headless core** (files + derived state + a deterministic CLI) that an
|
|
10
|
+
**external orchestrator** drives phase-by-phase, invoking the project's own Claude Code headless.
|
|
11
|
+
|
|
12
|
+
This is its **own independent git repo** (no remote yet — work on `main`). It lives inside the
|
|
13
|
+
`dsb-ai-flow` VS Code workspace alongside four sibling SDD projects — `../OpenSpec/`, `../spec-kit/`,
|
|
14
|
+
`../agentspec/`, `../everything-claude-code/` — which are **used as reference** (trueline steals the
|
|
15
|
+
spec fold from OpenSpec, the constitution/clarify/templates from spec-kit, the PRP/build-loop/drift
|
|
16
|
+
validators from ECC). When grounding a design decision, read the relevant sibling's real code.
|
|
17
|
+
|
|
18
|
+
## `docs/` is the source of truth — read it first
|
|
19
|
+
|
|
20
|
+
The methodology and the entire multi-milestone plan live in `docs/`, in a strict authority order:
|
|
21
|
+
|
|
22
|
+
- **`STATE.md`** — the **consolidated project-state snapshot** (what/where/how/what-remains). Start
|
|
23
|
+
here for quick orientation; the docs below remain the source of truth for details.
|
|
24
|
+
- **`DESIGN.md`** — the conceptual design (v5), the **top authority**. On any conflict, the design wins.
|
|
25
|
+
- **`M1-SPEC.md`, `M2-SPEC.md`, `M3-SPEC.md`, `M4-SPEC.md`** — the technical *what*, decided
|
|
26
|
+
section-by-section. The source of truth for the implementation. Errata are recorded in the doc
|
|
27
|
+
headers, never by a general re-review. (`M4-SPEC.md` is COMPLETE + **FINAL (r7)** — seven
|
|
28
|
+
adversarial review rounds, stamps in its header.)
|
|
29
|
+
- **`M4-HANDOFF.md`** — the **single current handoff** (start here): M4 is **IMPLEMENTED** and
|
|
30
|
+
green, and **`M4-E2E-PLAN.md` is authored + APPROVED (2026-07-10, pre-execution)**; the next
|
|
31
|
+
sessions **execute the M4 E2E, one phase per session** (session 1 = guinea-pig selection
|
|
32
|
+
against the plan's §1 profile + preflight + Phase A), each session closing by updating the
|
|
33
|
+
plan's §8 record, the handoff and the kickoff. Supersedes `M3-FOLLOWUP-HANDOFF.md` +
|
|
34
|
+
`M3-HANDOFF.md` (both historical). The M3 calibration/errata/governance outcomes live in
|
|
35
|
+
`M3-E2E-PLAN.md` §8.
|
|
36
|
+
- **`M2-IMPL-PLAN.md` / `M2-ASSETS.md` / `*-E2E-PLAN.md`** — the *how* (per-step mini-designs), the
|
|
37
|
+
drafted assets, and the end-to-end validation records. `PROMPT-NEXT-SESSION.md` is the kickoff prompt.
|
|
38
|
+
|
|
39
|
+
**Current state:** M1 (skeleton), M2 (governance), M3 (the full loop) and **M4 (Brownfield) are
|
|
40
|
+
implemented AND E2E-validated.** M1/M2/M3 were E2E-validated with a real model and calibrated (the
|
|
41
|
+
M3 multi-stack E2E: 9/9 criteria; record in `M3-E2E-PLAN.md` §8). **M4 is now E2E-validated too
|
|
42
|
+
(2026-07-11): the four-session brownfield E2E closed with all eleven §6 criteria met — B2/B3 earn
|
|
43
|
+
promotion to HIGH; the "Is not" mechanical escalation is NOT ratified** (record + verdict in
|
|
44
|
+
`M4-E2E-PLAN.md` §8). **Publication (remote/CI/PyPI) is now UN-DEFERRED** (the M1/M2/M3 gate is
|
|
45
|
+
satisfied). The impl-plan's four steps all landed on `main` (steps 1 → 2 → 3 → 4a…4e, 19
|
|
46
|
+
commits `8952fab → 235282e`), the tree is clean, and CI is green — **875 tests** (872 through the
|
|
47
|
+
three reviews; **+3 with the M4-E2E Phase-B pre-run fix `e2edb24`** — the missing
|
|
48
|
+
`src/trueline/__main__.py`), ruff clean, ruff-format clean, **pyright strict 0 errors** (the M1–M3
|
|
49
|
+
baseline was 561; 790 at the end of implementation, 804 after the M4-only review, 831 after the
|
|
50
|
+
second review). A **post-implementation review** (2026-07-09,
|
|
51
|
+
`4d714e0 → e2e06e4`) audited the whole milestone (8 parallel auditors, each finding verified
|
|
52
|
+
against the code): completeness came back with **zero gaps**, and 6 real findings + a robustness
|
|
53
|
+
follow-up batch were fixed, each with tests. It ratified **three pointed errata — E1/E2/E3** — in
|
|
54
|
+
the `M4-SPEC.md`/`M4-IMPL-PLAN.md` headers (§2.5 assemble rebuild trigger; §4 item-7 dead-round
|
|
55
|
+
suite; §5 flip ordering); **no decision reversed**. A **second, whole-project review** (2026-07-09,
|
|
56
|
+
`d8e4d20 → 2a3a6b9`) then audited M1→M4 (12 parallel readers, each finding re-verified against the
|
|
57
|
+
code; two proposed schema-hardening items rejected for contradicting the layer design): **4 HIGH +
|
|
58
|
+
a batch of MEDIUM/LOW** fixed, each with a test — ratifying **`M4-SPEC.md` E4** (plan.md ADR
|
|
59
|
+
`scope:`) + the **E2 completion** (the dead-round-suite walk) and **`M3-SPEC.md` M3-a/M3-b**
|
|
60
|
+
(qualified `FULFILLS`; the single-per-line `MIRROR` example). A **third, fresh-eyes review**
|
|
61
|
+
(2026-07-09→10, `fce58e7 → 10fd659`, 11 readers told NOT to trust the prior fixes) then caught
|
|
62
|
+
real defects the two prior passes missed — chiefly a **systemic exit-code-contract hole**
|
|
63
|
+
(framework errors escaping to exit 1) — and, on fresh scrutiny, **fixed two items the second
|
|
64
|
+
review had accepted** (the heading-slug collision; config-encoding/resume): **8 clear bugs + 3
|
|
65
|
+
judgment calls + a 6-item LOW tail**, each with a test, ratifying a **`M4-SPEC.md §4` clarifying
|
|
66
|
+
errata** (validate runs the completion battery report-only) + the **E4 extension**
|
|
67
|
+
(`architecture-setup.md` scope gap). The full ledger + the accepted non-issues + the one deferred
|
|
68
|
+
follow-up (GOV-3: an atomic/resumable `init`) are in **`docs/PROJECT-REVIEW.md`**. The three M4 authoring docs are converged and closed:
|
|
69
|
+
**`M4-SPEC.md` FINAL (r7)** (12 sections, seven adversarial review rounds), **`M4-IMPL-PLAN.md`
|
|
70
|
+
COMPLETE, review CLOSED** (three rounds, ten passes), **`M4-ASSETS.md` COMPLETE (15/15), review
|
|
71
|
+
CLOSED and converged** (two rounds, eight passes) — never re-review them as a sweep; a real
|
|
72
|
+
defect becomes a pointed ratified erratum in the doc header. The M4 code lives across
|
|
73
|
+
`src/trueline/adoption/`, `src/trueline/gitio.py`, `src/trueline/cli/adopt_*.py`, and the new
|
|
74
|
+
checks/roles/assets. **`M4-E2E-PLAN.md` is authored and APPROVED (2026-07-10,
|
|
75
|
+
pre-execution)** — brainstormed decision by decision on the `M3-E2E-PLAN.md` mold: the
|
|
76
|
+
guinea-pig **selection profile** (§1 — a real, pre-existing multi-stack repo; no repo selected
|
|
77
|
+
yet), the harness split (FIFO+pump for `init`; a **real terminal** for `approve`'s TTY-checked
|
|
78
|
+
walk), Phases A–D + staged episodes + 10 extras, eleven success criteria and the two gated
|
|
79
|
+
decisions (B2/B3 promotion; the "Is not" escalation). The run executes **one phase per
|
|
80
|
+
session** (a user decision): each session closes by updating the plan's §8 record,
|
|
81
|
+
`M4-HANDOFF.md` and `PROMPT-NEXT-SESSION.md`. **Sessions 1 & 2 are DONE (2026-07-10):** per the §1
|
|
82
|
+
amendment the guinea pig is **purpose-built in-workspace** — `cobaia-brownfield/` ("linkstash":
|
|
83
|
+
FastAPI+SQLite `api` w/ a green pytest suite + TS/Node `cli` w/ no unit tests, over an HTTP `/api`
|
|
84
|
+
seam). Session 1: preflight + Phase A (brownfield `init` + two locals + three A-era extras;
|
|
85
|
+
charter 3 "Is not" bullets, #1 contradictable; global constitution's cross-part "Contract-only
|
|
86
|
+
seam" MUST). **Session 2: Phase B — the RE fan-out ran green** (scan → describe/validate with the
|
|
87
|
+
`cli` `did-not-run` demotion → capability-plan pause → assemble: 7 clean specs + 9 scoped ADRs +
|
|
88
|
+
B1 green → hotfix-sync staleness biting only app-core → §2.5 plan reconcile → E1 selective
|
|
89
|
+
re-assemble → 5 B-era extras). **One pre-run code fix (`e2edb24`, user-approved):** a missing
|
|
90
|
+
`src/trueline/__main__.py` blocked `adopt run`'s subprocess spawn (CI missed it — `_spawn` is
|
|
91
|
+
monkeypatched); **CI now 875 tests**, recorded in `PROJECT-REVIEW.md` (fifth finding). **Session 3:
|
|
92
|
+
Phase C — the completion gate ran green end-to-end (2026-07-10→11):** the dead round (excluded-file
|
|
93
|
+
commit → the api suite round dies, no module stale) → `status` pre-gate → the non-TTY `approve`
|
|
94
|
+
refusal (exit 2) → **`approve` #1** over a **pexpect pty** (the walk + the deliberate
|
|
95
|
+
decline→exit 2→resume-without-re-ask + a 5-finding skeptic → approval #1) → **the reopen cycle**
|
|
96
|
+
(3 constraint kinds on api/app-core + the E1 re-partition rider → **selective re-assemble: 3 rebuilt
|
|
97
|
+
/ 4 byte-identical**; the corpus-wide guard fired on a real code bug — `evidence_file` doesn't
|
|
98
|
+
recognize a line-RANGE EVIDENCE anchor — re-steered to single-line citation) → **`approve` #2**
|
|
99
|
+
(only the 5 changed identities re-asked; the three kinds resolving by their three paths; skeptic
|
|
100
|
+
re-sampled, 7 findings → approval #2) → **`flip`** (record-first → `governed`) → the **`--no-ff`
|
|
101
|
+
cutover** into `main` (`trueline validate` exit 0, both suites green, `status` sane). Every step
|
|
102
|
+
exit 0, all sonnet. **Session 4: Phase D — the post-flip measurement protocol ran green end-to-end
|
|
103
|
+
(2026-07-11):** D-1 arch-review (advisory, exit 0, 2 SUGGESTIONs) → **D-2** the clean seam-crossing
|
|
104
|
+
change `add-link-note` (FULL cycle to merge `ec6c3f6`: multi-layer conformance silent, **B2/B3
|
|
105
|
+
silent-on-clean**, seam extract consumed, qualified FULFILLS, **multi-file finalize candidate**
|
|
106
|
+
judged, **traceability index frozen**, both suites green) → **D-3 B2 fired + silent-after-correction**
|
|
107
|
+
→ **D-4 B3 fired + silent-after-correction + the decompose-judge weak-package healing loop** → **D-5
|
|
108
|
+
"Is not"** (`charter-is-not` HIGH, full per-bullet verbatim enumeration, operator refuse → **exit 2**)
|
|
109
|
+
→ the two post-flip extras (impossible-state CRITICAL exit 1; post-flip refusal exit 1). **VERDICT:
|
|
110
|
+
M4 brownfield path VALIDATED — all eleven §6 criteria met; B2/B3 earn HIGH; the "Is not" escalation
|
|
111
|
+
NOT ratified; GOV-3 did not bite** (`M4-E2E-PLAN.md` §8). **The post-verdict follow-up session
|
|
112
|
+
(2026-07-13, commits `8cb5e1c → bbc0d17`) cleared the four concrete items on `main` — CI green,
|
|
113
|
+
now 879 tests, pyright strict 0:** the ratified `evidence_file` line-range fix (+ regression tests),
|
|
114
|
+
the B2/B3 WARNING→HIGH promotion (+ the §7.2 injection-test fixes), the real-I/O-boundary test guards
|
|
115
|
+
(the `python -m trueline` subprocess + the anchor grammar), and the §8 calibrations
|
|
116
|
+
(`describer`/`adr-deriver`/`constitution` assets + the conformance-criterion stdout + the `validate`
|
|
117
|
+
demoted-echo). **The four designed technical follow-ups then landed on `main` (2026-07-13, in order
|
|
118
|
+
1 → 4 → 2 → 3, each green): item 1 `c962a31` (conformance `is_not_walk` — the auditable "Is not"
|
|
119
|
+
walk), item 4 `757527a` (configurable `runtime.model`/`runtime.effort` + per-command
|
|
120
|
+
`--model`/`--effort`), item 2 `e418ce8` (in-walk bulk dispositions in `adopt approve`), item 3
|
|
121
|
+
`257b75d` (resumable/derived `init` — GOV-3); designs + implementation-time deviations in
|
|
122
|
+
`docs/POST-M4-DESIGN.md`. CI now 928 tests, pyright strict 0, ruff/format clean.** **Remaining:**
|
|
123
|
+
only **publication (remote/CI/PyPI), un-deferred and the operator's call** (`docs/M4-HANDOFF.md` §2;
|
|
124
|
+
`docs/PROJECT-REVIEW.md`) — the `is_not_checked` nicety / item-5 pendency-walk / item-6 GOV-3 are
|
|
125
|
+
now CLOSED (they were the designed items 1/2/3).
|
|
126
|
+
|
|
127
|
+
## Commands
|
|
128
|
+
|
|
129
|
+
The toolchain is **`uv`** (see `.python-version`, `uv.lock`). CI (`.github/workflows/ci.yml`) runs
|
|
130
|
+
exactly these four, in order — run them before considering work done:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
uv sync --locked # install (dev group included)
|
|
134
|
+
uv run ruff check . # lint
|
|
135
|
+
uv run ruff format --check . # format check (use `uv run ruff format .` to fix)
|
|
136
|
+
uv run pyright # STRICT type check — zero errors is the standing bar
|
|
137
|
+
uv run pytest # full suite (testpaths=tests, -q --strict-markers)
|
|
138
|
+
|
|
139
|
+
uv run pytest tests/fold/test_apply.py # a single file
|
|
140
|
+
uv run pytest tests/fold/test_apply.py -k <name> # a single test
|
|
141
|
+
uv run trueline --help # the CLI surface
|
|
142
|
+
uv build # wheel/sdist (assets in src/trueline/assets/ ship automatically)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
`pyright` is configured **strict** and points at the local `.venv` — private cross-module use (a
|
|
146
|
+
leading `_`) is rejected, which is why some helpers are deliberately de-underscored.
|
|
147
|
+
|
|
148
|
+
## Architecture (the big picture)
|
|
149
|
+
|
|
150
|
+
The seven phases — `propose → clarify → plan → decompose → build → validate → finalize` (+ the
|
|
151
|
+
`approve`/`reject` human gate, plus `init`/`status`/`adr`) — are wired in `cli/__init__.py`. Each phase
|
|
152
|
+
maps to a package under `src/trueline/`:
|
|
153
|
+
|
|
154
|
+
| Package | Role |
|
|
155
|
+
|---|---|
|
|
156
|
+
| `schemas/` | Strict pydantic models for every artifact (config, change, ADR, findings, verdicts) + the normative `heading_slug`. |
|
|
157
|
+
| `fold/` | Spec-delta parser/validator/applier — a **faithful port of OpenSpec's deterministic fold** (parity-tested). This is the *only* mechanical fold; architecture never folds. |
|
|
158
|
+
| `adr/` | ADR parse + **projected state** (`project`) + log invariants + cross-refs. **ADR identity = slug** (merge-safe, no sequential number). |
|
|
159
|
+
| `state/` | **Derived state machine**: `inventory` reads the filesystem, `derive` projects it into a phase. State is *never stored* — it comes from which artifacts exist. |
|
|
160
|
+
| `checks/` + `gates/` | A **single check registry** (`checks/battery.py`) consumed by gates, `validate`, and `status`; a **cumulative gate table** (`gates/table.py`) — the gate of phase N re-runs all prior phases' checks (this is what makes drift-detection "pull"). |
|
|
161
|
+
| `judge/` | The **judge-until-convergence loop** (≤5 rounds) for finalization: monotonic candidate generation, atomic write, escalation. |
|
|
162
|
+
| `invoke/` | Headless invocation — `sdk`/`cli` drivers, per-role tool `policy`, one-shot + multi-turn `interactive`. |
|
|
163
|
+
| `cli/` | Typer commands + the **real** synthesizer/judge/scanner adapters (`cli/roles.py`). |
|
|
164
|
+
| `assets/` | Templates, instructions, hooks, CI, taxonomy — the **phase intelligence**, embedded in the package. |
|
|
165
|
+
|
|
166
|
+
### Cross-cutting patterns (know these before touching anything)
|
|
167
|
+
|
|
168
|
+
- **Pure core, shell with I/O.** Checks and derivation operate over **preloaded facts**
|
|
169
|
+
(`CheckContext`, `ChangeInventory`) and are pure; only the executor/CLI reads disk. The paired
|
|
170
|
+
functions signal it: `derive_state(inventory)` (pure) vs `derive_state_at(path)` (I/O shell).
|
|
171
|
+
Add logic in the pure layer, wire I/O at the edge.
|
|
172
|
+
|
|
173
|
+
- **State is derived, not stored.** `state/derive.py` infers the phase from artifacts on disk;
|
|
174
|
+
finalization's sub-state (`loop-in-progress`, `awaiting-approval`, `escalated`, `ready-to-write`,
|
|
175
|
+
`returned-from-rejection`) is materialized as files under `evidence/finalize/` so it survives a
|
|
176
|
+
crash. `change.yaml` deliberately does **not** store phase state.
|
|
177
|
+
|
|
178
|
+
- **Two layers, fail-closed vs advisory.** Every check is **layer A** (mechanical, fail-closed) or
|
|
179
|
+
**layer B** (semantic, advisory + human gate). `gates.blocking_severity` governs only layer A;
|
|
180
|
+
layer B is always advisory regardless of severity.
|
|
181
|
+
|
|
182
|
+
- **Roles are injected interfaces.** The judge loop (`judge/loop.py`) takes `Synthesizer`/`Judge`
|
|
183
|
+
Protocols — **test doubles in tests, real adapters in `cli/roles.py`**. Context between roles passes
|
|
184
|
+
through **workspace files, never conversation history** (design principle P6: don't overload context).
|
|
185
|
+
A judge verdict must echo the candidate's `generation`/`round` to be accepted.
|
|
186
|
+
|
|
187
|
+
- **Exit codes are a contract** (`cli/output.py`): `0` ok · `1` blocked by layer A · `2` human
|
|
188
|
+
declined at layer B · `3` framework error. Most commands support `--json`.
|
|
189
|
+
|
|
190
|
+
- **Two living baselines evolve differently.** Spec = discrete requirements → mechanical fold.
|
|
191
|
+
Architecture = a graph of ADRs → **semantic re-synthesis** via the judge loop, never a fold.
|
|
192
|
+
|
|
193
|
+
## Working style (the user has strong, documented preferences — see M2-HANDOFF §9)
|
|
194
|
+
|
|
195
|
+
- **Design/spec phases are Socratic brainstorm:** one decision at a time — lay out options with
|
|
196
|
+
trade-offs, **recommend one, confirm before writing** it into the doc. Keep a running "decided so
|
|
197
|
+
far". The user refines recommendations often (expected). Communicate in **clear, didactic
|
|
198
|
+
Portuguese**; explain each point self-sufficiently (don't reference decisions by code/number).
|
|
199
|
+
- **Ground in real code before recommending** — read the M1/M2 implementation and how the siblings
|
|
200
|
+
solve the same phase; launch exploration subagents in parallel; verify factual premises.
|
|
201
|
+
- **Simplicity bias (P6):** before proposing new machinery, ask *"does a mechanism we already have
|
|
202
|
+
solve this?"* — phase intelligence arrives as better templates and new checks on the **same
|
|
203
|
+
skeleton**, not new machinery.
|
|
204
|
+
- **Implementation phases invert this:** follow the closed docs, consult only on a genuine gap. Keep
|
|
205
|
+
`pyright` strict + `ruff` clean from the first commit; write tests alongside each step; small commits
|
|
206
|
+
(English, on `main`), and report results faithfully (failed = show the output).
|
|
207
|
+
|
|
208
|
+
## Do not
|
|
209
|
+
|
|
210
|
+
- **Don't re-review the converged docs** (`DESIGN`/`M1-SPEC`/`M2-SPEC`/…). A real defect becomes a
|
|
211
|
+
pointed, ratified erratum in the doc header — never a general audit sweep.
|
|
212
|
+
- **Don't hand-edit** `tests/fold/parity/fixtures.json` (regenerate via `tests/fold/parity/generate_fixtures.mts`
|
|
213
|
+
against a real OpenSpec checkout) or anything under `evidence/finalize/` (use the operations in
|
|
214
|
+
`judge/workspace.py`).
|
|
215
|
+
- **Don't edit `plugin/`-style generated output**: the assets that ship in the wheel are the sources
|
|
216
|
+
under `src/trueline/assets/` (they ship via hatchling's default inclusion — `force-include` breaks
|
|
217
|
+
the build because the assets live inside the package).
|
|
218
|
+
- **Publishing (GitHub remote, CI secrets, PyPI) is UN-DEFERRED** as of the M4 Phase-D verdict
|
|
219
|
+
(2026-07-11 — M4 = implementation + E2E validated). It's no longer off-limits to propose; the
|
|
220
|
+
operator decides whether/when (don't push it unasked).
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Luis Muller
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: trueline
|
|
3
|
+
Version: 0.1.0.dev0
|
|
4
|
+
Summary: Spec-Driven Development (SDD) framework for Claude Code users.
|
|
5
|
+
Project-URL: Homepage, https://gitlab.com/simple-tools1/trueline
|
|
6
|
+
Project-URL: Repository, https://gitlab.com/simple-tools1/trueline
|
|
7
|
+
Author: Luis Muller
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
License-File: THIRD-PARTY-NOTICES.md
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
17
|
+
Requires-Python: >=3.12
|
|
18
|
+
Requires-Dist: claude-agent-sdk>=0.2.98
|
|
19
|
+
Requires-Dist: pydantic>=2.7
|
|
20
|
+
Requires-Dist: pyyaml>=6.0
|
|
21
|
+
Requires-Dist: rich>=13
|
|
22
|
+
Requires-Dist: typer>=0.24
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
|
|
25
|
+
# trueline
|
|
26
|
+
|
|
27
|
+
**Spec-Driven Development (SDD) framework for Claude Code users**:
|
|
28
|
+
specs and architecture as living documents and source of truth, evolution via
|
|
29
|
+
spec deltas and ADRs, finalization with a judge-until-convergence loop and a
|
|
30
|
+
human gate — all driven by an external orchestrator over a headless core.
|
|
31
|
+
|
|
32
|
+
**Status:** Milestone 1 (skeleton) implemented — strict schemas, fold-engine
|
|
33
|
+
with byte-for-byte parity with OpenSpec, ADR log with projected state,
|
|
34
|
+
derived state machine, cumulative gates, judge-until-convergence loop,
|
|
35
|
+
headless invocation (SDK/CLI) and the full CLI surface.
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
trueline init # .trueline/ skeleton + config.yaml
|
|
39
|
+
trueline propose <id> # phases: propose → plan → decompose → build
|
|
40
|
+
trueline validate [<id>|--ci] # battery of checks (drift) / post-merge net
|
|
41
|
+
trueline finalize <id> # refactor short-circuit or judge loop
|
|
42
|
+
trueline approve|reject <id> # human gate of finalization
|
|
43
|
+
trueline status [<id>] # derived state + next step
|
|
44
|
+
trueline adr list # decision log with display numbering
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Documents
|
|
48
|
+
|
|
49
|
+
- [docs/DESIGN.md](docs/DESIGN.md) — conceptual design (v5). In conflict with the spec, the design wins.
|
|
50
|
+
- [docs/M1-SPEC.md](docs/M1-SPEC.md) — technical specification of Milestone 1 (r4, FINAL): the source of truth of the implementation.
|
|
51
|
+
- [docs/M1-HANDOFF.md](docs/M1-HANDOFF.md) — implementation state, agenda and working style.
|
|
52
|
+
|
|
53
|
+
## License
|
|
54
|
+
|
|
55
|
+
MIT — see [LICENSE](LICENSE). The fold-engine parity suite is translated
|
|
56
|
+
from the OpenSpec test suite (MIT) — see
|
|
57
|
+
[THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md).
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# trueline
|
|
2
|
+
|
|
3
|
+
**Spec-Driven Development (SDD) framework for Claude Code users**:
|
|
4
|
+
specs and architecture as living documents and source of truth, evolution via
|
|
5
|
+
spec deltas and ADRs, finalization with a judge-until-convergence loop and a
|
|
6
|
+
human gate — all driven by an external orchestrator over a headless core.
|
|
7
|
+
|
|
8
|
+
**Status:** Milestone 1 (skeleton) implemented — strict schemas, fold-engine
|
|
9
|
+
with byte-for-byte parity with OpenSpec, ADR log with projected state,
|
|
10
|
+
derived state machine, cumulative gates, judge-until-convergence loop,
|
|
11
|
+
headless invocation (SDK/CLI) and the full CLI surface.
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
trueline init # .trueline/ skeleton + config.yaml
|
|
15
|
+
trueline propose <id> # phases: propose → plan → decompose → build
|
|
16
|
+
trueline validate [<id>|--ci] # battery of checks (drift) / post-merge net
|
|
17
|
+
trueline finalize <id> # refactor short-circuit or judge loop
|
|
18
|
+
trueline approve|reject <id> # human gate of finalization
|
|
19
|
+
trueline status [<id>] # derived state + next step
|
|
20
|
+
trueline adr list # decision log with display numbering
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Documents
|
|
24
|
+
|
|
25
|
+
- [docs/DESIGN.md](docs/DESIGN.md) — conceptual design (v5). In conflict with the spec, the design wins.
|
|
26
|
+
- [docs/M1-SPEC.md](docs/M1-SPEC.md) — technical specification of Milestone 1 (r4, FINAL): the source of truth of the implementation.
|
|
27
|
+
- [docs/M1-HANDOFF.md](docs/M1-HANDOFF.md) — implementation state, agenda and working style.
|
|
28
|
+
|
|
29
|
+
## License
|
|
30
|
+
|
|
31
|
+
MIT — see [LICENSE](LICENSE). The fold-engine parity suite is translated
|
|
32
|
+
from the OpenSpec test suite (MIT) — see
|
|
33
|
+
[THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md).
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Avisos de terceiros
|
|
2
|
+
|
|
3
|
+
## OpenSpec (MIT)
|
|
4
|
+
|
|
5
|
+
A suíte de testes de paridade do fold-engine deste repositório (em `tests/`,
|
|
6
|
+
identificada nos cabeçalhos dos próprios arquivos) é uma **tradução para
|
|
7
|
+
Python/pytest da suíte de testes do projeto OpenSpec**
|
|
8
|
+
(<https://github.com/Fission-AI/OpenSpec>), usada aqui como especificação
|
|
9
|
+
executável da gramática de deltas de spec e do algoritmo de merge. O código de
|
|
10
|
+
referência original é `src/core/parsers/requirement-blocks.ts` e
|
|
11
|
+
`src/core/specs-apply.ts` daquele projeto.
|
|
12
|
+
|
|
13
|
+
Conforme exigido pela licença MIT do OpenSpec, o aviso de copyright e a
|
|
14
|
+
permissão originais são reproduzidos integralmente abaixo:
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
MIT License
|
|
18
|
+
|
|
19
|
+
Copyright (c) 2024 OpenSpec Contributors
|
|
20
|
+
|
|
21
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
22
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
23
|
+
in the Software without restriction, including without limitation the rights
|
|
24
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
25
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
26
|
+
furnished to do so, subject to the following conditions:
|
|
27
|
+
|
|
28
|
+
The above copyright notice and this permission notice shall be included in all
|
|
29
|
+
copies or substantial portions of the Software.
|
|
30
|
+
|
|
31
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
32
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
33
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
34
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
35
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
36
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
37
|
+
SOFTWARE.
|
|
38
|
+
```
|