diff --git a/.agentic-workspace/AGENTS.md b/.agentic-workspace/AGENTS.md deleted file mode 100644 index 7a7acd3..0000000 --- a/.agentic-workspace/AGENTS.md +++ /dev/null @@ -1,19 +0,0 @@ -# Agent Instructions for .agentic-workspace - -Authority marker: - -- authority: workspace-managed-local-adapter -- canonical_source: `.agentic-workspace/config.toml` and `uv run agentic-workspace start --target . --format json` -- safe_to_edit: false -- refresh_command: `uv run agentic-workspace init --target . --format json` or `uv run agentic-workspace upgrade --target . --format json` - -This directory contains Agentic Workspace managed workflow, planning, memory, ownership, and state surfaces. - -Before editing inside `.agentic-workspace/`: - -- Use `uv run agentic-workspace start --target . --task "" --format json` for routing. -- Use `uv run agentic-workspace summary --target . --format json`, `uv run agentic-workspace implement --changed --task "" --format json`, and `uv run agentic-workspace proof --changed --format json` before opening broad raw state. -- Use `uv run agentic-workspace planning ...` and `uv run agentic-workspace memory ...` commands for structured Planning and Memory mutations when a command exists. -- Do not hand-edit structured state such as Planning execplans, Planning state, Memory indexes, ownership ledgers, or config when a package CLI command exists. -- Raw structured edits are only fallback or repair work; after any fallback edit, run `uv run agentic-workspace summary --target . --format json` and `uv run agentic-workspace doctor --target . --modules planning,memory --format json` as applicable. -- If a needed managed-state mutation has no command, route or file an improvement issue for a command-owned path instead of making manual edits routine. diff --git a/.agentic-workspace/WORKFLOW.md b/.agentic-workspace/WORKFLOW.md deleted file mode 100644 index 6bf383a..0000000 --- a/.agentic-workspace/WORKFLOW.md +++ /dev/null @@ -1,106 +0,0 @@ -# Workspace Workflow - -Conservative fallback/projection workflow for Agentic Workspace systems installed in a repository. - -Canonical workflow decisions live in compact CLI JSON and structured contracts. Use `start` as the ordinary Startup Router, `next_safe_action` for the current decision packet, `skill_specs.json` for skill and transition semantics, `cli_commands.json` for command surface facts, and package skills for routed human-readable projections. This file is only the conservative no-CLI fallback and readable projection; do not treat it as an independent workflow authority or a second operating manual. - -Keep this file concise, product-managed, and replaceable. It answers what to do when compact CLI or structured JSON output is unavailable, which minimal files to inspect first, which actions remain forbidden, and where to resume when the CLI becomes available again. When the CLI works, stop reading this file and follow the compact packet. - -Do not edit this file to record task-specific plans, progress, decisions, or handoff state. Durable work state belongs in the planning, decomposition, execplan, Memory, issue, or other repo-configured execution surfaces routed by the CLI. - -## Authority Map - -| Concept | Canonical owner | This file's role | -| --- | --- | --- | -| Current next safe action | `next_safe_action` in `start`, `preflight`, or `implement` output | Preserve the same forbidden actions in no-CLI fallback | -| Workflow transition data | `transition_gates` in `src/agentic_workspace/contracts/skill_specs.json` | Human-readable projection only | -| Module ownership | `module_slots` in `src/agentic_workspace/contracts/skill_specs.json` and `workspace-operating-loop` | Route to the same slot when CLI is unavailable | -| Skill semantics | `specs` in `src/agentic_workspace/contracts/skill_specs.json` | Name fallback skills without redefining them | -| Command surface facts | `src/agentic_workspace/contracts/cli_commands.json` | Show only minimal invocation examples | -| State mutation | Package CLI commands and checked-in Planning/Memory owners | Never mutate managed state by hand when CLI is available | - -## Startup Router - -Ordinary first contact is one routed decision, not a checklist of root commands: - -1. If changed paths are already known, run `agentic-workspace implement --changed --task "" --format json` for bounded implementer posture; use `--verbose` only when the tiny answer is insufficient. -2. Otherwise run `agentic-workspace start --task "" --format json` using the user's request as ``; omit `--task` only when the task text is unavailable. -3. Follow `next_safe_action`, `action_signals`, `skills`, `task_posture_packet`, and `drill_down` before opening raw `.agentic-workspace` files or running secondary commands. -4. Treat `preflight`, `summary`, `config`, `defaults`, `planning`, `skills`, `modules`, `ownership`, and `report` as routed drill-down, recovery, or mutation surfaces. Use them only when the startup packet, known changed paths, or explicit user request names that need. -5. If the user asks you to prepare broad work for later continuation and does not ask you to implement, create or continue canonical checked-in Planning state now, verify it with summary, then stop. A proposal-only answer is not durable handoff. -6. Open raw planning, memory, module, or workflow files only when compact output points there. - -## Active Work Boundary - -Active work is Work Shaping plus Planning Autopilot: - -- `start` owns ordinary first-contact routing, work-shape pressure, and the next safe action. -- `summary` owns active continuation, Planning state projection, proof posture, and claim-boundary inspection after routing points there. -- `implement --changed` owns known changed-path work context, task posture, proof hints, and changed-surface gates. -- `planning` owns routed state mutation: new plans, promotions, handoffs, delegation decisions, closeout, and archive. - -The agent still owns semantic judgment about intent clarity, direct/bounded/lane/epic shape, proof proportionality, and completion claim level. Do not treat the command list as the workflow, and do not hand-edit Planning state when a command-owned mutation is available. - -When implementing an issue, satisfy the intended end state in the ordinary path. Do not treat a smaller change as complete merely because checks pass if that smaller change preserves the old ordinary-path behavior. If the full intended outcome appears larger than the issue safely permits, ask for clarification instead of closing the issue with a partial path. - -## Structured Priority - -- Use `start` or `implement --changed` before prose when the CLI is available; use `summary`, `planning`, `skills`, and `proof --changed` when routed by the packet or task shape; reserve `preflight`, `defaults`, `config`, `modules`, `ownership`, `--verbose`, and `report` for recovery or deeper detail. -- At minimum, orient through `start` or `implement --changed` before editing files unless the user explicitly asks for a tiny direct change and validation is obvious. -- Treat `.agentic-workspace/planning/state.toml` and active `.agentic-workspace/planning/execplans/*.plan.json` as execution authority only after start, summary, or preflight routes you there. -- Prefer package commands for planning mutations when available: `agentic-planning new-plan --id --title --activate`, `agentic-planning promote-to-plan <item-id>`, and `agentic-planning archive-plan <plan>`. -- For "leave a plan", "repo-visible state", "handoff", "continue later", or similar requests, create or continue a checked-in planning record; do not create root `PLAN.md`, `DOC_CLEANUP_PLAN.md`, or similar freehand handoff files unless repo config explicitly routes there. -- When the user asks to prepare, plan, decompose, hand off, or says not to implement yet, keep writes to planning/decomposition surfaces; do not create product source, package, dependency, schema, or app scaffold files unless explicitly requested. -- For prep-only broad work, the finished output is registered Planning state plus summary verification. Use `agentic-planning new-plan --id <id> --title <title> --activate --prep-only` when available. -- After `new-plan --prep-only`, you may tighten content fields inside the created execplan and, for epic-shaped work, add a schema-backed decomposition under `.agentic-workspace/planning/decompositions/`; do not create README, PLANNING_STATE, HANDOFF, SLICES, ARCHITECTURE, ADR, package, dependency, source, public, database, schema, or app scaffold files. -- For broad handoff prep, put architecture assumptions, blockers, and candidate lane notes inside the execplan or decomposition record. Create separate docs only when the user explicitly asks for documentation or repo config routes that content there. -- Candidate lane `owner_surface` values in a decomposition may name future files. They are not valid next-action file references until the corresponding execplan exists; either create/register that execplan or report the reference as proposed/future. -- A live execplan is not durable handoff unless it is registered in `.agentic-workspace/planning/state.toml`; if you create an execplan by fallback template copy, register it or use `new-plan`. -- When the user has already asked you to prepare the repo, do not ask for confirmation instead of leaving durable state; create the canonical planning/decomposition record, then run summary. -- Do not route durable Planning state to `.agentic-workspace/planning/records/`; canonical records live under `execplans/` or `decompositions/`. -- Prefer checked-in Agentic Workspace Planning as the shared authority. If your runtime is hardwired to use native plans or todos, use them as private working memory and bridge durable decisions into checked-in Planning before implementation, handoff, or closeout. Local bridge shims belong under `.agentic-workspace/local/integrations/<vendor-or-runtime>/` and are not shared authority. -- Do not modify `.agentic-workspace/WORKFLOW.md` as the durable bridge for a task; it is startup/router guidance, not task state. -- Do not invent the outer structure of `planning-execplan/v1`; agents may edit intent, scope, proof, and closeout content inside schema-backed checked-in records. -- After any planning mutation or fallback edit, run `agentic-workspace summary --format json` or the planning surface checker before implementation. -- Templates are fallback scaffolds, not permission to create a new unchecked shape. Copy templates to a new task-specific filename; never move, rename, delete, or repurpose `TEMPLATE.*` files as live planning records. -- Treat GitHub, Linear, Jira, Notion, and similar trackers as optional intake evidence. They are not the universal workflow and do not replace checked-in planning. -- Use package skills when `start`/`implement` skill projection or `agentic-workspace skills --target . --task "<task>" --format json` recommends one; otherwise stay with compact CLI and this fallback. - -## Fallback Work Shape - -Use this only when compact routing is unavailable or the compact packet explicitly asks for no-CLI reconstruction. Before implementation, decide the smallest workflow shape that fits the current request: - -- `direct`: one coherent local pass can finish safely and validation is obvious. No durable plan is required. -- `bounded`: one slice needs explicit done-when, proof, or short restart state. Use the configured planning surface when restart cost matters and Planning is installed. -- `lane`: work spans milestones, managed payloads, proof scope, or handoff risk. When Planning is installed, create checked-in active planning and an execplan with package commands before edits; otherwise leave an equivalent durable handoff in the repo's configured workflow surface. -- `epic`: work contains multiple lanes or needs product shaping. Use a schema-backed decomposition record when Planning provides one, split it into bounded lanes or slices, then write implementation execplans only for ready slices. - -For lane or epic work, do not jump straight from the prompt to implementation. Assess risk and scope first; record `adaptive_assurance` when the Planning module is installed and risk is medium or higher, and keep decomposition evidence with the durable workflow surface. - -Skipping compact workspace orientation may be faster for a local edit, but it lowers continuation and review trust for planned, lane, epic, high-risk, or unclear-proof work. Do not use this fallback section to bypass a working `start`, `implement`, `summary`, or `proof` packet. - -## Fallback Procedure - -Use this section only when CLI or JSON surfaces are unavailable. As soon as the CLI becomes available, resume through `start`, `implement --changed`, `summary`, or `proof --changed` instead of continuing from fallback prose. - -1. Read the repo startup file and this file. -2. Decide whether the work is direct, bounded, lane, or epic. -3. If the request is startup-only, orientation-only, or asks you not to implement yet without asking for durable handoff, stay read-only: report the command you would have run, the work shape, and the next safe action. Do not create planning files. -4. For direct or bounded work, proceed with the smallest local reasoning and validation that fits the change; create Planning state only when restart cost or durable handoff is actually part of the request. -5. For lane or epic work, use package-owned scaffolds first; edit checked-in planning files directly only as bounded fallback. -6. For epic work, decompose before writing implementation execplans. -7. Run the narrowest validation that proves the changed surface. -8. Before closeout, separate validation success, issue completion, intent satisfaction, dogfooding findings, and durable residue. - -## Ownership - -- Repo-owned startup instructions stay outside `.agentic-workspace/` unless they are inside explicit managed fences. -- Product-managed startup guidance, ownership metadata, and module-local managed assets belong under `.agentic-workspace/`. -- Product-managed text inserted into repo-owned files must live inside explicit `agentic-workspace:*` fences. -- Prefer a short visible pointer fence over large managed prose blocks in repo-owned files. - -## Dogfooding - -- Treat dogfooding evaluation as a standing closeout requirement for planned work. -- Fix actual bugs or unintended behavior immediately when they are in scope. -- Route durable friction into checked-in planning, issue follow-up, Memory, docs, config, or tests with a clear owner. diff --git a/.agentic-workspace/adoption-receipt.json b/.agentic-workspace/adoption-receipt.json new file mode 100644 index 0000000..b1ab989 --- /dev/null +++ b/.agentic-workspace/adoption-receipt.json @@ -0,0 +1,38 @@ +{ + "adopted_state": [ + "memory/repo/decisions/README.md", + "memory/repo/domains/README.md", + "memory/repo/index.md", + "memory/repo/invariants/README.md", + "memory/repo/manifest.toml", + "memory/repo/runbooks/README.md", + "memory/repo/templates/invariant.template.md", + "memory/repo/templates/memory-note.template.md", + "memory/repo/templates/runbook.template.md", + "planning/execplans", + "planning/execplans/README.md", + "planning/execplans/TEMPLATE.plan.json", + "planning/execplans/archive/README.md", + "planning/execplans/archive/update-uv-packages-20260627.plan.json", + "planning/state.toml", + "verification/manifest.toml" + ], + "checked_in_rule": "necessary-surfaces-only", + "kind": "agentic-workspace/adoption-receipt/v1", + "local_only": [ + "local/scratch/bootstrap-handoff.md", + "local/scratch/bootstrap-handoff.json", + "absolute-path provenance" + ], + "omitted_package_payload": [ + "package-payload", + "payload-provenance.json", + "AGENTS.md", + "planning/package-payload", + "memory/package-payload", + "verification/package-payload" + ], + "payload_mirror": false, + "recheck_command": "agentic-workspace doctor --target . --format json", + "rule": "This receipt is the durable authority that ordinary bootstrap intentionally omitted generic package payload. Status and doctor must not infer that decision from missing files alone." +} diff --git a/.agentic-workspace/bootstrap-handoff.json b/.agentic-workspace/bootstrap-handoff.json deleted file mode 100644 index 1b148a9..0000000 --- a/.agentic-workspace/bootstrap-handoff.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "kind": "workspace-bootstrap-handoff/v1", - "intent": { - "key": "full", - "summary": "set up this repo for both Planning and Memory", - "confirmed_intent": { - "key": "full", - "summary": "set up this repo for both Planning and Memory", - "source": "resolved preset: full" - }, - "interpreted_intent": { - "key": "full", - "summary": "set up this repo for both Planning and Memory", - "source": "workspace-normalized lifecycle intent" - } - }, - "scope": { - "target": "C:/Users/ricka/Documents/src/command-generation", - "selected_modules": [ - "planning", - "memory" - ], - "repo_state": "blank_or_unmanaged_repo", - "inferred_policy": "install_direct", - "mode": "install", - "prompt_requirement": "recommended", - "non_interactive": true, - "workflow_artifact_profile": { - "profile": "repo-owned", - "summary": "Use only the repo-owned planning surfaces; do not rely on native runtime artifacts.", - "native_artifacts": [], - "canonical_surfaces": [ - ".agentic-workspace/planning/state.toml", - ".agentic-workspace/planning/execplans/" - ], - "sync_rule": ".agentic-workspace/planning/state.toml and .agentic-workspace/planning/execplans stay authoritative; no extra runtime artifact should carry durable state.", - "handoff_rule": "Use repo-owned planning surfaces directly for restart, review, and cross-agent continuation." - }, - "review_items": [ - ".agentic-workspace/WORKFLOW.md: shared Workspace layer is not installed; ordinary host-repo lifecycle should run through `agentic-workspace init --preset planning` or `agentic-workspace upgrade --modules planning`. Direct `agentic-planning` lifecycle commands are module-level maintenance/debugging surfaces and do not provide the full Workspace startup router, shared config, ownership, skills, or combined reports.", - ".agentic-workspace/WORKFLOW.md: shared Workspace layer is not installed; ordinary host-repo lifecycle should run through `agentic-workspace init --preset memory` or `agentic-workspace upgrade --modules memory`. Direct `agentic-memory` lifecycle commands are module-level maintenance/debugging surfaces and do not provide the full Workspace startup router, shared config, ownership, skills, or combined reports." - ] - }, - "next": { - "steps": [ - "Run agentic-workspace doctor --target C:/Users/ricka/Documents/src/command-generation after bootstrap changes settle.", - "Use the generated finishing brief at .agentic-workspace/bootstrap-handoff.md for the next bounded bootstrap action.", - "Review preserved and review-needed workflow surfaces before treating bootstrap as complete.", - "Close out the listed review items before relying on the installed lifecycle flow." - ], - "immediate_brief": ".agentic-workspace/bootstrap-handoff.md" - }, - "proof": { - "validation": [ - "agentic-workspace doctor --target C:/Users/ricka/Documents/src/command-generation", - "agentic-workspace status --target C:/Users/ricka/Documents/src/command-generation" - ], - "done_when": [ - "bootstrap review items are closed or explicitly resolved", - "temporary bootstrap residue is removed before normal work resumes" - ] - }, - "must_not_change": [ - "the requested bootstrap intent", - "repo-owned workflow surfaces without explicit review", - "planning and memory ownership boundaries", - "agentic-workspace as the lifecycle entrypoint" - ], - "escalate_when": [ - "finishing bootstrap would require replacing preserved repo-owned surfaces blindly", - "the requested bootstrap intent no longer fits the repo state safely", - "validation would be meaningless without broader lifecycle scope", - "the handoff can no longer stay bounded to bootstrap follow-through" - ], - "refs": [ - "AGENTS.md", - ".agentic-workspace/planning/state.toml", - "docs/delegated-judgment-contract.md", - "docs/init-lifecycle.md", - "agentic-workspace defaults --format json", - "agentic-workspace config --target ./repo --format json" - ] -} diff --git a/.agentic-workspace/bootstrap-handoff.md b/.agentic-workspace/bootstrap-handoff.md deleted file mode 100644 index 0366eae..0000000 --- a/.agentic-workspace/bootstrap-handoff.md +++ /dev/null @@ -1,128 +0,0 @@ -Finish the Agentic Workspace bootstrap in C:/Users/ricka/Documents/src/command-generation. - -Repo state: -- blank_or_unmanaged_repo - -Inferred policy: -- install_direct - -Lifecycle mode: -- install - -Selected modules: -- planning -- memory - -Intent: -- confirmed: set up this repo for both Planning and Memory -- interpreted: set up this repo for both Planning and Memory - -The CLI already: -- created .agentic-workspace/docs/execution-flow-contract.md -- created .agentic-workspace/docs/lifecycle-and-config-contract.md -- created .agentic-workspace/docs/minimum-operating-model.md -- created .agentic-workspace/docs/routing-contract.md -- created .agentic-workspace/docs/system-intent-contract.md -- created .agentic-workspace/docs/workspace-config-contract.md -- created .agentic-workspace/planning/UPGRADE-SOURCE.toml -- created .agentic-workspace/planning/agent-manifest.json -- created .agentic-workspace/planning/decompositions/README.md -- created .agentic-workspace/planning/decompositions/TEMPLATE.decomposition.json -- created .agentic-workspace/planning/execplans/README.md -- created .agentic-workspace/planning/execplans/TEMPLATE.plan.json -- created .agentic-workspace/planning/execplans/archive/README.md -- created .agentic-workspace/planning/schemas/planning-decomposition.schema.json -- created .agentic-workspace/planning/schemas/planning-execplan.schema.json -- created .agentic-workspace/planning/schemas/planning-external-intent-evidence.schema.json -- created .agentic-workspace/planning/schemas/planning-finished-work-evidence.schema.json -- created .agentic-workspace/planning/schemas/planning-review.schema.json -- created AGENTS.md -- created .agentic-workspace/planning/skills/bootstrap-upgrade/SKILL.md -- created .agentic-workspace/planning/skills/planning-assurance-delegation/SKILL.md -- created .agentic-workspace/planning/skills/planning-autopilot/SKILL.md -- created .agentic-workspace/planning/skills/planning-closeout-trust/SKILL.md -- created .agentic-workspace/planning/skills/planning-decompose/SKILL.md -- created .agentic-workspace/planning/skills/planning-high-assurance-lifecycle/SKILL.md -- created .agentic-workspace/planning/skills/planning-intake-upstream-task/SKILL.md -- created .agentic-workspace/planning/skills/planning-intent-verification/SKILL.md -- created .agentic-workspace/planning/skills/planning-new-plan-tighten/SKILL.md -- created .agentic-workspace/planning/skills/planning-orchestrator-workflow/SKILL.md -- created .agentic-workspace/planning/skills/planning-promote-review-findings/SKILL.md -- created .agentic-workspace/planning/skills/planning-reporting/SKILL.md -- created .agentic-workspace/planning/skills/planning-review-pass/SKILL.md -- created .agentic-workspace/planning/skills/README.md -- created .agentic-workspace/planning/skills/REGISTRY.json -- created .agentic-workspace/docs/installer-behavior.md -- created .agentic-workspace/docs/memory-metadata-contract.md -- created .agentic-workspace/memory/bootstrap/README.md -- created .agentic-workspace/memory/bootstrap/skills/cleanup/agents/openai.yaml -- created .agentic-workspace/memory/bootstrap/skills/cleanup/SKILL.md -- created .agentic-workspace/memory/bootstrap/skills/install/agents/openai.yaml -- created .agentic-workspace/memory/bootstrap/skills/install/SKILL.md -- created .agentic-workspace/memory/bootstrap/skills/REGISTRY.json -- created .agentic-workspace/memory/repo/decisions/README.md -- created .agentic-workspace/memory/repo/domains/README.md -- created .agentic-workspace/memory/repo/index.md -- created .agentic-workspace/memory/repo/invariants/README.md -- created .agentic-workspace/memory/repo/manifest.toml -- created .agentic-workspace/memory/repo/runbooks/README.md -- created .agentic-workspace/memory/repo/templates/invariant.template.md -- created .agentic-workspace/memory/repo/templates/memory-note.template.md -- created .agentic-workspace/memory/repo/templates/runbook.template.md -- created .agentic-workspace/memory/skills/memory-capture/agents/openai.yaml -- created .agentic-workspace/memory/skills/memory-capture/SKILL.md -- created .agentic-workspace/memory/skills/memory-consultation-and-residue/agents/openai.yaml -- created .agentic-workspace/memory/skills/memory-consultation-and-residue/SKILL.md -- created .agentic-workspace/memory/skills/memory-hygiene/agents/openai.yaml -- created .agentic-workspace/memory/skills/memory-hygiene/SKILL.md -- created .agentic-workspace/memory/skills/memory-refresh/agents/openai.yaml -- created .agentic-workspace/memory/skills/memory-refresh/SKILL.md -- created .agentic-workspace/memory/skills/memory-router/agents/openai.yaml -- created .agentic-workspace/memory/skills/memory-router/SKILL.md -- created .agentic-workspace/memory/skills/memory-upgrade/agents/openai.yaml -- created .agentic-workspace/memory/skills/memory-upgrade/SKILL.md -- created .agentic-workspace/memory/skills/README.md -- created .agentic-workspace/memory/skills/REGISTRY.json -- created .agentic-workspace/memory/SKILLS.md -- created .agentic-workspace/memory/UPGRADE-SOURCE.toml -- created .agentic-workspace/memory/VERSION.md -- created .agentic-workspace/memory/WORKFLOW.md -- created .agentic-workspace/config.toml -- created .agentic-workspace/WORKFLOW.md -- created .agentic-workspace/OWNERSHIP.toml -- created .agentic-workspace/docs/module-map.md -- created .agentic-workspace/skills/REGISTRY.json -- created .agentic-workspace/skills/workspace-startup/SKILL.md -- created .agentic-workspace/skills/workspace-intent-discovery/SKILL.md -- created .agentic-workspace/skills/workspace-work-shape/SKILL.md -- created .agentic-workspace/skills/workspace-proof-selection/SKILL.md -- created .agentic-workspace/skills/workspace-transition-gates/SKILL.md -- created .agentic-workspace/skills/workspace-operating-loop/SKILL.md -- created .agentic-workspace/skills/workspace-setup-jumpstart/SKILL.md -- created .agentic-workspace/system-intent/WORKFLOW.md -- created .agentic-workspace/AGENTS.md -- created .agentic-workspace/local/scratch -- refreshed AGENTS.md -- preserved AGENTS.md - -Review and finish: -- .agentic-workspace/WORKFLOW.md: shared Workspace layer is not installed; ordinary host-repo lifecycle should run through `agentic-workspace init --preset planning` or `agentic-workspace upgrade --modules planning`. Direct `agentic-planning` lifecycle commands are module-level maintenance/debugging surfaces and do not provide the full Workspace startup router, shared config, ownership, skills, or combined reports. -- .agentic-workspace/WORKFLOW.md: shared Workspace layer is not installed; ordinary host-repo lifecycle should run through `agentic-workspace init --preset memory` or `agentic-workspace upgrade --modules memory`. Direct `agentic-memory` lifecycle commands are module-level maintenance/debugging surfaces and do not provide the full Workspace startup router, shared config, ownership, skills, or combined reports. - -Rules: -- keep agentic-workspace as the lifecycle entrypoint; do not improvise package-level install flows -- do not overwrite preserved repo-owned surfaces blindly -- prefer conservative merge over replacement when existing docs overlap -- do not edit generated files manually when a canonical source exists -- keep planning and memory boundaries explicit -- avoid creating duplicate source-of-truth workflow surfaces -- workflow artifact profile `repo-owned`: .agentic-workspace/planning/state.toml and .agentic-workspace/planning/execplans stay authoritative; no extra runtime artifact should carry durable state. -- keep the finishing pass non-interactive; do not assume a human can answer prompts or unblock a PTY - -Validation: -- agentic-workspace doctor --target C:/Users/ricka/Documents/src/command-generation -- agentic-workspace status --target C:/Users/ricka/Documents/src/command-generation - -When done: -- leave only durable workflow residue; do not keep temporary bootstrap notes around -- keep AGENTS.md as the repo startup entrypoint diff --git a/.agentic-workspace/docs/execution-flow-contract.md b/.agentic-workspace/docs/execution-flow-contract.md deleted file mode 100644 index d44b700..0000000 --- a/.agentic-workspace/docs/execution-flow-contract.md +++ /dev/null @@ -1,145 +0,0 @@ -# Execution and Milestone Flow Contract - -This contract defines how active work moves from intent to completion, including milestone sequencing, resumability, and follow-through. - -## Core Flow - -1. **Intent Continuity**: Every active slice must belong to a larger intended outcome. -2. **Active Milestone**: Work happens in bounded, ready-to-execute milestones. -3. **Immediate Next Action**: The next safe step is always explicit and small. -4. **Validation and Proof**: Success is defined by narrow, verifiable criteria. -5. **Closure and Continuity**: Finished work must capture any required continuation and an explicit closure decision before archive. - ---- - -## 1. Intent and Resumability - -### Intent Continuity -Every execution slice must record: -- **Larger intended outcome**: The broad goal this work contributes to. -- **Slice completion of larger outcome**: Whether this specific slice finishes the parent goal. -- **Continuation surface**: Where the next slice or follow-on work belongs. - -### System Intent -- **Authority**: The larger intended outcome stays above the bounded slice. -- **Bounded reinterpretation**: Agents may narrow means and first-slice scope, but not silently replace the confirmed outcome. -- **Recoverability**: Compact report/summary paths should answer whether the larger outcome is closed and where continuation lives now. - -### Resumable Execution -Execution is resumable by default. If a task is interrupted, the checked-in state should be sufficient to restart: -- **Environment and State Recovery**: Use `agentic-workspace report` and `summary` to recover current context. -- **Intent Recovery**: Use the `Intent Continuity` section of the active plan. -- **Milestone Progress**: Use the `Active Milestone` and `Drift Log` to see what was tried and what remains. - ---- - -## 2. Milestone Management - -### Active Milestone -The active milestone must be: -- **Status**: `in-progress`, `ready`, or `blocked`. -- **Scope**: A bounded set of changes that can be completed in one or two sessions. -- **Ready**: Explicit signal that work can begin. - -### Immediate Next Action -- Must be a single, concrete, and verifiable next step. -- Should avoid vague verbs like "continue" or "fix". -- Updated after every turn to ensure the handoff is always fresh. - ---- - -## 3. Delegated Judgment and Workflow - -### Delegated Judgment -Agents have bounded initiative to: -- Choose the best local means (tools, paths, narrow tests). -- Tighten validation. -- Select skills or registry-backed workflows. - -**Escalation is required** when: -- The requested solution changes the intended outcome. -- The path is blocked or violates a stable contract. -- Confidence drops below the point where silent continuation is defensible. - -### Orchestrator-Worker Handoff -When a stronger planner delegates work to a smaller or separate executor: -- **Contract Source**: Derive the handoff from `agentic-planning handoff --format json`. -- **Agent-Agnostic**: The handoff should not prescribe a specific executor model or brand. -- **Required Packet Fields**: A useful worker packet names intent, constraints, read-first refs, owned scope, proof expectations, stop conditions, return contract, and target posture. -- **Write Scope**: The worker's assigned scope must be explicit and narrow. -- **Execution Bounds**: Keep allowed paths, max-changed-file guidance, required validation, and ask-before-refactor thresholds close to the active plan rather than in chat-only instructions. -- **Stop Conditions**: Make "stop and escalate" explicit enough that a weaker or external executor can stop cheaply when scope, proof, or interpretation boundaries are reached. -- **Return-With Residue**: The handoff should name the minimum execution-run and finished-run-review residue the executor must return so later review does not have to reconstruct the run from scratch. - -### Intent Interpretation Review -When a plan narrows a literal request into a more concrete bounded slice: -- keep the literal request visible -- record the inferred intended outcome -- record the chosen concrete "what" -- keep the interpretation distance explicit -- add one short review cue for when that interpretation should be corrected - -This is a compact review surface, not a reasoning trace. - -### Execution-Run Residue -Delegated execution should leave one compact per-run residue inside the active plan: -- run status -- executor -- handoff source -- what happened -- scope touched -- changed surfaces -- validations run -- result for continuation -- next step - -This residue should be enough for pause/resume, returned-run review, and cheap correction without becoming a full trace system. -Use `scope touched` for the bounded intended scope and `changed surfaces` for the compact actual-change answer the reviewer should not have to reconstruct from broad diff reading. - -### Finished-Run Review -When delegated work returns: -- review scope respected? -- review proof status -- review whether the intended outcome was served -- record the misinterpretation risk -- record the follow-on decision - -Keep this review compact and decision-supporting. It complements proof and intent-satisfaction review; it does not replace them. - ---- - -## 4. Closure and Follow-Through - -### Iterative Follow-Through -Active work often leaves "residue" (follow-up tasks, cleanup, minor drift). -- **Follow-Through Section**: Record minor, same-thread tasks that should be finished before the plan is archived. -- **Convergence Rule**: If a task remains after the main milestone is complete, it belongs in follow-through or must be promoted to a new milestone/plan. - -### Required Continuation -Before archiving a completed slice that belongs to an unfinished larger outcome: -- **Required Follow-on**: Explicitly state "yes" if more work is needed for the larger goal. -- **Next Owner**: Name the surface (e.g. `roadmap` in `.agentic-workspace/planning/state.toml` or a new plan) that owns the continuation. -- **Activation Trigger**: State what signal (e.g. "human review", "CI success") triggers the next slice. - -### Closure Check -Before archiving a completed slice: -- **Slice Status**: Record that the bounded slice itself is complete. -- **Larger-Intent Status**: Record whether the broader goal is closed, partial, or still open. -- **Closure Decision**: Use `archive-and-close` only when the larger intent is actually satisfied; use `archive-but-keep-lane-open` when the slice is complete but the larger intent remains open. -- **Evidence and Reopen Trigger**: Record why the decision is honest, what evidence carries forward, and what should trigger reopening or follow-on. - -### Execution Summary -The final state before archive must include: -- **Captured Outcome**: What was actually accomplished. -- **Unfinished Detail**: What was deferred or moved to a different owner. -- **Stable References**: Links to key decisions or artifacts. - ---- - -## 5. Relationship to Tooling - -- `agentic-workspace summary --format json`: Compact machine-readable state recovery. -- `agentic-planning handoff --format json`: Derived worker contract. -- `agentic-workspace report --target ./repo --format json`: Combined workspace status. -- `agentic-workspace doctor --target ./repo`: Run deep diagnostics and planning hygiene checks. - diff --git a/.agentic-workspace/docs/installer-behavior.md b/.agentic-workspace/docs/installer-behavior.md deleted file mode 100644 index 1d4a1ea..0000000 --- a/.agentic-workspace/docs/installer-behavior.md +++ /dev/null @@ -1,60 +0,0 @@ -# Installer Behavior & Payload Resolution - -This document defines how the Agentic Workspace installer resolves its payload root and manages the transition between workspace development and standalone installation. - -## Payload Root Resolution - -Both the `planning` and `memory` bootstrap installers determine their source of truth (`payload_root`) using a hierarchical resolution strategy: - -1. **Packaged Mode**: If a `_payload/` directory exists alongside the installer script (typical in a pip-installed package), that directory is used as the payload root. -2. **Workspace/Development Mode**: If no `_payload/` directory is found, the installer traverses upwards to find the monorepo's `bootstrap/` directory: - - Planning: `packages/planning/bootstrap/` - - Memory: `packages/memory/bootstrap/` - -This dual-mode behavior allows the installer to work during development inside this monorepo while remaining portable once packaged. - -## Payload Mirroring (Maintenance Responsibility) - -In the monorepo, many payload files (such as `AGENTS.md`, `.agentic-workspace/planning/state.toml`, and core contracts in `docs/`) are authored in the workspace root but must be mirrored into the respective bootstrap directories to be included in the shipped package. - -Maintainers are responsible for ensuring that: - -- Any change to a root-level contract is mirrored to its bootstrap counterpart. -- The `REQUIRED_PAYLOAD_FILES` (Planning) and `PAYLOAD_REQUIRED_FILES` (Memory) lists are kept in sync with the actual repository structure. - -## Drift Detection - -The `agentic-workspace report` command (when run in a development workspace) automatically detects "payload drift" by comparing root-level files with their bootstrap mirrors. - -The detector now identifies: - -- **Content Mismatch**: When a file in the mirror differs from the workspace root. -- **Missing Mirror File**: When a required file exists in the root but hasn't been copied to the bootstrap mirror. -- **Extra Mirror File**: When a file exists in the bootstrap mirror but is not registered in the required files list. - -If drift is detected: - -- A `payload-drift` finding will be surfaced in the report. -- Maintainers should sync the files manually to restore consistency. - -## Managed vs. Local Files - -The installer distinguishes between three classes of files: - -1. **Root Surfaces**: `AGENTS.md` and `.agentic-workspace/planning/state.toml`. These are seeded once and then owned by the repository. -2. **Package Managed**: Contracts and scripts in `docs/` or `scripts/`. These are updated by the installer during upgrades. -3. **Generated**: Artifacts like `AGENT_QUICKSTART.md` that are derived from canonical manifests. - -## Local-only Installation - -The workspace-level `agentic-workspace install --local-only` command installs the shared workspace surfaces into `.agentic-workspace/` instead of the repository root. - -In local-only mode: - -- local package-owned state is recorded in `.agentic-workspace/LOCAL-ONLY.toml` -- repo-local `.git/info/exclude` is updated to ignore `.agentic-workspace/` -- the installed workspace continues to use the same managed planning and memory payloads -- the regular repository root surfaces remain untouched -- `agentic-workspace uninstall --local-only` removes the entire `.agentic-workspace/` tree and deletes the git-local exclude block when it was the only residue - -For more on lifecycle management, see [`.agentic-workspace/docs/lifecycle-and-config-contract.md`](lifecycle-and-config-contract.md). diff --git a/.agentic-workspace/docs/jumpstart-contract.md b/.agentic-workspace/docs/jumpstart-contract.md deleted file mode 100644 index 9a4e4b5..0000000 --- a/.agentic-workspace/docs/jumpstart-contract.md +++ /dev/null @@ -1,41 +0,0 @@ -# Jumpstart Contract - -Jumpstart is the bounded post-bootstrap phase for a newly installed or adopted Agentic Workspace in a lived-in repo. It orients the agent toward useful durable workspace surfaces without turning init into broad repo analysis. - -## Entry - -Start with compact routing: - -```bash -agentic-workspace start --target . --task "<task>" --format json -agentic-workspace setup --target . --format json -``` - -Use `setup` as a pre-write and pre-seed discovery report. It may point at candidate surfaces, promotion rules, and follow-up routes, but it does not authorize bulk imports or automatic planning/memory writes by itself. - -## Promote - -Promote only information that has a durable owner and would reduce future rediscovery: - -- stable operating boundaries, invariants, traps, restart rules, or proof expectations to Memory; -- bounded active follow-up to Planning; -- evidence-backed friction or workflow improvement to improvement intake; -- package or host-repo documentation gaps to docs only when the missing guidance is reusable. - -Keep low-confidence, generic, one-off, or broad narrative findings transient. - -## Mature Repo Seed Bias - -For mature repos, prefer compact contract-like surfaces over broad prose mirrors. Good first Memory candidates are surfaces that encode repeatable decisions, restart boundaries, task-shape guidance, proof expectations, or other durable operating knowledge. - -Do not bulk-import README files, issue backlogs, generated references, or design prose simply because they exist. Link to canonical docs instead of copying them when the document is already discoverable and not expensive to reconstruct. - -## Proof - -Before claiming setup follow-through, show: - -- the setup command used; -- the candidate surfaces inspected; -- each promoted, dismissed, or deferred finding; -- where durable residue was written, if any; -- the validation command selected for changed paths. diff --git a/.agentic-workspace/docs/lifecycle-and-config-contract.md b/.agentic-workspace/docs/lifecycle-and-config-contract.md deleted file mode 100644 index c1eed4d..0000000 --- a/.agentic-workspace/docs/lifecycle-and-config-contract.md +++ /dev/null @@ -1,59 +0,0 @@ -# Lifecycle, Configuration, and Recovery Contract - -This contract defines how the workspace is initialized, configured, and recovered from drift or failure. - -## 1. Initialization Lifecycle - -### Default Behavior -- `agentic-workspace init`: Bootstraps the repo with selected modules (`memory`, `planning`, or `full`). -- [`.agentic-workspace/docs/installer-behavior.md`](installer-behavior.md) for payload resolution and development mirroring rules. -- [`.agentic-workspace/docs/capability-aware-execution.md`](capability-aware-execution.md) for how the installer configures model-specific execution. -- **User Intent**: The selected preset (`--preset`) determines the initial module set and configuration. -- **Mode Selection**: The CLI automatically chooses a lifecycle mode (Clean install, Conservative adopt, or High-ambiguity adopt) based on existing repo state. - -### High-Ambiguity Signals -Reconciliation is required when: -- Multiple root startup files (e.g. `AGENTS.md`, `llms.txt`) overlap or conflict. -- Partial or placeholder state exists in module directories. -- Existing workflow surfaces conflict with product-managed contracts. - ---- - -## 2. Workspace Configuration - -### Authority -- **`.agentic-workspace/config.toml`**: Repo-owned source of truth for module sources, update intent, and shared lifecycle defaults. -- **`.agentic-workspace/config.local.toml`**: Optional local override for machine-local invocation, capability/cost posture, and agent-posture settings. -- **`.agentic-workspace/`**: Product-managed module state. This directory should not be edited directly; use the owning package or CLI. - -### Configuration Fields -- `default_preset`: The default module set for `init`. -- `agent_instructions_file`: The filename for the canonical startup entrypoint (default `AGENTS.md`). -- `optimization_bias`: The effective output posture (e.g. `agent-efficiency`, `token-saving`). - ---- - -## 3. Environment Recovery - -When normal work is blocked by repo-state ambiguity, interrupted bootstrap, or environment drift: - -### Recovery Path -1. **Inspect State**: Run `agentic-workspace status --target ./repo` and `agentic-workspace doctor --target ./repo`. -2. **Reconfirm Defaults**: Query `agentic-workspace defaults` and `agentic-workspace config --target ./repo`. -3. **Refresh Contracts**: Run `agentic-workspace upgrade --target ./repo --dry-run --format json`, resolve review items, then run `agentic-workspace upgrade --target ./repo --format json`. -4. **Verify**: Run `agentic-workspace doctor --target ./repo --format json`. -5. **Package-local fallback**: Use module bootstrap CLIs only for package-local debugging or when the root command cannot run. - -### Interrupted Handoff -- **`llms.txt`**: Canonical external-agent entry surface. -- **`.agentic-workspace/bootstrap-handoff.md`**: Post-bootstrap next-action brief when judgment is still needed. -- **`.agentic-workspace/bootstrap-handoff.json`**: Compact structured sibling to the handoff brief. - ---- - -## 4. Relationship to Tooling - -- `agentic-workspace config --target ./repo --format json`: Inspect effective posture and configuration; use compact/full only when the tiny answer is insufficient. -- `agentic-workspace doctor --target ./repo`: Identify and remediate environment drift. -- `agentic-workspace status --target ./repo`: Check module and repo-state health. -- `agentic-workspace upgrade --target ./repo --dry-run --format json`: Ordinary safe first step for host-repo updates. diff --git a/.agentic-workspace/docs/memory-metadata-contract.md b/.agentic-workspace/docs/memory-metadata-contract.md deleted file mode 100644 index 39cb60a..0000000 --- a/.agentic-workspace/docs/memory-metadata-contract.md +++ /dev/null @@ -1,92 +0,0 @@ -# Memory Metadata & Search Contract - -Memory is a checked-in repository contract for anti-rediscovery knowledge. This document defines the metadata schema and the search/retrieval patterns for agents. - -## Metadata Schema (manifest.toml) - -Every memory note MUST be declared in `.agentic-workspace/memory/repo/manifest.toml`. - -### Note Fields - -| Field | Type | Purpose | -| --- | --- | --- | -| `note_type` | string | Required non-empty note type such as `domain`, `invariant`, `runbook`, `recurring-failures`, `decision`, `workflow-policy`, `version-marker`, `routing`, or `routing-feedback`. | -| `canonical_home` | string | Required path to the note's canonical home. Use the note path unless the manifest explicitly routes to a canonical non-memory document. | -| `authority` | string | `canonical` (source of truth), `advisory` (helpful guidance), `supporting` (context). | -| `audience` | string | `human`, `agent`, or `human+agent`. | -| `summary` | string | Optional compact routing or durable-fact summary. | -| `canonicality` | string | `agent_only`, `candidate_for_promotion`, `canonical_elsewhere`, or `deprecated`. | -| `task_relevance` | string | `required` (always read for related tasks) or `optional` (load on demand). | -| `subsystems` | list[string] | Package, subsystem, or domain labels for routing. | -| `surfaces` | list[string] | Key terms or subsystems that trigger routing to this note. | -| `applies_to` | list[string] | Paths, subsystems, commands, or surfaces this note covers. | -| `use_when` | list[string] | Conditions under which an agent should load or apply this note. | -| `routes_from` | list[string] | Glob patterns (files/dirs) that trigger routing. | -| `stale_when` | list[string] | Glob patterns that indicate the note might need review if changed. | -| `evidence` | list[string] | Source files, checks, commits, or docs that ground the note. | -| `related_validations` | list[string] | Commands or checks that support the note's trust boundary. | -| `memory_role` | string | `durable_truth` or `improvement_signal`. | - -### Improvement Signal Fields - -Used when a note exists because the repo is missing something better than memory (docs, skill, script, test, validation, refactor, or code). - -| Field | Type | Purpose | -| --- | --- | --- | -| `symptom_of` | string | One of `workflow_friction`, `guidance_drift`, `missing_guardrail`, `architecture_friction`, or `operator_complexity`. | -| `preferred_remediation` | string | How to eliminate the need for this note: `docs`, `skill`, `script`, `test`, `validation`, `refactor`, or `code`. | -| `improvement_candidate` | boolean | Marks the note as a candidate for future promotion, automation, or deletion. | -| `improvement_note` | string | Concrete action needed in the codebase. | -| `elimination_target` | string | The goal: `shrink`, `promote`, `automate`, or `refactor_away`. | -| `promotion_target` | string | Stronger canonical owner, if known. | -| `promotion_trigger` | string | Concrete signal that should move the note to the stronger owner. | -| `retention_after_promotion` | string | Intended post-promotion memory shape: `retain`, `shrink`, `stub`, or `delete`. | -| `retention_justification` | string | Required alternative when the note is an improvement signal but no remediation metadata is available yet. | -| `config_treatment` | string | One of `promote`, `cleanup`, `retain`, or `no_action`. | -| `config_note` | string | Short explanation of the config or posture cue behind `config_treatment`. | - -### Durable Fact Fields - -Compact durable facts live under `[durable_facts."<id>"]`. Use them only when a small structured record saves repeated note reads. - -| Field | Type | Purpose | -| --- | --- | --- | -| `summary` | string | Required compact fact. | -| `owner` | string | Required owning module, subsystem, or surface. | -| `authority_class` | string | `canonical`, `advisory`, or `supporting`. | -| `route_keys` | list[string] | Query/surface terms that should pull this fact. | -| `touched_surfaces` | list[string] | File patterns that should pull this fact. | -| `evidence` | list[string] | Required anchors proving the fact. | -| `promotion` | string | Required rule for promoting the fact to stronger authority. | -| `demotion_or_expiry` | string | Required rule for retiring or demoting the fact. | -| `status` | string | `active`, `candidate`, or `deprecated`. | - -## Validation Contract - -`agentic-memory doctor --target <repo>` validates `manifest.toml` as a typed TOML contract. Invalid TOML, malformed tables, scalar values where arrays are required, non-boolean booleans, invalid enum values, incomplete improvement-signal lifecycle metadata, and incomplete durable facts produce `memory-manifest` diagnostics. - -Agents may edit manifest entries, but they should keep values inside this contract and run doctor or the workspace doctor before claiming completion. - -## Search & Retrieval Contract - -Agents should follow these patterns for "Habitual Pull": - -### 1. Automatic Routing (Preferred) - -Use `agentic-memory route --files <paths>` or `agentic-memory route --surface <terms>`. -This uses the manifest and `.agentic-workspace/memory/repo/index.md` to find the smallest set of relevant notes. - -### 2. Keyword Search (Fallback) - -Use `agentic-memory search "<query>"` to find notes containing specific keywords or patterns. - -### 3. Sync Check - -Use `agentic-memory sync-memory --files <paths>` to see which notes might be stale after your changes. - -## Note Hygiene - -- **No Overlap**: One fact has one primary home. -- **Residue Only**: Memory stores what is expensive to rediscover. If it's in the code or canonical docs, don't duplicate it in memory. -- **Weak Authority for Current**: Notes in `.agentic-workspace/memory/repo/current/` are for orientation and continuation, not durable facts. - diff --git a/.agentic-workspace/docs/minimum-operating-model.md b/.agentic-workspace/docs/minimum-operating-model.md deleted file mode 100644 index 0612687..0000000 --- a/.agentic-workspace/docs/minimum-operating-model.md +++ /dev/null @@ -1,52 +0,0 @@ -# Minimum Operating Model - -This page defines the tiny safe model for ordinary work in a repo using Agentic Workspace. - -Use it when the goal is to start useful work without loading the repo's full internal machinery up front. - -## Tiny Safe Model - -Start from: - -1. one repo startup entrypoint: `AGENTS.md` by default -2. one ordinary startup query: `agentic-workspace start --task "<task>" --format json`, or `agentic-workspace implement --changed <paths> --task "<task>" --format json` when changed paths are known -3. conditional deeper reads only after that routed packet shows that the task has crossed a real boundary - -The ordinary rule is: - -- do not open raw planning state, execplan prose, or broad routing docs until the Startup Router packet points there -- do not front-load memory or deeper module doctrine unless the task has crossed that boundary -- keep the first-contact model smaller than the repo's full internal concept set - -## Boundary-Triggered Discovery - -Escalate into a deeper layer only when the task makes that layer relevant. - -| Boundary | Escalation cue | Load next | Why | -| --- | --- | --- | --- | -| `workspace` | Startup order, lifecycle behavior, config, ownership, or combined workspace state is the actual question. | `agentic-workspace defaults --section startup --format json`, `agentic-workspace config --target ./repo --format json`, `agentic-workspace report --target ./repo --format json` | Workspace-level surfaces own routing, lifecycle orchestration, and cross-module coordination. | -| `planning` | The task needs active sequencing, blockers, proof expectations, promotion decisions, or cross-session continuation. | `agentic-workspace summary --format json`, `.agentic-workspace/planning/state.toml`, `.agentic-workspace/planning/execplans/` | Planning owns active execution state and near-term follow-through. | -| `memory` | The work keeps rediscovering repo facts, prior decisions, failure modes, or domain context that should survive the current slice. | `.agentic-workspace/memory/repo/`, `.agentic-workspace/memory/WORKFLOW.md` | Memory owns durable anti-rediscovery knowledge instead of active execution state. | - -## Top-Level Capability Advertisement - -Each top-level module should advertise only four things on startup-facing surfaces: - -1. what it owns -2. what cue should escalate into it -3. what new capability becomes available after escalation -4. what compact surface should be loaded first - -Current advertisement pattern: - -| Module | Owns | Escalate when | Capability unlocked | Compact first surface | -| --- | --- | --- | --- | --- | -| `workspace` | startup, lifecycle, routing, and combined workspace reporting | the task crosses config, install/adopt, ownership, or cross-module coordination boundaries | routed defaults/config/report guidance plus authoritative workspace contracts | `agentic-workspace start --task "<task>" --format json` | -| `planning` | active execution state, sequencing, proof expectations, and promotion-ready follow-through | the task needs milestones, blockers, queue updates, or explicit continuation semantics | summary, active queue state, execplans, and planning validation surfaces | `agentic-workspace summary --format json` | -| `memory` | durable repo knowledge, routed decisions, failure modes, and anti-rediscovery context | relevant repo understanding should persist beyond the current chat or implementation slice | routed memory notes and memory workflow guidance | `.agentic-workspace/memory/repo/` | - -## Relationship To Other Docs - -- Use [routing-contract.md](routing-contract.md) for the authoritative routing home and first-contact ordering. -- Use [compact-contract-profile.md](compact-contract-profile.md) for the selector pattern that makes this small model queryable. -- Use [delegation-posture-contract.md](delegation-posture-contract.md) when the task shape makes execution-mode choice part of the boundary question. diff --git a/.agentic-workspace/docs/module-map.md b/.agentic-workspace/docs/module-map.md deleted file mode 100644 index 29056fa..0000000 --- a/.agentic-workspace/docs/module-map.md +++ /dev/null @@ -1,78 +0,0 @@ -# Installed Module Map - -Use this file as the compact abstraction ladder for an installed Agentic Workspace repo. It is a router, not a manual. - -## Workspace - -Workspace owns cross-module orchestration: - -- startup adapters and compact first-contact commands -- lifecycle install, upgrade, status, doctor, and uninstall routing -- config, local overrides, ownership, proof routing, and combined reports -- module composition and installed-surface boundaries - -Start with compact commands before reading raw files: - -```bash -agentic-workspace start --target . --format json -agentic-workspace preflight --target . --format json -agentic-workspace summary --target . --format json -agentic-workspace report --target . --format json -``` - -## Planning - -Planning owns active execution state: - -- `.agentic-workspace/planning/state.toml` -- `.agentic-workspace/planning/execplans/*.plan.json` -- decomposition records for epic-shaped work -- active proof expectations, handoff, closeout, and continuation routing - -Use Planning when work needs to survive a session, branch, handoff, or non-obvious validation path. Completed execplans should be distilled and removed from active Planning by default; only future-relevant residue should move to Memory, docs, checks, contracts, config, Planning, or an issue. - -Preferred command: - -```bash -agentic-planning summary --target . --format json -``` - -Compatibility alias: - -```bash -agentic-planning summary --target . --format json -``` - -## Memory - -Memory owns durable anti-rediscovery knowledge: - -- invariants and authority boundaries -- subsystem orientation that is expensive to rederive -- recurring traps and operator runbooks -- routing hints that help agents read less - -Use Memory when future work should not rediscover a stable fact, constraint, or procedure. Do not store active task state, backlog, milestone history, or broad product documentation in Memory. - -Preferred command: - -```bash -agentic-memory report --target . --format json -``` - -Compatibility alias: - -```bash -agentic-memory report --target . --format json -``` - -## Generated References - -Generated reference docs explain exact fields and structured outputs. Use them after the conceptual owner is clear: - -- `docs/reference/workspace-config.md` -- `docs/reference/startup-context.md` -- `docs/reference/workspace-report.md` -- `docs/reference/cli-commands.md` - -Do not start broad work by reading generated references end to end. diff --git a/.agentic-workspace/docs/routing-contract.md b/.agentic-workspace/docs/routing-contract.md deleted file mode 100644 index b538995..0000000 --- a/.agentic-workspace/docs/routing-contract.md +++ /dev/null @@ -1,87 +0,0 @@ -# Routing and Entry Contract (Authoritative Routing Home) - -This contract defines how to enter the repository, orient quickly, and pick the right execution lane. - -## 1. Startup and First Contact - -Use the Startup Router for a fresh entry: - -1. **High-Efficiency Entry**: Use the [Cold-Start Protocol](cold-start-protocol.md) for a <3 turn activation. -2. **Configured Startup File**: Start from the configured repo startup file (default `AGENTS.md`). -3. **Startup Router**: Run `agentic-workspace start --task "<task>" --format json`, or `agentic-workspace implement --changed <paths> --task "<task>" --format json` when changed paths are already known. -4. **Routed Detail**: Use `summary`, `config`, `defaults`, `report`, or raw Planning files only when the router packet or explicit user request names that need. - -### Tiny Safe Model - -Ordinary work should begin from one small operating model: - -- one startup entrypoint: `AGENTS.md` by default -- one Startup Router query: `agentic-workspace start --task "<task>" --format json` -- one rule for deeper reads: load broader prose or module-specific surfaces only when the router packet shows the task crosses a real boundary - -Use [minimum-operating-model.md](minimum-operating-model.md) for the compact module-boundary and escalation-cue contract. - -### Surface Roles -- `AGENTS.md`: Canonical repo startup and operating rules. -- `.agentic-workspace/planning/state.toml` (`todo.active_items`): Repo-owned active task queue and smallest near-term follow-ons. -- `.agentic-workspace/planning/state.toml` (`roadmap`): Repo-owned inactive long-horizon candidate work and promotion signals. -- `.agentic-workspace/planning/execplans/`: Active, sequencing-heavy execution contracts. -- `llms.txt`: Agent entrypoint router for external handoff and first-contact. -- `agent-installation.md`: Detailed external install/adopt handoff instructions. - -### External Install/Adopt Handoff -When an external agent is installing or adopting this repo: -- **Primary Command**: `agentic-workspace init --target ./repo --preset full`. -- **Guest-Mode Command**: `agentic-workspace install --target ./repo --preset full`. -- **Optional Local Sandbox Command**: `agentic-workspace install --target ./repo --preset full --local-only`. -- **Handoff Artifacts**: Check for `.agentic-workspace/bootstrap-handoff.md` after bootstrap. -- **Orientation**: Return to the configured startup file (default `AGENTS.md`) after bootstrap is complete. - ---- - -## 2. Routine Recovery Path - -When restarting work or recovering state, prefer the compact path: - -1. **Machine-Readable State**: Query `agentic-workspace summary` for the current milestone, next action, and drift log. -2. **Compact Prose**: Use `routing-contract.md` (this file) for stable route guidance and framing. -3. **Raw Detail**: Open `.agentic-workspace/planning/state.toml` or execplan prose only when the compact summary is insufficient. - ---- - -## 3. Post-Bootstrap Jumpstart - -After initial installation or when adopting an existing repository: - -- **Setup Query**: Run `agentic-workspace setup --target ./repo --format json`. -- **Findings**: Setup findings are advisory. Promote them to `todo.active_items` only when they represent clear, actionable work. -- **Durable Residue**: Record setup results in memory or canonical docs, not as a permanent "findings" file. - ---- - -## 4. Advanced Routing Rules - -### Boundary-Triggered Discovery -- Escalate into workspace surfaces when startup order, lifecycle behavior, config, ownership, or combined workspace state is the real question. -- Escalate into planning when the task needs active sequencing, blockers, proof expectations, queue updates, or explicit continuation semantics. -- Escalate into memory when repo understanding should persist beyond the current slice instead of being rediscovered. - -### Standing Intent -- **Precedence**: Intent from `agentic-workspace summary` or `config` supersedes broad prose. -- **Supersession**: Newer checked-in intent (e.g. in a plan) supersedes older roadmap candidates. - -### Promotion and Escalation -- **Promotion**: Move work from `roadmap` to `todo.active_items` in `.agentic-workspace/planning/state.toml` when scope and dependencies are clear. -- **Escalation**: If the task exceeds local latitude or the current model's capability, use `.agentic-workspace/docs/capability-aware-execution.md` to select a stronger lane. - ---- - -## 5. Query Mapping - -| Question | Tool Command | -| --- | --- | -| What is the ordinary startup path? | `agentic-workspace defaults --section startup` | -| What is active right now? | `agentic-workspace summary --format json` | -| What is the combined workspace state? | `agentic-workspace report --target ./repo` | -| What are the candidate epics? | `agentic-workspace summary` (roadmap list) | -| What is the effective repo posture? | `agentic-workspace config --target ./repo` | diff --git a/.agentic-workspace/docs/setup-findings-contract.md b/.agentic-workspace/docs/setup-findings-contract.md deleted file mode 100644 index 78e7b4b..0000000 --- a/.agentic-workspace/docs/setup-findings-contract.md +++ /dev/null @@ -1,30 +0,0 @@ -# Setup Findings Contract - -Setup findings are optional agent-produced input from post-bootstrap discovery. They let setup, review, validation friction, and memory-improvement signals enter one improvement-intake path without making setup a repo analyzer. - -## Artifact - -The optional artifact is `tools/setup-findings.json` with kind `workspace-setup-findings/v1`. It is validated against `src/agentic_workspace/contracts/schemas/setup_findings.schema.json`. - -Use: - -```bash -agentic-workspace setup --target . --format json -agentic-workspace defaults --section improvement_intake --format json -``` - -## Accepted Classes - -`repo_friction_evidence` is for concrete repeated friction that can become a durable improvement issue, check, doc, memory note, contract, or workflow change. - -`planning_candidate` is for bounded future work that has a clear owner, next action, and reason it should not be handled inside current setup. - -## Promotion Rule - -Preserve a setup finding only when it has enough evidence to reduce future rediscovery or route bounded follow-up. Prefer findings with concrete paths, commands, symptoms, reproduction notes, confidence, and a durable owner. - -Dismiss or keep transient any finding that is speculative, generic, broad, missing a next action, or only useful to the current chat. - -## Boundaries - -Do not build a workspace-owned analyzer. Do not auto-write Planning or Memory state from setup input. Do not preserve findings that have no durable owner or bounded next action. diff --git a/.agentic-workspace/docs/system-intent-contract.md b/.agentic-workspace/docs/system-intent-contract.md deleted file mode 100644 index afc0b5e..0000000 --- a/.agentic-workspace/docs/system-intent-contract.md +++ /dev/null @@ -1,58 +0,0 @@ -# System Intent Contract - -This contract keeps the larger intended outcome visible even when work is executed in smaller bounded slices. -`SYSTEM_INTENT.md` is the repo's directional compass for that larger outcome; checked-in planning still owns active execution state, bounded slices, and continuation routing. - -## Workspace-Owned Mirror - -The host repo does not need to author system intent in a package-owned schema. -Instead: - -- repo-owned intent sources are declared in `.agentic-workspace/config.toml [system_intent]` -- workspace stores the consumed mirrored declaration in `.agentic-workspace/system-intent/intent.toml` -- `.agentic-workspace/system-intent/WORKFLOW.md` tells agents how to refresh and refine that mirror - -This keeps the consumed declaration inside the workspace home while leaving host-repo source authoring unconstrained. - -## Core Rule - -- Confirmed higher-level intent must stay recoverable separately from the currently active slice. -- Bounded slicing may narrow means, decomposition, and immediate proof, but it must not silently replace the larger requested outcome. -- Active execplans should use `system_intent_alignment` to name the materially relevant system intent, the slice-shaping bias it creates, and the broader-lane validation question that remains after local task proof. - -## Authority Ladder - -1. Confirmed request or live issue cluster: what the repo is actually trying to satisfy. -2. Active execplan delegated judgment and intent continuity: the bounded slice and its mapping back to the larger outcome. -3. Closure check and required continuation: whether the slice can archive, whether the larger outcome is still open, and where follow-through now lives. - -## Reinterpretation Boundary - -Allowed: -- choose a smaller first slice -- tighten validation -- route required continuation into one checked-in owner - -Not allowed: -- claim the larger outcome is closed without explicit evidence -- leave required continuation only in drift prose or chat -- silently substitute a cheaper but different end state - -## Recoverability Rule - -Ordinary compact inspection should answer: -- what larger outcome this slice serves -- whether that larger outcome is actually closed -- where required continuation now lives -- what evidence justified the closure decision - -Use: -- `agentic-workspace defaults --section system_intent --format json` -- `agentic-workspace summary --format json` -- `agentic-planning report --format json` -- `agentic-workspace system-intent --target ./repo --sync --format json` - -## Checked-In Residue Rule - -Keep a checked-in execplan whenever later proof, intent validation, or required continuation would be expensive or ambiguous to reconstruct from chat alone. - diff --git a/.agentic-workspace/docs/workspace-config-contract.md b/.agentic-workspace/docs/workspace-config-contract.md deleted file mode 100644 index ed2fa06..0000000 --- a/.agentic-workspace/docs/workspace-config-contract.md +++ /dev/null @@ -1,164 +0,0 @@ -# Workspace Config Contract - -## Purpose - -This contract defines the repo-owned structured agent configuration substrate that the workspace layer hosts. - -Use it when the question is: - -- what classes of structured agent configuration exist here? -- which surface is authoritative for each class? -- how do planning and memory attach to the substrate? -- which startup or handoff prose surfaces are adapters rather than primary authority? -- which compact query should answer a configuration question first? - -## Core Model - -Treat Agentic Workspace as a repo-owned agent configuration system with four configuration classes: - -| Class | Purpose | Primary owner | Compact query | -| --- | --- | --- | --- | -| Startup and adapter policy | Canonical startup entrypoint, prose adapter role, and runtime-artifact profile. | workspace config plus this contract | `agentic-workspace defaults --section startup --format json` | -| Workspace policy | Repo-owned default preset, improvement latitude, optimization bias, and update intent. | `.agentic-workspace/config.toml` | `agentic-workspace config --target ./repo --format json` | -| Module attachment | Which behavior modules exist, what they own, and how they compose without merging ownership. | module descriptors plus `.agentic-workspace/OWNERSHIP.toml` | `agentic-workspace ownership --target ./repo --format json`; `agentic-workspace modules --format json` | -| Module state | Active planning state and durable memory state that consume the substrate but stay module-owned. | planning and memory surfaces | `agentic-workspace report --target ./repo --format json` | - -The workspace layer owns the substrate and composition logic. -Planning and Memory remain behavior modules inside that substrate rather than ambient prose branches. - -## Authority Map - -- **Repo-owned workspace policy** lives in `.agentic-workspace/config.toml`. -- **Workspace-owned shared contract docs** live in `.agentic-workspace/docs/`. -- **Ownership and authority lookup** live in `.agentic-workspace/OWNERSHIP.toml` and `agentic-workspace ownership --target ./repo --format json`. -- **Module descriptors** define installed module capabilities, workflow surfaces, generated artifacts, dependencies, and conflicts. -- **Planning** owns active execution state and near-term continuation. -- **Memory** owns durable anti-rediscovery understanding. -- **Repo-owned prose startup surfaces** remain useful, but they are adapters over the structured substrate once the workspace is installed. - -Do not treat prose surfaces as the primary authority once the structured substrate can answer the same question directly. - -## Managed File Headers - -Agentic Workspace surfaces use short headers to distinguish repo-owned policy from package-owned state. - -`.agentic-workspace/config.toml` is repo-owned policy. Its installed header says agents may edit it directly only when changing repo policy, and should use `agentic-workspace config --target . --format json` to inspect the resolved effective view before relying on a setting. Use `--verbose` or `--verbose` only when the tiny answer is insufficient. - -Package-owned state surfaces, such as `.agentic-workspace/planning/state.toml`, use a stricter header. When the CLI is available, inspect them through `agentic-workspace summary --format json` and mutate through the package command named by that output instead of freehanding file structure. - -## Module Attachment Points - -Behavior modules attach to the substrate through descriptor-owned metadata: - -- module name and description -- lifecycle commands and install detection -- workflow surfaces and generated artifacts -- startup steps and sources of truth -- capability, dependency, and conflict declarations -- result-contract shape - -The workspace layer may compose those descriptors, report on them, and route startup through them. -It must not absorb module-owned domain rules or mutate planning/memory state as part of the substrate definition itself. - -## Selective Loading Rule - -Prefer the smallest compact query that answers the current configuration question: - -1. `agentic-workspace defaults --section agent_configuration_system --format json` -2. `agentic-workspace config --target ./repo --format json` -3. `agentic-workspace ownership --target ./repo --format json` -4. `agentic-workspace modules --format json` -5. `agentic-workspace report --target ./repo --format json` - -Open deeper docs or module-local surfaces only when the compact query is insufficient. - -## Compact Query Classes - -The structured substrate should answer a small number of high-value questions cheaply: - -| Query class | Ask first | Deeper only if needed | -| --- | --- | --- | -| Startup path | `agentic-workspace defaults --section startup --format json` | `agentic-workspace config --target ./repo --format json`, then `--verbose` or `AGENTS.md` only if needed | -| Active behavior modules | `agentic-workspace ownership --target ./repo --format json` | `agentic-workspace modules --format json`, then `agentic-workspace report --target ./repo --format json` | -| Proof and ownership rules | `agentic-workspace ownership --target ./repo --format json` | `agentic-workspace defaults --section validation --format json`, then `agentic-workspace report --target ./repo --format json` | -| Repo-local current work | `agentic-workspace summary --format json` | `agentic-workspace report --target ./repo --format json`, then the active execplan only if summary points there | -| Relevant subinstructions | `agentic-workspace defaults --section agent_configuration_queries --format json` | `agentic-workspace report --target ./repo --format json`, then only the module-local docs or runbooks already in scope | - -Selective loading means: - -- prefer one compact answer over broad rereads -- route from defaults, config, ownership, report, or summary before opening module-local prose -- load planning or memory details only when the compact answer points at active work or durable module-owned state -- leave unrelated modules and subinstructions unloaded unless the current surface, proof lane, or active planning state makes them relevant - -## Prose Adapter Rule - -The structured substrate is authoritative. -The following prose surfaces are compatibility adapters and routing bridges: - -- `AGENTS.md` -- `llms.txt` -- generated helper guidance exposed through compact report/default surfaces - -They should: - -- route toward the substrate -- stay compact -- avoid inventing new durable behavior first -- preserve weaker-agent compatibility without reclaiming primary authority - -## Repo-Custom Workflow Obligations - -The formal workflow component format is schema-backed at `src/agentic_workspace/contracts/workflow_definition_format.json` and exposed through `agentic-workspace defaults --section agent_configuration_workflow_extensions --format json`. -Use that compact payload when the question is how workflow components compose, attach, migrate from Markdown, or preserve flexible step internals. - -Repo-custom workflow additions should be declared in `.agentic-workspace/config.toml` under `workflow_obligations`, not invented first in `AGENTS.md` or active planning. - -Each obligation stays small and reviewable: - -- `summary`: what repo-local expectation matters -- `stage`: when it matters, such as `before-claiming-completion`, `before-commit`, or `review` -- `scope_tags`: which slices or surfaces should treat it as relevant -- `commands`: the bounded checks or finishing steps the repo expects -- `review_hint`: the compact reminder review or closure should carry forward - -The workspace layer owns declaration and reporting of these obligations. -Planning consumes only the obligations relevant to the current touched scope. -Do not use this mechanism to create a scheduler, a giant static workflow catalog, or a substitute for task-specific proof. - -## System Intent Boundary - -`SYSTEM_INTENT.md` remains a compass for shaping means and review. -It is not itself the configuration substrate, active planning state, or enforcement layer. - -Use the substrate to make relevant system-intent hooks queryable and operational. -Declare repo-owned intent sources in `.agentic-workspace/config.toml [system_intent]`, then let the workspace-owned mirrored declaration at `.agentic-workspace/system-intent/intent.toml` carry the normalized system-intent view consumed by package operations. -Refresh source metadata with `agentic-workspace system-intent --target ./repo --sync --format json`, then refine the mirrored declaration through `.agentic-workspace/system-intent/WORKFLOW.md`. - -System intent should shape: - -- which compact query or workflow obligation is worth surfacing for the current slice -- which local tradeoffs favor cheaper continuation, sharper boundaries, lower residue, or lower operating cost -- how review talks about whether the landed slice served the repo's declared direction instead of only satisfying task intent - -Do not turn system intent into a scheduler or a replacement for bounded task intent. - -## Repo-Custom Extension Boundary - -Repo-custom workflow additions should attach at the workspace/module-descriptor layer, not as planning-local extension machinery. - -They must stay: - -- bounded -- explicit about owner and trigger -- reviewable through the substrate -- narrow enough that planning only consumes the resulting obligation when it matters to active work - -Do not treat the substrate as permission to encode arbitrary repo choreography or full automation graphs. - -## Relationship To Other Docs - -- Use [lifecycle-and-config-contract.md](lifecycle-and-config-contract.md) for bootstrap, config authority, and recovery mechanics. -- Use [ownership-authority-contract.md](ownership-authority-contract.md) for current owner and authoritative-surface lookup. -- Use [minimum-operating-model.md](minimum-operating-model.md) for the startup-facing boundary map. -- Use [system-intent-contract.md](system-intent-contract.md) when the question is how higher-level system intent remains durable and recoverable. diff --git a/.agentic-workspace/memory/SKILLS.md b/.agentic-workspace/memory/SKILLS.md deleted file mode 100644 index 934d1ca..0000000 --- a/.agentic-workspace/memory/SKILLS.md +++ /dev/null @@ -1,130 +0,0 @@ -# Skills Model - -## Purpose - -This document defines the boundary between checked-in memory, checked-in repo skills, and bundled product skills in `agentic-memory`. - -## Layer boundary - -Use three layers inside a repo: - -- checked-in files = durable shared knowledge and lightweight shared context -- temporary bootstrap workspace under `.agentic-workspace/memory/bootstrap/` = bootstrap-managed lifecycle workspace during install or adopt -- checked-in repo skills under `.agentic-workspace/memory/repo/skills/` = repo-visible repeatable procedures whose primary purpose is operating on checked-in memory or maintaining the repo's memory system -- bundled product skills = bootstrap lifecycle help such as adoption, populate, and upgrade -- runtime-local mirrored skill copies = disposable caches for runtimes that copy or mirror skills locally - -Explicit registry surfaces: - -- bundled installed core skills: `.agentic-workspace/memory/skills/REGISTRY.json` -- repo-specific memory skills: `.agentic-workspace/memory/repo/skills/REGISTRY.json` - -The bootstrap contract remains the always-on minimal file structure that keeps the system understandable even without skills. `.agentic-workspace/memory/bootstrap/` is temporary operator workspace, not a durable knowledge surface. - -## Keep in checked-in docs - -Keep these in `AGENTS.md`, the repository's active planning/status surface, or `/memory`: - -- repo purpose -- local constraints and guardrails -- architecture facts and invariants -- lightweight continuation context that should stay visible in checked-in memory - -Keep milestone status, backlog state, and next-step sequencing in the repository's active planning/status surface rather than in durable memory. - -If something is a durable fact about the repo, store it in files. - -The core operating model must remain visible and useful even when skills are unavailable. - -## Checked-in core skills - -The payload ships these bootstrap-managed core memory skills under `.agentic-workspace/memory/skills/`: - -- `memory-hygiene` -- `memory-capture` -- `memory-upgrade` -- `memory-refresh` -- `memory-router` - -Treat them as the default operational interface for day-to-day memory work. - -- Keep them repo-agnostic and conservative. -- Upgrade may replace them as part of the shared payload. -- Do not put repo-specific facts into these core skills. -- Do not customise these directories in place for repo-local behaviour you expect to preserve across upgrades. -- Prefer starting with these skills before inventing a one-off memory procedure or broad memory reread. - -## Repo-specific skills - -When a repository needs a memory workflow beyond the shared core, create a new checked-in sibling skill under `.agentic-workspace/memory/repo/skills/` instead of editing the shared core skills in place. -Do not use `.agentic-workspace/memory/repo/skills/` for general coding, planning, review, deployment, or other non-memory workflows whose primary purpose is not operating on checked-in memory. - -Use a repo-specific skill when the behaviour is: - -- reusable across tasks or repos -- optional rather than mandatory -- triggerable from a clear request -- procedural and memory-operational -- too detailed for the core repo contract - -If something is a repeatable workflow over checked-in memory files, it is a strong skill candidate. -If the prose is mostly reusable steps, refresh cadence, or maintenance choreography, it probably belongs in a skill rather than in a runbook or note. - -Good repo-specific fits: - -- domain-specific capture flows -- validation-specific refresh flows -- release-memory checks -- architecture-note maintenance for local subsystems - -Keep repo-specific skills small, procedural, and explicitly grounded in checked-in memory. - -The safe split is: - -- shared product-managed skills = the shipped core directories already under `.agentic-workspace/memory/skills/` -- repo-managed skills = new sibling directories a repository adds under `.agentic-workspace/memory/repo/skills/` for repo-specific memory workflows -- runtime-local caches = mirrored copies that should follow checked-in skills rather than override them - -Upgrades may replace the shared product-managed skill directories, but should not touch added repo-specific sibling skills. -When both a checked-in repo skill and a runtime-local mirrored copy exist, treat the checked-in repo skill as authoritative. - -## Temporary bootstrap workspace - -The payload may create a temporary bootstrap workspace under `.agentic-workspace/memory/bootstrap/` during install or adopt. - -- use it for bootstrap lifecycle completion only -- do not store durable repo knowledge there -- do not add repo-specific day-to-day workflows there -- remove it after bootstrap work is complete - -## Bundled product skills - -Bundled product skills should stay limited to bootstrap lifecycle operations: - -- `bootstrap-adoption` -- `bootstrap-upgrade` -- `bootstrap-uninstall` - -Use the checked-in `memory-upgrade` skill as the normal repo-local entrypoint for "upgrade memory". -Treat bundled `bootstrap-upgrade` as the packaged upgrade implementation behind that stable entrypoint. -Do not use bundled product skills as the main place for day-to-day repo memory behaviour. - -## Avoid first - -Do not start with fuzzy skills that overlap heavily with built-in agent behaviour, such as: - -- generic planning -- generic coding -- vague "use memory better" instructions - -## Distribution stance - -For now: - -- keep bootstrap lifecycle skills bundled with the product under `skills/` -- ship day-to-day memory skills in the checked-in bootstrap-managed `.agentic-workspace/memory/skills/` surface -- treat repo-added sibling skills under `.agentic-workspace/memory/repo/skills/` as the source of truth for repo-local extensions to those shared workflows -- treat any runtime-local mirrored copies as disposable caches -- keep the mandatory bootstrap payload understandable and useful without any skill runtime support -- during development, treat the repo's checked-in files as canonical and any packaged or mirrored copies as potentially stale until explicitly refreshed - diff --git a/.agentic-workspace/memory/UPGRADE-SOURCE.toml b/.agentic-workspace/memory/UPGRADE-SOURCE.toml deleted file mode 100644 index 0432a86..0000000 --- a/.agentic-workspace/memory/UPGRADE-SOURCE.toml +++ /dev/null @@ -1,5 +0,0 @@ -source_type = "git" -source_ref = "git+https://github.com/rickardvh/agentic-workspace@master#subdirectory=packages/memory" -source_label = "agentic-memory monorepo master" -recorded_at = "2026-06-27" -recommended_upgrade_after_days = 30 diff --git a/.agentic-workspace/memory/VERSION.md b/.agentic-workspace/memory/VERSION.md deleted file mode 100644 index cb8856f..0000000 --- a/.agentic-workspace/memory/VERSION.md +++ /dev/null @@ -1,5 +0,0 @@ -# Bootstrap Version - -Version: 47 - -This file is the installed bootstrap version marker. diff --git a/.agentic-workspace/memory/WORKFLOW.md b/.agentic-workspace/memory/WORKFLOW.md deleted file mode 100644 index 8bfe999..0000000 --- a/.agentic-workspace/memory/WORKFLOW.md +++ /dev/null @@ -1,216 +0,0 @@ -# Workflow Rules - -## Purpose - -This file defines the compact shared operating model for memory use. - -Keep it concise, repo-agnostic, and non-procedural. - -## Operating split - -- `AGENTS.md` = local bootstrap contract -- repository planning/status surface = external owner of active execution state -- built-in agent planning = short-horizon planning and execution -- checked-in docs outside `/memory` = canonical repo docs and user-facing engineering guidance -- `/memory` = anti-rediscovery knowledge, not backlog state, active task state, or broad fallback documentation -- planning/status surfaces = shared active/current execution state -- `.agentic-workspace/memory/repo/current/routing-feedback.md` = optional routing calibration note for concrete missed-note or over-routing cases -- skills = optional repeatable procedures over checked-in knowledge -- local notes = optional scratch context only - -## Interoperability contract - -- Memory owns durable repo knowledge: invariants, authority boundaries, recurring failure modes, routing hints, and operator runbooks. -- The repository's active planning/status surface owns active intent and sequencing: current goal, next action, done criteria, milestone status, and backlog state. -- `.agentic-workspace/memory/repo/mistakes/recurring-failures.md` is anti-trap memory for repeated or high-likelihood mistakes, not issue tracking or bug triage. -- Memory should not keep shared current task state; use planning/status surfaces for shared continuation and local-only scratch for transient machine-local context. -- Memory complements planning by reducing re-orientation cost and preserving durable lessons; it must never compete with the planning system for ownership of active work. -- Memory is also a pressure layer: if a note exists because the repo is awkward to understand, operate, or change safely, use the note to suggest the code, docs, tooling, test, or refactor change that would let the note shrink, move, or disappear. -- When planning is installed too, memory should help plans stay smaller by holding durable context that execplans can reference instead of repeating. -- Repeated plan re-explanation or restart friction is a missing-synergy signal: either memory routing is too weak, the durable fact belongs in canonical docs, or the work needs better decomposition. - -## Core rules - -- Keep durable facts, invariants, runbooks, recurring failures, and lightweight shared context in checked-in files. -- Keep repeatable workflow-like actions in skills. -- Use `.agentic-workspace/memory/repo/index.md` as the routing layer; do not bulk-load `/memory`. -- Prefer the smallest useful working set. -- Default to `.agentic-workspace/memory/repo/index.md` plus at most 2 additional notes unless the task clearly justifies more. -- Treat low-confidence routing as a calibration signal: if routing relies on index or high-level fallbacks instead of direct manifest matches, capture the missed note rather than silently widening the default read set. -- Optimise for deletion and consolidation, not just capture. -- Prefer editing, merging, or removing existing notes over accumulating near-duplicates. -- When referenced behaviour changes, update the note, mark it `Needs verification`, or remove it in the same change. -- Memory is a reasoning aid and hint layer; it does not replace checking code, tests, or canonical docs when they are the source of truth. - -## Note maintenance rule - -- Update a note when its primary home is still correct and the guidance is still valuable. -- Prune a note when it is obsolete, duplicated, low-value, or easier to recover directly from code or tooling. -- Move closed work into a durable note only when the detail remains hard to recover from code, docs, or tooling. -- When closed work came through planning, promote only the durable residue that future work should not have to rediscover; do not absorb plan history or milestone narration into memory. -- Move procedure-heavy prose into a skill when the durable fact should stay in files but the repeated workflow should become optional execution guidance. -- Prefer one primary home for the durable fact and a short cross-reference elsewhere rather than parallel note copies. -- Ask what repo change would eliminate or shrink the note: canonical docs, stronger tests, validation, a script, a skill, or a clearer design boundary. -- Ask whether the note should still exist at all after that repo change; prefer a stub, short residue note, or deletion over carrying full prose forward by default. - -## Closeout-derived residue - -- A closeout-derived memory note captures only the compact motivation, constraint, or lesson that future work should not rediscover. -- Do not paste plan history, milestone logs, validation transcripts, backlog state, or archived-plan narration into memory. -- Include why the lesson matters for future work, when to load or use it, its likely canonical owner or promotion target, the promotion trigger, and the intended post-promotion note shape: retain, shrink, stub, or delete. -- Put recurring routing and promotion facts in manifest fields such as `summary`, `applies_to`, `use_when`, `evidence`, `promotion_target`, `promotion_trigger`, and `retention_after_promotion` instead of repeating that boilerplate in prose. -- If the residue already has a stronger home in docs, contracts, checks, code, or planning state, update that home first and leave only a short memory stub when routing value remains. -- If no future work would act differently because of the residue, discard it instead of creating a note. - -## Metadata - -- Keep strong note metadata so routing and future skills remain reliable. -- Use statuses such as `Stable`, `Active`, `Needs verification`, and `Deprecated`. -- Use ISO dates for `Last confirmed`. -- Prefer `.agentic-workspace/memory/repo/manifest.toml` for machine-readable note typing, routing, and freshness triggers when the repository maintains that file. -- Use manifest fields such as `audience`, `canonicality`, `task_relevance`, `routes_from`, and `stale_when` to distinguish note classes, promotion candidates, routing relevance, and freshness pressure. -- Optional manifest fields such as `memory_role`, `symptom_of`, `preferred_remediation`, `improvement_candidate`, `improvement_note`, and `elimination_target` can capture why a note exists and what kind of upstream improvement it may be pointing toward. -- Keep calibration artefacts distinct from durable notes: `.agentic-workspace/memory/repo/current/routing-feedback.md` should stay optional, agent-only, and free of broad routing metadata or durable-truth claims. - -## Starter templates - -- Use `.agentic-workspace/memory/repo/templates/memory-note.template.md` for a general durable note or improvement-signal note. -- Use `.agentic-workspace/memory/repo/templates/invariant.template.md` when the primary home is a must-remain-true contract. -- Use `.agentic-workspace/memory/repo/templates/runbook.template.md` when the primary home is a durable operator procedure. -- Treat the templates as starter shape only; adapt them to the repo and keep the first real note smaller than the template when possible. -- When writing the first repo-specific note for a class, prefer the matching template over copying old example prose forward. - -## Improvement metadata quick reference - -- `memory_role = "durable_truth"` means the note is expected to stay visible as anti-rediscovery knowledge. -- `memory_role = "improvement_signal"` means the note exists partly because the repo still needs an upstream improvement. -- `preferred_remediation` should name the most likely upstream target: docs, skill, script, test, validation, refactor, or code. -- `improvement_note` should stay short and concrete; say what improvement would reduce the note rather than restating the note. -- `elimination_target` should describe the intended post-remediation shape: shrink, promote, automate, or refactor away. -- `config_treatment` and `config_note` should always be present for `improvement_signal` notes, even when the answer is `no_action`, so config-shaped treatment does not stay implicit. -- `retention_justification` is the fallback when a note remains justified even though it is also an improvement signal. -- Closeout-derived notes should also name `source_closeout`, `promotion_target`, `promotion_trigger`, and `retention_after_promotion` when those are known. -- Use `summary`, `applies_to`, `use_when`, and `evidence` in the manifest for routine note routing; leave note prose for the durable explanation an agent cannot infer from metadata. -- Use the quick reminder in `.agentic-workspace/memory/repo/templates/memory-note.template.md` when you are writing the note itself and the fuller workflow below when deciding how to route follow-through. - -## Canonical-doc boundary - -- Prefer checked-in canonical docs first and memory second when stable policies, procedures, or engineering guidance already have a natural home in `README.md`, `docs/`, or equivalent repo docs. -- Treat memory as assistive residue by default: short lessons, pitfalls, routing hints, operator context, and compact shared state. -- If a memory note becomes stable guidance for humans, mark it as a promotion candidate, move the canonical truth into checked-in docs, then leave a short memory stub or fallback note instead of duplicate prose. -- If a note is already marked `canonical_elsewhere`, keep it visibly smaller than the canonical doc and resist turning fallback context back into a second handbook. -- Do not make core repo docs depend on memory unless the repository explicitly chooses that policy boundary. - -## Current-context files - -- Shared `project-state.md` and `task-context.md` current-memory files are deprecated migration residue, not normal Memory features. -- New installs should not create shared current-state files. -- Existing `project-state.md` or `task-context.md` files should be migrated: durable facts move into normal memory notes or canonical docs, active state moves into planning/status, and transient context moves into local-only scratch. -- `.agentic-workspace/memory/repo/current/routing-feedback.md` is optional routing calibration only. -- Do not treat routing-feedback as durable knowledge; it is temporary calibration input and should be compressed or removed once the route is tuned. -- No shared current-memory file should become a task list, detailed plan, journal, backlog, ledger, tranche history, or duplicated memory summary. -- Keep `routing-feedback.md` compact and review-shaped: record only concrete missed-note or over-routing cases, then compress or remove resolved entries. -- Bias calibration toward missed-note capture first; over-routing cases are useful, but they are more subjective and should stay especially high-signal. -- Treat planner-like headings such as backlog, roadmap, completed tasks, timeline, sprint, action items, or next steps as suspicion signals that the current note may be drifting. - -## Ownership boundary - -- bootstrap-managed surface in a repo = the workflow pointer block in `AGENTS.md`, `.agentic-workspace/memory/`, and other files the installer classifies as shared replaceable -- repo-owned surface in a repo = customised `AGENTS.md` content outside the workflow pointer block, repo-added sibling skills under `.agentic-workspace/memory/repo/skills/`, and ordinary notes outside product-managed shared directories -- `.agentic-workspace/memory/` is product-managed shared guidance and workflow support; treat it as upgrade-replaceable unless the repository is intentionally changing the shared bootstrap contract itself. -- The shipped core skills under `.agentic-workspace/memory/skills/` are also product-managed and may be replaced on upgrade. -- Other checked-in `/memory` notes are repo-owned working knowledge and are expected to diverge from the starter payload over time. -- Runtime-local or user-local mirrored skill copies are cache-only convenience copies, not a durable source of truth. -- When a repo needs local procedure changes, add a new sibling skill under `.agentic-workspace/memory/repo/skills/` instead of customising the shipped core skills in place. -- If a local note or skill is meant to survive upgrades unchanged, do not place that repo-specific content in `.agentic-workspace/memory/`. -- Shared guidance about how to use memory skills belongs in product-managed memory files, not in repo-specific `AGENTS.md` prose outside the managed workflow pointer block. - -## Skills boundary - -- Skills operate on memory; they do not replace it. -- `.agentic-workspace/memory/repo/skills/` is reserved for skills whose primary purpose is operating on checked-in memory or maintaining the memory system, not for general repo workflows. -- When a repository has shipped shared memory skills, treat `.agentic-workspace/memory/skills/README.md` as the discovery surface for those skills instead of expanding `AGENTS.md` with more shared trigger prose. -- If prose starts describing a repeatable maintenance, routing, refresh, capture, hygiene, or upgrade workflow, that is usually a skill candidate. -- If a domain or decision note starts accumulating command-heavy repeatable steps, split the procedure into a runbook or checked-in skill before broadening the note further. -- Checked-in repo-local skills should take precedence over runtime-local mirrors or cached user copies when both exist. -- The base memory system must remain understandable without skills. - -## Stale-note pressure - -- Review notes not only by age, but also when they become large, frequently touched, cross-domain, or hard to route cleanly. -- Pay extra attention to legacy current-memory files such as `.agentic-workspace/memory/repo/current/project-state.md` and `.agentic-workspace/memory/repo/current/task-context.md`; migrate or delete them instead of normalizing shared active-state storage. -- Freshness review should consider semantic drift as well as age: linked code, commands, authority boundaries, or expected routing surfaces may have changed even when metadata still looks current. -- If a note keeps growing through unrelated edits, split it by primary home or move repeated procedure into a skill. -- Use note-type-aware size pressure: keep invariants especially tight, keep runbooks procedural, and keep optional routing calibration very small. -- Watch for multi-home drift early: procedures do not belong in domain notes, invariants do not belong in runbooks, and durable rationale should not stay buried in operational checklists. - -## Capture threshold - -- Write to memory only when the fact is hard to recover quickly from code, tests, tooling, or the repository's active planning/status surface. -- If planning keeps reintroducing the same durable explanation, prefer adding or tightening one memory note or canonical doc instead of repeating the prose in each plan. -- Good memory captures include invariants, authority boundaries, recurring failure modes, routing hints, operator runbooks, durable consequences, and still-relevant rejected-path boundaries. -- Do not store milestone status, next-step checklists, backlog state, or execution logs in memory; those belong in the planning/status surface. -- Keep user-specific preferences, collaboration habits, and stylistic defaults out of repo memory unless they are explicitly adopted as shared technical policy. - -## Improvement pressure - -- Treat durable truth and improvement signals differently. -- Durable truth should remain visible in memory when it is genuinely expensive to rediscover and not better owned elsewhere. -- Improvement signals are notes that exist because the repo still needs clearer docs, better tests, stronger validation, better tooling, cleaner automation, or simpler design. -- Improvement-signal notes should declare either a remediation path or a short retention justification explaining why the note still belongs in memory. -- Do not assume memory volume should trend downward across all repos or stages; some systems genuinely need more durable memory for a time. -- Judge memory by whether it justifies its cost and reduces rediscovery, not by whether the note count falls. -- Do not let improvement-signal notes become permanent substitutes for repo improvements when those improvements are feasible. -- If the same note keeps being needed for safe work on one subsystem, consider whether the repo needs docs promotion, a skill, a script, a regression test, stronger validation, or refactor review. -- Apply that pressure during normal task work, not only during explicit maintenance passes. -- When routing or syncing memory exposes repeated friction, note sprawl, or recurring workarounds, propose or make the smallest upstream improvement that would reduce the note when it is safe and in scope. -- When the same friction shows up again but is still below issue or active-plan threshold, add or update one short dated entry in `.agentic-workspace/memory/repo/runbooks/recurring-friction-ledger.md` instead of letting the signal reset into chat. -- When planning and memory are both installed, repeated restart friction or repeated execplan background prose should be treated as an improvement-targeting signal about the interaction contract, not only as a local writing preference. -- Prefer emitting a concrete remediation target over a vague hint: suggest where the docs, skill, script, test, validation, or refactor should land, then keep the memory note only as residue, a stub, or a short fallback summary. -- Treat `promotion-report` as the main elimination workflow: use it to decide the upstream target and the intended post-remediation memory shape before expanding the note further. -- If remediation lands, explicitly re-evaluate whether the note should shrink, become a stub, or disappear instead of assuming it remains justified. -- Keep the package advisory outside managed bootstrap surfaces: it may diagnose, classify, prioritise, and suggest concrete repo-owned targets, but it must not autonomously rewrite repo-owned docs, tests, scripts, or code outside the managed bootstrap surface. -- If remediation suggestions become too repo-shape-specific, prefer a clearer handoff into repo-owned work over making the bootstrap itself more invasive. - -## Improvement-targeting workflow - -- First decide whether the note is durable truth or a symptom of something that should improve upstream. -- Treat the note as a symptom when it mainly exists because better docs, tests, validation, scripts, skills, refactors, or clearer design boundaries are still missing. -- Choose one primary remediation target category before expanding the note further: canonical docs, regression tests, validation/checks, scripts/commands, skills, refactor/cleanup, or design-boundary clarification. -- Route the signal based on remaining uncertainty: - - keep it in memory with explicit remediation metadata when the target is obvious and no broader analysis is needed yet - - create a review artifact when the right upstream target or scope still needs bounded analysis - - raise or update an issue when the signal should enter the upstream intake layer - - promote to `roadmap` in `.agentic-workspace/planning/state.toml` when the improvement is plausible future work but not active now - - promote to `todo.active_items` plus an execplan when the remediation is explicitly selected for active execution -- record the intended post-remediation note shape before closing the signal: retain, shrink, stub, or delete. -- After remediation lands, revisit the note in the same change or the next maintenance pass and either keep it with a short retention justification or shrink, stub, or delete it. -- If the signal keeps surviving several maintenance cycles without a chosen target, treat that as workflow failure and escalate it into review, roadmap, or explicit maintainer triage instead of letting memory remain a silent workaround bucket. - -## Remediation paths - -- recurring mistakes -> consider regression tests, validation, or lint rules -- prose-heavy procedures -> consider a checked-in skill first, then a repo-owned script or command if the workflow remains mechanical -- stable human-facing guidance -> consider canonical docs, with memory left as a stub or backlink -- large orientation notes for one code area -> consider refactor review or clearer boundaries -- repeated routing crutches for one awkward area -> consider naming, structure, or ownership cleanup - -## Anti-patterns - -- turning memory into a task tracker -- copying plan content into durable notes -- storing rediscoverable facts that are easier to inspect directly -- coupling freshness checks to a specific planner or planning file -- forcing repositories to adopt the memory taxonomy inside their planning system - -## Local notes - -- Local scratch is optional only. -- It must not become required shared knowledge or hidden task state. - -## Before ending a task - -1. Update or remove stale memory in the same change. -2. Keep active shared state in planning/status and transient handoff context in local-only scratch. -3. Update `.agentic-workspace/memory/repo/current/routing-feedback.md` only for concrete routing calibration. -4. If repeated friction appeared during the work, capture or update the smallest dated entry in `.agentic-workspace/memory/repo/runbooks/recurring-friction-ledger.md` before ending the task. diff --git a/.agentic-workspace/memory/bootstrap/README.md b/.agentic-workspace/memory/bootstrap/README.md deleted file mode 100644 index 4ad3522..0000000 --- a/.agentic-workspace/memory/bootstrap/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Temporary Bootstrap Workspace - -This directory is a temporary operator workspace created by `agentic-memory` during install and populate flows. - -Use the local skills under `.agentic-workspace/memory/bootstrap/skills/` to finish install and populate bootstrap lifecycle work: - -- `install` -- `populate` -- `cleanup` - -`.agentic-workspace/memory/bootstrap/` is bootstrap-managed and may be recreated by later installs or upgrades. -It is not a home for day-to-day repo procedures or durable repo knowledge. - -Upgrade work is now handled by the permanent packaged `bootstrap-upgrade` skill instead of this temporary workspace. -When bootstrap work is complete, prefer `agentic-memory bootstrap-cleanup --target <repo>`. The `cleanup` skill is the repo-local fallback for install and populate cleanup. - diff --git a/.agentic-workspace/memory/bootstrap/skills/REGISTRY.json b/.agentic-workspace/memory/bootstrap/skills/REGISTRY.json deleted file mode 100644 index c59490f..0000000 --- a/.agentic-workspace/memory/bootstrap/skills/REGISTRY.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "schema_version": "skill-registry.v1", - "owner": "agentic-memory", - "source_kind": "temporary-memory-bootstrap-skills", - "skills": [ - { - "id": "install", - "path": "install/SKILL.md", - "scope": "temporary-bootstrap", - "stability": "temporary-bootstrap-workspace", - "summary": "finish temporary Memory bootstrap installation review conservatively", - "activation_hints": { - "verbs": ["install", "adopt", "bootstrap", "review"], - "nouns": ["memory bootstrap", "temporary bootstrap workspace", "install review", "manual review"], - "phrases": ["finish bootstrap installation", "memory install review", "adopt memory bootstrap"], - "when": ["temporary memory bootstrap workspace is present", "after agentic-memory init install or adopt"] - } - }, - { - "id": "cleanup", - "path": "cleanup/SKILL.md", - "scope": "temporary-bootstrap", - "stability": "temporary-bootstrap-workspace", - "summary": "remove the temporary Memory bootstrap workspace after install or upgrade work is complete", - "activation_hints": { - "verbs": ["cleanup", "remove", "delete", "finish"], - "nouns": ["temporary bootstrap workspace", "memory bootstrap cleanup", "bootstrap residue"], - "phrases": ["bootstrap cleanup", "remove temporary bootstrap workspace", "clean up memory bootstrap"], - "when": ["bootstrap work is complete", "temporary memory bootstrap workspace should be removed"] - } - } - ] -} diff --git a/.agentic-workspace/memory/bootstrap/skills/cleanup/SKILL.md b/.agentic-workspace/memory/bootstrap/skills/cleanup/SKILL.md deleted file mode 100644 index 4be554f..0000000 --- a/.agentic-workspace/memory/bootstrap/skills/cleanup/SKILL.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -name: cleanup -description: Remove the temporary bootstrap workspace after bootstrap installation or upgrade work is complete. ---- - -# Cleanup - -Use this skill when bootstrap install, populate, or upgrade work is complete and the CLI cleanup command is not being used. - -## Workflow - -1. Confirm there is no remaining bootstrap work that still depends on `.agentic-workspace/memory/bootstrap/`. -2. Point out any last manual-review items that must be handled before cleanup. -3. Remove `.agentic-workspace/memory/bootstrap/`. -4. Confirm that the persistent repo surfaces remain: - - `AGENTS.md` - - `.agentic-workspace/memory/repo/` - - `.agentic-workspace/memory/skills/` - - `.agentic-workspace/memory/repo/skills/` - -## Guardrails - -- Do not remove `.agentic-workspace/memory/skills/`, repo-owned `.agentic-workspace/memory/repo/skills/`, or any other durable memory content. -- Stop and report if cleanup would discard unresolved bootstrap work. - -## Typical outputs - -- confirmation that bootstrap work is complete -- removal of `.agentic-workspace/memory/bootstrap/` diff --git a/.agentic-workspace/memory/bootstrap/skills/cleanup/agents/openai.yaml b/.agentic-workspace/memory/bootstrap/skills/cleanup/agents/openai.yaml deleted file mode 100644 index 417e33d..0000000 --- a/.agentic-workspace/memory/bootstrap/skills/cleanup/agents/openai.yaml +++ /dev/null @@ -1,3 +0,0 @@ -description: Remove the repo's temporary bootstrap workspace after lifecycle work is complete. -prompt: - default_prompt: "Use $cleanup from the repo's `.agentic-workspace/memory/bootstrap/skills/` path to remove the temporary bootstrap workspace when bootstrap work is complete." diff --git a/.agentic-workspace/memory/bootstrap/skills/install/SKILL.md b/.agentic-workspace/memory/bootstrap/skills/install/SKILL.md deleted file mode 100644 index 3c53538..0000000 --- a/.agentic-workspace/memory/bootstrap/skills/install/SKILL.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: install -description: Finish bootstrap installation conservatively after the CLI has created the temporary bootstrap workspace in the target repository. ---- - -# Install - -Use this skill after `agentic-memory init`, `install`, or `adopt` to finish installation review from the temporary bootstrap workspace. - -## Workflow - -1. Read the target repo's local contract: - - `AGENTS.md` - - `.agentic-workspace/memory/repo/index.md` - - `.agentic-workspace/memory/WORKFLOW.md` -2. Review created files and manual-review items. -3. Finish the conservative installation review: - - keep repo-specific `AGENTS.md` content local and compact - - keep task tracking outside the installed memory contract - - preserve repo-specific notes unless there is clear evidence they should be aligned -4. If installation created new current-memory files, use `populate` from the same path. -5. Point out the shipped bootstrap-managed memory skills under `.agentic-workspace/memory/skills/` and any repo-specific memory skills under `.agentic-workspace/memory/repo/skills/`, keeping the managed package home concentrated under `.agentic-workspace/` rather than spreading package-managed machinery across the wider repo. -6. When install work is complete, prefer `agentic-memory bootstrap-cleanup --target <repo>`. - -## Guardrails - -- Do not overwrite repo-local files just because the bootstrap has a generic version. -- Keep durable knowledge in checked-in files. -- Keep repo-specific memory workflows under `.agentic-workspace/memory/repo/skills/`, not under `.agentic-workspace/memory/bootstrap/skills/`. -- General non-memory workflows do not belong under `.agentic-workspace/memory/repo/skills/`. -- Treat `.agentic-workspace/memory/bootstrap/` as temporary bootstrap workspace only. - -## Typical outputs - -- a concise review of install results -- manual-review items called out clearly -- a follow-up to `populate` when relevant -- a follow-up to `bootstrap-cleanup` when bootstrap work is complete - diff --git a/.agentic-workspace/memory/bootstrap/skills/install/agents/openai.yaml b/.agentic-workspace/memory/bootstrap/skills/install/agents/openai.yaml deleted file mode 100644 index 646925e..0000000 --- a/.agentic-workspace/memory/bootstrap/skills/install/agents/openai.yaml +++ /dev/null @@ -1,3 +0,0 @@ -description: Finish bootstrap installation review from the target repo's temporary bootstrap workspace. -prompt: - default_prompt: "Use $install from the repo's `.agentic-workspace/memory/bootstrap/skills/` path to finish bootstrap installation conservatively." diff --git a/.agentic-workspace/memory/repo/decisions/README.md b/.agentic-workspace/memory/repo/decisions/README.md deleted file mode 100644 index 69e1e84..0000000 --- a/.agentic-workspace/memory/repo/decisions/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Decisions - -Use this folder for historical architectural or operational context that is still worth keeping but is not part of live operational memory. - -Good candidates: - -- major trade-offs with lasting consequences -- rationale that is repeatedly revisited -- architecture background that would clutter a current operational note -- decisions that are no longer active enough for the planning surface but are still worth keeping -- rejected-path boundaries that still matter for future choices - -Do not store routine runbook steps, implementation residue, subsystem behaviour, or meeting history here unless the context still encodes a consequence-bearing boundary that future work needs to respect. -Move a decision out of the active planning surface once it no longer changes implementation choices and is only worth keeping as durable rationale. diff --git a/.agentic-workspace/memory/repo/domains/README.md b/.agentic-workspace/memory/repo/domains/README.md deleted file mode 100644 index 6460db7..0000000 --- a/.agentic-workspace/memory/repo/domains/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Domain Notes - -Domain notes capture subsystem behaviour, boundaries, traps, and recurring implementation context. - -Use this folder for notes such as: - -- runtime or deployment behaviour -- API or tool exposure rules -- retrieval or search behaviour -- validation or testing workflow boundaries -- data-model or architecture subsystem notes - -Keep domain notes concise, operational, and easy to route from touched files. -Use domain notes for orientation and subsystem boundaries, not for historical rationale or step-by-step operator procedure. diff --git a/.agentic-workspace/memory/repo/invariants/README.md b/.agentic-workspace/memory/repo/invariants/README.md deleted file mode 100644 index 0cbe7e0..0000000 --- a/.agentic-workspace/memory/repo/invariants/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Invariants - -Invariant notes capture things that must remain true. - -Use this folder for: - -- interface or response contracts -- state or storage guarantees -- safety or policy boundaries -- rules that should trigger immediate review when related files change - -Keep invariants explicit, testable, and strongly linked to verification steps. diff --git a/.agentic-workspace/memory/repo/runbooks/README.md b/.agentic-workspace/memory/repo/runbooks/README.md deleted file mode 100644 index fab428e..0000000 --- a/.agentic-workspace/memory/repo/runbooks/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Runbooks - -Runbooks capture repeatable procedures where the durable value is the operator fact, boundary, symptom, or verification rather than the whole reusable workflow. - -Use this folder for: - -- operator workflows -- debugging procedures -- deployment or system-change steps -- recovery sequences -- lightweight recurring-friction evidence that should accumulate before it graduates into planning or issue form -- compact config-shaped treatment guidance for signals when the durable value is how the repo wants a note promoted, retained, cleaned up, or explicitly left alone, with that choice recorded rather than inferred - -Keep runbooks symptom-driven, concrete, and easy to follow under time pressure. -Use a runbook for entry conditions, symptoms, checks, boundaries, and verification. -If a section is mostly reusable maintenance choreography, refresh cadence, or multi-step workflow prose, move that procedure into a skill instead of letting the runbook sprawl. diff --git a/.agentic-workspace/memory/repo/templates/invariant.template.md b/.agentic-workspace/memory/repo/templates/invariant.template.md deleted file mode 100644 index 461bc68..0000000 --- a/.agentic-workspace/memory/repo/templates/invariant.template.md +++ /dev/null @@ -1,60 +0,0 @@ -# <Title> - -## Status - -Stable | Active | Needs verification | Deprecated - -Use one status exactly as written above. - -## Scope - -<files / subsystem / contract> - -## Applies to - -List concrete files, modules, tools, commands, or runtime surfaces that this note relates to. - -Use concrete paths, modules, tools, commands, or runtime surfaces so agents can match touched files to relevant notes quickly. - -This helps agents determine relevance from touched files during a task. - -Examples: -- src/<contract-module>.py -- <interface definition path> -- <runtime contract or command> - -## Load when - -- <When an agent should read this invariant> - -## Review when - -- <Changes that must trigger immediate review> - -## Failure signals - -- <Signals that the invariant may have been broken> - -## What must remain true - -- <Invariant statement> - -## Why it matters - -- <Why this invariant is important> - -## How it could break - -- <Likely failure mode> - -## Verify - -- <Tests, commands, or files that confirm the invariant still holds> - -## Verified against - -- Optional but recommended for critical invariants: list the exact files, interfaces, commands, or test suites checked. - -## Last confirmed - -YYYY-MM-DD during <task / PR / investigation> diff --git a/.agentic-workspace/memory/repo/templates/memory-note.template.md b/.agentic-workspace/memory/repo/templates/memory-note.template.md deleted file mode 100644 index 21b2e3a..0000000 --- a/.agentic-workspace/memory/repo/templates/memory-note.template.md +++ /dev/null @@ -1,123 +0,0 @@ -# <Title> - -## Status - -Stable | Active | Needs verification | Deprecated - -Use one status exactly as written above. - -## Canonicality - -agent_only | candidate_for_promotion | canonical_elsewhere | deprecated - -Use `agent_only` for compact assistive memory. -Use `candidate_for_promotion` when the note is stabilising into normal repo docs. -Use `canonical_elsewhere` when checked-in docs already own the truth and this note is only residue, routing help, or a stub. -Keep the note short when it is `agent_only`: prefer lessons, pitfalls, and residue over full handbook prose. - -## Structured manifest metadata - -Prefer `.agentic-workspace/memory/repo/manifest.toml` for recurring routing and promotion facts: - -- `summary`: compact note summary -- `applies_to`: paths, subsystems, commands, or surfaces this note covers -- `use_when`: when an agent should load or apply this note -- `stale_when`: files or surfaces that should trigger review -- `evidence`: source files, checks, commits, or docs that ground this note -- `promotion_target`: stronger canonical owner, if known -- `promotion_trigger`: signal that should move this note to the stronger owner -- `retention_after_promotion`: retain | shrink | stub | delete - -Keep prose below for durable explanation only. - -## Improvement signal metadata - -Required when the note exists because of repo friction rather than durable truth: - -- `memory_role`: `durable_truth` or `improvement_signal` -- `preferred_remediation`: `docs` | `skill` | `script` | `test` | `validation` | `refactor` | `code` -- `elimination_target`: `shrink` | `promote` | `automate` | `refactor_away` -- `config_treatment`: `promote` | `cleanup` | `retain` | `no_action` -- `config_note`: short note describing which current config rule or posture shaped that treatment - -Use these when you want the package to recommend an upstream improvement that should reduce the note later. -Prefer a concrete remediation target and an explicit post-remediation memory shape over vague prose. -If the likely post-remediation shape is "delete this note", say so explicitly instead of assuming the note will continue by default. -Use `config_treatment = "no_action"` with a short `config_note` when current config does not materially change treatment but you still need that non-effect to be explicit. - -## Closeout-derived residue - -Use this section only when the note is created from completed work or planning closeout: - -- `source_closeout`: issue, plan, PR, commit, or other closeout surface -- `motivation`: compact motivation, constraint, or lesson worth preserving -- `why_it_matters`: why future work should act differently because this exists -- `use_when`: when an agent should load or apply this residue -- `promotion_target`: likely canonical owner, such as docs, contracts, checks, code, or planning -- `promotion_trigger`: concrete signal that should move the truth to the stronger home -- `retention_after_promotion`: retain | shrink | stub | delete - -Do not paste plan history, milestone logs, validation transcripts, backlog state, or archived-plan narration here. -If the residue is already canonical elsewhere, update that owner first and keep this note as a compact routing stub only when it still saves rediscovery. - -## Scope - -<files / subsystem / surface> - -## Applies to - -List concrete files, modules, tools, commands, or runtime surfaces that this note relates to. - -Use concrete paths, modules, tools, commands, or runtime surfaces so agents can match touched files to relevant notes quickly. - -This helps agents determine relevance from touched files during a task. - -Examples: -- src/<subsystem>/* -- <interface entrypoint path> -- <runtime surface or command> - -## Load when - -- <When an agent should read this note> - -## Review when - -- <What changes should trigger re-checking this note> - -## Failure signals - -- <Signals indicating this note may apply> - -## Rule or lesson - -- <Core rule or durable lesson> -- Prefer durable orientation or boundary knowledge here; move procedure-heavy repeated steps into a skill or runbook as appropriate. -- If the note starts mixing boundaries, invariants, rationale, and repeatable steps, split those into separate primary homes instead of keeping a multi-home note. -- If the note starts to read like a reusable maintenance script or refresh checklist, prefer a skill instead. -- If the content becomes stable human-facing policy or procedure, promote it into checked-in canonical docs and reduce this note to a short stub or fallback summary. - -Examples - -- Good compact memory: "Rollback usually fails when release verification races cache invalidation; verify service health before retrying." -- Likely canonical doc instead: "Full deployment procedure for production, staging, and rollback." - -## How to recognise it - -- <How to know this note is relevant> - -## What to do - -- <Action to take when the note applies> - -## Verify - -- <Files, tests, commands, or checks that confirm this note is still correct> - -## Verified against - -- Optional: list the exact files, interfaces, commands, or test suites this note was last checked against. - -## Last confirmed - -YYYY-MM-DD during <task / PR / investigation> diff --git a/.agentic-workspace/memory/repo/templates/runbook.template.md b/.agentic-workspace/memory/repo/templates/runbook.template.md deleted file mode 100644 index f341161..0000000 --- a/.agentic-workspace/memory/repo/templates/runbook.template.md +++ /dev/null @@ -1,76 +0,0 @@ -# <Title> - -## Status - -Stable | Active | Needs verification | Deprecated - -Use one status exactly as written above. - -## Scope - -<system / workflow / operator task> - -## Applies to - -List concrete files, modules, tools, commands, or runtime surfaces that this note relates to. - -Use concrete paths, modules, tools, commands, or runtime surfaces so agents can match touched files to relevant notes quickly. - -This helps agents determine relevance from touched files during a task. - -Examples: -- scripts/<operator-task>.sh -- <deployment or maintenance command> -- <runtime endpoint or admin surface> - -## Load when - -- <When an operator or agent should use this runbook> - -## Review when - -- <What changes require the runbook to be re-checked> - -## Failure signals - -- <Operational symptoms that indicate this runbook may apply> - -## When to use this - -- <Entry conditions> - -## Symptoms - -- <Observed behaviour> - -## Checks - -- <Facts or diagnostics to gather first> - -## Steps - -1. <Step one> -2. <Step two> -3. <Step three> - -## Verification - -- <How to confirm the procedure worked> -- Optional: add a short expected-state checklist here when production verification matters. - -## Boundary reminder - -- Keep the runbook focused on durable facts, entry conditions, symptoms, checks, boundaries, and verification. -- Move reusable maintenance choreography, refresh cadence, and multi-step workflow prose into a skill instead of expanding the runbook. - -## Verified against - -- Optional: list the exact files, interfaces, commands, or environments this runbook was last checked against. - -## Pitfalls - -- <Common mistakes or misleading signals> - -## Last confirmed - -YYYY-MM-DD during <task / PR / investigation> diff --git a/.agentic-workspace/memory/skills/REGISTRY.json b/.agentic-workspace/memory/skills/REGISTRY.json index 74f9d56..bcf5b8e 100644 --- a/.agentic-workspace/memory/skills/REGISTRY.json +++ b/.agentic-workspace/memory/skills/REGISTRY.json @@ -83,4 +83,3 @@ } ] } - diff --git a/.agentic-workspace/memory/skills/memory-refresh/SKILL.md b/.agentic-workspace/memory/skills/memory-refresh/SKILL.md index 12e1a0c..2cb7bb9 100644 --- a/.agentic-workspace/memory/skills/memory-refresh/SKILL.md +++ b/.agentic-workspace/memory/skills/memory-refresh/SKILL.md @@ -59,4 +59,3 @@ It operates on checked-in memory files and keeps them aligned with the codebase. - notes marked `Needs verification` where certainty is incomplete - deprecated or removed stale notes - an updated `.agentic-workspace/memory/repo/index.md` or `.agentic-workspace/memory/repo/manifest.toml` when routing changed - diff --git a/.agentic-workspace/memory/skills/memory-router/SKILL.md b/.agentic-workspace/memory/skills/memory-router/SKILL.md index e801ec6..06c64b8 100644 --- a/.agentic-workspace/memory/skills/memory-router/SKILL.md +++ b/.agentic-workspace/memory/skills/memory-router/SKILL.md @@ -48,4 +48,3 @@ It helps the agent load memory selectively instead of scanning the whole reposit - a small set of relevant memory notes to read next - a clearer explanation of why those notes matter - an updated `.agentic-workspace/memory/repo/index.md` or `.agentic-workspace/memory/repo/manifest.toml` when routing drift is discovered - diff --git a/.agentic-workspace/memory/skills/memory-upgrade/agents/openai.yaml b/.agentic-workspace/memory/skills/memory-upgrade/agents/openai.yaml index 5c8248b..527031a 100644 --- a/.agentic-workspace/memory/skills/memory-upgrade/agents/openai.yaml +++ b/.agentic-workspace/memory/skills/memory-upgrade/agents/openai.yaml @@ -2,4 +2,3 @@ interface: display_name: "Memory Upgrade" short_description: "Upgrade the checked-in memory scaffold for this repo." default_prompt: "Use $memory-upgrade to upgrade memory for the current repository. Prefer `agentic-memory upgrade --target <repo>` when the CLI is on PATH; otherwise use the recorded source with `uvx --from <recorded-source> agentic-memory upgrade --target <repo>`, or `pipx run --spec <recorded-source> agentic-memory upgrade --target <repo>` if `uvx` is unavailable. Do not rewrite repo-owned notes unless explicitly asked." - diff --git a/.agentic-workspace/payload-provenance.json b/.agentic-workspace/payload-provenance.json deleted file mode 100644 index b412b90..0000000 --- a/.agentic-workspace/payload-provenance.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "command_generation": { - "package": "command-generation", - "runtime_required": false, - "source": "released-wheel", - "source_identity": "C:/Users/ricka/Documents/src/command-generation/src/command_generation/__init__.py", - "version": "1.1.0" - }, - "installed_at": "2026-06-18T16:27:37+00:00", - "installed_by": { - "module_path": "C:/Users/ricka/Documents/src/command-generation/.venv/Lib/site-packages/agentic_workspace/_generated_cli_package_impl/cli.py", - "package": "agentic-workspace", - "python_executable": "C:/Users/ricka/Documents/src/command-generation/.venv/Scripts/python.exe", - "source": "released-wheel", - "source_class": "installed-package", - "source_identity": "C:/Users/ricka/Documents/src/command-generation/.venv/Lib/site-packages/agentic_workspace/_generated_cli_package_impl/cli.py", - "version": "0.6.2" - }, - "kind": "agentic-workspace/payload-provenance/v1", - "payload_files": [ - ".agentic-workspace/WORKFLOW.md", - ".agentic-workspace/OWNERSHIP.toml", - ".agentic-workspace/docs/jumpstart-contract.md", - ".agentic-workspace/docs/module-map.md", - ".agentic-workspace/docs/setup-findings-contract.md", - ".agentic-workspace/skills/REGISTRY.json", - ".agentic-workspace/skills/workspace-startup/SKILL.md", - ".agentic-workspace/skills/workspace-intent-discovery/SKILL.md", - ".agentic-workspace/skills/workspace-work-shape/SKILL.md", - ".agentic-workspace/skills/workspace-proof-selection/SKILL.md", - ".agentic-workspace/skills/workspace-transition-gates/SKILL.md", - ".agentic-workspace/skills/workspace-operating-loop/SKILL.md", - ".agentic-workspace/skills/workspace-setup-jumpstart/SKILL.md", - ".agentic-workspace/system-intent/WORKFLOW.md" - ], - "payload_schema": "agentic-workspace/payload/v1", - "release_identity": { - "package": "agentic-workspace", - "release_model": "coordinated-workspace", - "tag": "v0.6.2", - "version": "0.6.2" - }, - "rule": "Repo payload provenance records the coordinated AW release identity and executable/source identity that installed or last synced the AW payload." -} diff --git a/.agentic-workspace/planning/UPGRADE-SOURCE.toml b/.agentic-workspace/planning/UPGRADE-SOURCE.toml deleted file mode 100644 index c00e06a..0000000 --- a/.agentic-workspace/planning/UPGRADE-SOURCE.toml +++ /dev/null @@ -1,5 +0,0 @@ -source_type = "git" -source_ref = "git+https://github.com/rickardvh/agentic-workspace@master#subdirectory=packages/planning" -source_label = "agentic-planning monorepo master" -recorded_at = "2026-06-27" -recommended_upgrade_after_days = 30 diff --git a/.agentic-workspace/planning/agent-manifest.json b/.agentic-workspace/planning/agent-manifest.json deleted file mode 100644 index c2fac77..0000000 --- a/.agentic-workspace/planning/agent-manifest.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "schema_version": "agent-manifest.v1", - "bootstrap": { - "task_source_of_truth": ".agentic-workspace/planning/state.toml", - "roadmap_source_of_truth": ".agentic-workspace/planning/state.toml", - "active_plan_dir": ".agentic-workspace/planning/execplans/", - "archived_plan_dir": ".agentic-workspace/planning/execplans/archive/", - "first_reads": [ - "AGENTS.md" - ], - "first_queries": [ - "Use `agentic-workspace start --task \"<task>\" --format json` before non-trivial work.", - "Use `agentic-workspace implement --changed <paths> --task \"<task>\" --format json` when changed paths are already known.", - "Use `summary`, `config`, `defaults`, `report`, or raw Planning files only when the router packet or explicit user request names that need." - ], - "tiny_safe_model": [ - "Start from the configured repo entrypoint (`AGENTS.md` by default), not from module internals or broad docs.", - "Ask the Startup Router first: `agentic-workspace start --task \"<task>\" --format json`, or `agentic-workspace implement --changed <paths> --task \"<task>\" --format json` when changed paths are known.", - "Open raw planning state, execplan prose, or deeper routing docs only when the router packet shows that the small model is no longer sufficient." - ], - "surface_roles": [ - "`AGENTS.md` is the canonical ordinary repo startup entrypoint.", - "`.agentic-workspace/planning/state.toml` is the package-owned active queue and candidate-lane state after the compact summary has shown raw detail is needed.", - "`.agentic-workspace/docs/routing-contract.md` is the authoritative routing home.", - "`llms.txt` is the agent entrypoint router.", - "`.agentic-workspace/planning/agent-manifest.json` is the machine-readable routing mirror; changing operational truth belongs in compact queryable surfaces." - ], - "boundary_triggered_escalation": [ - { - "boundary": "workspace", - "cue": "The question is startup order, lifecycle behavior, config, ownership, or combined workspace state.", - "load_next": [ - "agentic-workspace defaults --section startup --format json", - "agentic-workspace config --target ./repo --format json", - "agentic-workspace report --target ./repo --format json" - ], - "why": "Workspace-level surfaces own routing, lifecycle orchestration, and cross-module coordination." - }, - { - "boundary": "planning", - "cue": "The task needs active sequencing, blockers, proof expectations, promotion decisions, or cross-session continuation.", - "load_next": [ - "agentic-workspace summary --format json", - ".agentic-workspace/planning/state.toml", - ".agentic-workspace/planning/execplans/" - ], - "why": "Planning owns active execution state and near-term follow-through." - }, - { - "boundary": "memory", - "cue": "The work keeps rediscovering repo facts, prior decisions, failure modes, or domain context that should survive the current slice.", - "load_next": [ - ".agentic-workspace/memory/repo/", - ".agentic-workspace/memory/WORKFLOW.md" - ], - "why": "Memory owns durable anti-rediscovery knowledge instead of active execution state." - } - ], - "top_level_capabilities": [ - { - "module": "workspace", - "owns": "startup, lifecycle, routing, and combined workspace reporting", - "escalate_when": "the task crosses config, install/adopt, ownership, or cross-module coordination boundaries", - "capability_unlocked": "compact defaults/config/report guidance plus authoritative workspace contracts", - "first_surface": "agentic-workspace defaults --section startup --format json" - }, - { - "module": "planning", - "owns": "active execution state, sequencing, proof expectations, and promotion-ready follow-through", - "escalate_when": "the task needs milestones, blockers, queue updates, or explicit continuation semantics", - "capability_unlocked": "summary, active queue state, execplans, and planning validation surfaces", - "first_surface": "agentic-workspace summary --format json" - }, - { - "module": "memory", - "owns": "durable repo knowledge, routed decisions, failure modes, and anti-rediscovery context", - "escalate_when": "relevant repo understanding should persist beyond the current chat or implementation slice", - "capability_unlocked": "routed memory notes and memory workflow guidance", - "first_surface": ".agentic-workspace/memory/repo/" - } - ], - "conditional_reads": [ - "Read `agentic-workspace summary --format json` when the Startup Router or explicit task asks for planning recovery or ownership boundary review.", - "Read `.agentic-workspace/planning/state.toml` only when the compact summary shows active work that still needs raw queue detail.", - "Read the active feature plan in `.agentic-workspace/planning/execplans/` when the task belongs to one.", - "Read the roadmap data in `.agentic-workspace/planning/state.toml` only when promoting work, reprioritising, or reviewing candidate epics.", - "Read `.agentic-workspace/docs/routing-contract.md` when execution hits an edge case, ambiguity, or requires deep context.", - "Do not bulk-read all planning surfaces for ordinary execution work; start from the Startup Router and then the one relevant active plan if routed there.", - "Read only the repo docs explicitly referenced by that route.", - "When the question is active planning recovery rather than startup order, prefer the Startup Router before broader prose and follow its routed detail command." - ], - "small_task_mode": [ - "For very local changes, skip plans unless this manifest, the active plan, or the nearest descendant `AGENTS.md` says they are needed.", - "Keep direct tasks in `.agentic-workspace/planning/state.toml` only when one coherent pass can finish them and the row can stay compact: `ID`, `Status`, `Surface`, `Why now`, `Next action`, and `Done when`.", - "Use `agentic-workspace report --target ./repo --section execution_readiness --format json` when deciding whether the cheap direct path is still safe or whether stronger planning, delegation, or explicit escalation is warranted.", - "Do not create a checked-in plan just because a stronger model could write one; escalate only when the artifact should save more rediscovery, restart cost, or coordination risk than it costs to produce." - ], - "plan_threshold": [ - "Create or update a plan when work spans multiple milestones, will be handed across threads or models, or carries enough ambiguity that implementation should not start from chat context alone.", - "Promote a direct task once it picks up blocker handling, validation scope, rollback or migration detail, ownership reconciliation, enough context pressure that a smaller or less capable agent would need checked-in state, or enough narrative that the TODO row stops being self-sufficient.", - "If the task is no longer a good fit for the current execution capability, use compact report and handoff queries to decide whether stronger planning, delegation, explicit escalation, or quieter task shaping is the right next step.", - "If multi-agent or multi-model delegation is available, a more capable agent may write the compact plan first and hand implementation to a smaller one only when that is likely to save tokens without sacrificing quality.", - "Use `.agentic-workspace/docs/execution-flow-contract.md` for orchestrator-worker handoff rules." - ], - "completion_reminders": [ - "Do not leave completed task detail in `.agentic-workspace/planning/state.toml` once it no longer changes execution.", - "If the completed slice came from the active queue or roadmap state, clear the matched queue residue in the same pass.", - "When direct execution changes durable knowledge or leaves meaningful follow-up, record only that minimal residue in memory, canonical docs, the roadmap state in `.agentic-workspace/planning/state.toml`, or a promoted execplan." - ], - "generated_surfaces": [ - "External compatibility adapters may be generated by workspace tooling, but they are not planning bootstrap payload and must not become doctrine." - ], - "validation_flow": [ - "Run the narrowest validation that proves the change.", - "Use compact `agentic-workspace` query commands and the nearest subsystem `AGENTS.md` for task-specific commands.", - "Escalate to broader checks only when the change crosses subsystem boundaries or invalidates the narrower proof." - ], - "doc_precedence": [ - "Explicit user request.", - "Active feature plan in `.agentic-workspace/planning/execplans/`, when the task belongs to that plan.", - "`AGENTS.md`.", - "Repo docs explicitly referenced by the active route or plan." - ] - }, - "docs": { - "AGENTS.md": "bootstrap-contract", - "README.md": "human-overview", - ".agentic-workspace/planning/state.toml": "active-queue-and-roadmap", - ".agentic-workspace/planning/execplans/README.md": "execplan-convention", - ".agentic-workspace/planning/execplans/archive/README.md": "execplan-archive-convention", - ".agentic-workspace/docs/execution-flow-contract.md": "execution-flow-contract", - ".agentic-workspace/docs/routing-contract.md": "routing-contract", - ".agentic-workspace/docs/lifecycle-and-config-contract.md": "lifecycle-and-config-contract", - ".agentic-workspace/memory/repo/index.md": "memory-routing", - ".agentic-workspace/memory/WORKFLOW.md": "shared-memory-workflow-policy", - ".agentic-workspace/planning/agent-manifest.json": "agent-manifest-source" - }, - "skills": { - "memory_source_dir": ".agentic-workspace/memory/skills", - "planning_source_dir": ".agentic-workspace/planning/skills", - "cache_note": "Checked-in package skills are declarative guidance and may be absent unless optional skills were installed." - }, - "routing": { - "review_workflow": { - "when": "Handling a bounded review, audit, or review-shaped request that should capture findings without activating work automatically.", - "prefer_when": "the request asks for a review, audit, or compact finding capture over one repo area or change.", - "touches": [ - ".agentic-workspace/planning/reviews/", - ".agentic-workspace/planning/skills/REGISTRY.json" - ], - "commands": [ - "uv run agentic-workspace skills --target ./repo --task \"<task>\" --format json", - "make maintainer-surfaces" - ] - }, - "planning_surface_change": { - "when": "Editing planning-for-execution surfaces, plan templates, or planning-surface checks.", - "prefer_when": "the change affects planning state, execplans, generated agent docs, or the planning bootstrap itself.", - "touches": [ - "AGENTS.md", - ".agentic-workspace/planning/state.toml", - ".agentic-workspace/planning/upstream-task-intake.md", - ".agentic-workspace/planning/pre-ingestion-refinement.md", - ".agentic-workspace/docs/lifecycle-and-config-contract.md", - ".agentic-workspace/docs/routing-contract.md", - ".agentic-workspace/docs/execution-flow-contract.md", - ".agentic-workspace/planning/execplans/", - "scripts/check/check_maintainer_surfaces.py", - "scripts/check/check_planning_surfaces.py", - ".agentic-workspace/planning/agent-manifest.json", - "agentic-workspace summary --format json", - "agentic-workspace proof --changed <paths> --format json" - ], - "commands": [ - "make maintainer-surfaces", - "make render-agent-docs" - ] - } - }, - "invariants": [ - ".agentic-workspace/planning/state.toml owns active queue state and lightweight direct tasks.", - "Active execplans own milestone sequencing, blockers, validation scope, and completion detail for planned work.", - ".agentic-workspace/planning/state.toml also owns inactive long-horizon candidate lanes and promotion signals.", - "Package-owned planning state belongs under `.agentic-workspace/planning/` and should be summarized before root queue files are read.", - "Checked-in memory, when installed, owns durable routed knowledge rather than active planning state.", - "Planning should remain useful without memory being installed.", - "Direct execution is a valid success mode for small local work.", - "Do not bulk-read all planning surfaces for ordinary execution work." - ] -} diff --git a/.agentic-workspace/planning/decompositions/README.md b/.agentic-workspace/planning/decompositions/README.md deleted file mode 100644 index cf1ea19..0000000 --- a/.agentic-workspace/planning/decompositions/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Planning Decompositions - -Use decomposition records for epic-shaped requests before implementation lanes exist. - -An epic is a work-shape classification, not a freehand artifact type. A `planning-decomposition/v1` record captures the larger intended outcome, parent acceptance target, candidate lanes, dependency and parallelization assumptions, and high-level proof expectations. Ready implementation slices move into `.agentic-workspace/planning/execplans/*.plan.json`; this directory should not carry lane execution journals. - -Use `parent_acceptance` to keep the user's full original intent separate from slice mechanics. Each lane should state how it advances the parent, what parent intent remains, and whether its proof is slice-only, parent-closing, or requires human confirmation. - -Create records by copying `TEMPLATE.decomposition.json` when a request needs product shaping before a lane can be promoted. After editing, run `agentic-workspace summary --format json` or the planning surface checker. diff --git a/.agentic-workspace/planning/decompositions/TEMPLATE.decomposition.json b/.agentic-workspace/planning/decompositions/TEMPLATE.decomposition.json deleted file mode 100644 index 854d6b2..0000000 --- a/.agentic-workspace/planning/decompositions/TEMPLATE.decomposition.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "kind": "planning-decomposition/v1", - "title": "Epic-shaped request decomposition", - "status": "shaping", - "larger_intended_outcome": "Describe the larger outcome before choosing implementation lanes.", - "parent_acceptance": { - "original_intent": "State the full user/request parent intent before decomposition.", - "acceptance_target": "State what must be true before the parent can be called complete.", - "parent_proof_required": "State the evidence needed for parent closure, not only slice proof.", - "residual_intent_rule": "Each promoted lane must name what parent intent remains unsatisfied.", - "clarification_needed_when": "Ask or keep the parent open when clear broad intent would otherwise be narrowed." - }, - "non_goals": [ - "Do not put milestone execution detail here; promote ready slices into execplans." - ], - "candidate_lanes": [ - { - "id": "lane-1", - "title": "First bounded lane", - "readiness": "needs-shaping", - "outcome": "The bounded result this lane would deliver.", - "owner_surface": "", - "proof": "High-level proof expectation; exact commands belong in the execplan.", - "slice_contribution_to_parent": "How this lane advances the parent acceptance target.", - "residual_parent_intent": "What parent intent remains after this lane if it lands.", - "parent_proof_boundary": "slice-only|parent-closure|manual-confirmation-needed", - "human_confirmation_needed": [], - "depends_on": [], - "parallel_with": [] - } - ], - "dependency_assumptions": [], - "parallelization_assumptions": [], - "proof_expectations": [ - "Each promoted lane records narrow validation in its execplan." - ], - "promotion_rule": "Promote only lanes with clear outcome, owner surface, proof expectation, and bounded write scope.", - "references": [], - "notes": "" -} diff --git a/.agentic-workspace/planning/execplans/README.md b/.agentic-workspace/planning/execplans/README.md deleted file mode 100644 index cffa81f..0000000 --- a/.agentic-workspace/planning/execplans/README.md +++ /dev/null @@ -1,317 +0,0 @@ -# Execution Plans - -Checked-in execution plans for multi-milestone or multi-thread work live in this directory. - -Use `agentic-workspace summary --format json` first when the question is active planning state. -Use raw `TODO.md` and execplan prose after that only when the compact summary is insufficient or when you are maintaining the human-readable plan directly. -Use raw `.agentic-workspace/planning/state.toml` when you need direct maintenance access to canonical machine-readable planning state. -Use `.agentic-workspace/planning/execplans/*.plan.json` as the canonical execplan state when a machine-first plan sidecar is present; the adjacent `.md` file is the derived human view. -Use `.agentic-workspace/docs/candidate-lanes-contract.md` for the native `roadmap` lane shape in `.agentic-workspace/planning/state.toml` when grouped deferred work needs more structure than a flat candidate bullet. -Use `docs/planning-routing-contract.md` when deciding whether newly discovered work belongs in `roadmap`, `todo.active_items`, `.agentic-workspace/planning/execplans/`, or `.agentic-workspace/planning/reviews/`. -Use `agentic-workspace doctor --target ./repo --format json` for advisory shape and drift warnings across `todo.active_items`, active execplans, and `roadmap`. -Use `promote-to-plan` and `archive-plan` as thin file-native helpers around the same checked-in contract. `archive-plan` is the compatibility command name for closeout: by default it distills reusable information and removes the completed execplan from Planning. Retaining an archive is legacy/audit-only. -Use `docs/environment-recovery-contract.md` for task-local recovery and environment assumptions. -Use `.agentic-workspace/docs/system-intent-contract.md` for the durable larger-intent and honest-reinterpretation rule. -Use `docs/intent-contract.md` and `docs/resumable-execution-contract.md` for the compact planning summary contracts. -Use `docs/execution-summary-contract.md` for the compact outcome shape that completed slices should leave behind before archive. -Use `archive-plan --apply-cleanup` only when you want the helper to also remove completed active-item references and compress matching roadmap residue for the same archived thread. - -This planning system is for execution. It is not intended to become a generic tracker, backlog database, or Jira replacement. - -## Layout - -- Keep active plans at the top level of `.agentic-workspace/planning/execplans/`. -- Keep only active plans plus `README.md`, `TEMPLATE.md`, and `TEMPLATE.plan.json` at the top level. -- Close completed plans with `agentic-planning archive-plan <plan> --target . --format json`; default closeout removes the completed execplan after distillation. -- Mark the active milestone `Status` as `completed` before archiving a finished plan. -- Before archive, fill `## Proof Report`, `## Intent Satisfaction`, `## Closure Check`, and `## Durable Residue` so proof, intent closure, and future-relevant residue routing are explicit. -- Keep exactly one active milestone and one immediate next action by default. -- Prefer feature-scoped plan files over growing broad shared hot files. -- Skip `archive/` during normal startup unless the task explicitly needs historical plan context. -- Do not treat `todo.active_items`, `roadmap`, or active execplans as long-form completion logs; once a plan is complete, close it and remove the completed-work detail from forward-looking planning surfaces. -- When a completed slice came from `todo.active_items` or `roadmap`, remove or archive the matched queue residue in the same pass rather than leaving stale completed candidates behind. -- Do not confuse slice completion with lane completion; a slice can ship while the larger intent remains open, and archive should wait until the lane-level proof is explicit. -- Do not add sections such as `Added In This Pass`, `Completed Work`, or similar retrospective logs to `todo.active_items`; completed detail belongs in archived execplans, workflow-change notes, or git history. -- Treat active plan state as branch-local and low half-life: archive, replace, or prune it rather than mutating it forever. - -Use a plan here when: - -- work spans more than one milestone -- work will be handed between threads or models -- implementation should not start from chat context alone -- architectural drift or validation scope needs explicit tracking -- the implementing agent needs checked-in context because its own planning tools, context window, or local scratchpad are not sufficient - -Keep small direct work in `todo.active_items` when one coherent pass can finish it safely. -A direct task should stay compact and normally use only `ID`, `Status`, `Surface`, `Why now`, `Next action`, and `Done when`. -`todo.active_items` may also carry the smallest near-term same-thread queue that should follow the active chunk soon; keep that queue concrete and short enough that it stays activation, not backlog. -Promote that task into `.agentic-workspace/planning/execplans/` once it picks up milestone sequencing, blocker management, validation scope, rollback or migration handling, or enough ambiguity that the next contributor would need more than the TODO row to continue. -Direct execution is a success mode, not a planning failure. -Use `.agentic-workspace/docs/capability-aware-execution.md` when deciding whether the task still fits cheap direct execution, should move to stronger planning first, is suitable for bounded autopilot, should be silently reshaped into a cheaper slice, or should stop and escalate. -Use `docs/environment-recovery-contract.md` when interruption handling, environment drift, or retry state means the plan must carry a compact recovery path. -Use `.agentic-workspace/docs/context-budget-contract.md` when deciding what must stay live now, what can be recovered later, what must be externalized before a context shift, and what cheap resumability note should survive a pause or handoff. -Silent shaping may improve means, decomposition, and validation scope, but it must not silently widen the requested outcome, owned surface, or time horizon; broader solutions belong in an explicit promotion or escalation decision. - -For ordinary inspection, keep the hierarchy explicit: - -1. `agentic-workspace summary --format json` -2. one relevant selector or view inside that payload -3. raw `.agentic-workspace/planning/state.toml` or execplan prose only when the compact state is insufficient - -When planning has one active TODO item and one active execplan, the compact hierarchy question should be answerable from the summary/report surfaces alone: active chunk, parent lane, next likely chunk, continuation owner, and proof state. - -When memory is installed, prefer borrowing durable context from the smallest relevant memory note or canonical doc instead of restating the same subsystem explanation inside each execplan. -Repeated background prose in plans is a missing-synergy signal: tighten routing, promote the durable fact into memory or canonical docs, or decompose the work so the plan can stay local. - -Do not create a plan just because a stronger agent could write one. Use a checked-in plan only when the artifact is expected to reduce rediscovery, restart cost, or handoff risk more than it costs to produce. - -Capability-aware delegation is allowed but optional. If the environment supports it, a more capable agent or model may write a compact execplan and then hand implementation to a smaller or less capable agent when that is likely to save tokens without sacrificing quality. Do not assume subagents exist; the same contract must still work for one agent executing end-to-end. Prefer silent shaping and better planning over repeated prompts to switch executors manually. - -Native runtime artifacts such as `implementation_plan.md`, `task.md`, or `walkthrough.md` may exist when an agent UI provides them, but they must not become a second durable source of truth. Before review, handoff, or session end, mirror any durable execution state back into `.agentic-workspace/planning/state.toml` and the active execplan so the next agent can continue from repo-owned surfaces alone. - -Each active plan should stay compact and include: - -- goal -- non-goals -- intent continuity -- required continuation -- intent interpretation when the slice is meaningfully shaped from a literal request into a bounded concrete "what" -- execution bounds and stop conditions when the slice may benefit from bounded delegated execution -- context budget -- delegated judgment -- adaptive assurance only when the slice needs refs, gates, blockers, proof profiles, or stricter closeout -- active milestone -- immediate next action -- touched paths -- invariants -- contract decisions to freeze when the slice is product-shaping -- open questions to close when unresolved contract decisions still block implementation -- validation commands -- required tools when the task depends on a capability that may be absent in some runtimes -- completion criteria -- execution run residue when delegated work is attempted -- finished-run review when delegated work returns for planner/reviewer inspection -- execution summary -- closure check -- drift log - -Adaptive assurance is optional and generic. Use it when a slice needs host-owned authority refs, review gates, risk/invariant routing, proof concerns, test-data policy, do-not-implement-yet blockers, layer scaffolding, architecture-decision promotion, or threat/failure-mode aids. Keep the package out of domain truth: fields such as `traceability_refs`, `control_gates`, `proof_profiles`, `risk_registry_refs`, `invariant_refs`, `test_data_policy`, and `threat_failure_aids` should point at project-owned docs, schemas, registries, checks, or review owners instead of copying regulated or domain-specific content into the plan. - -Readiness fields belong under `## Active Milestone` for active plans: - -- `Ready`: one of `ready`, `blocked`, `conditional` (or `true`/`false`) -- `Blocked`: short blocker detail (`none` when not blocked) -- `optional_deps`: optional dependency hints (`none` when unused) - -Intent continuity belongs under `## Intent Continuity` for active plans: - -- `Larger intended outcome`: the parent user or product intent this slice serves -- `This slice completes the larger intended outcome`: `yes` or `no` -- `Continuation surface`: `none` only when the larger intended outcome is complete; otherwise the checked-in surface that now owns continuation - -Use this section to keep a safe first slice from masquerading as the full requested outcome. -If a completed slice does not finish the larger intended outcome, archive should only happen after the continuation surface is explicit. - -Required follow-on routing belongs under `## Required Continuation` for active plans: - -- `Required follow-on for the larger intended outcome`: `yes` or `no` -- `Owner surface`: `none` only when no required continuation remains -- `Activation trigger`: `none` only when no required continuation remains - -Use this section to distinguish required continuation from optional nice-to-have follow-up. -If a completed slice leaves the larger intended outcome unfinished, record the required next owner and activation trigger here before archiving. -Do not rely on drift-log prose, completion-note prose, or chat residue to carry mandatory follow-through. - -Iterative carry-forward belongs under `## Iterative Follow-Through` when a bounded slice is expected to stop before the broader goal is complete: - -- `What this slice enabled` -- `Intentionally deferred` -- `Discovered implications` -- `Proof achieved now` -- `Validation still needed` -- `Next likely slice` - -Use this section to preserve the minimal residue a later contributor should not have to reconstruct after the slice stops intentionally. -Keep it distinct from `Required Continuation`: required continuation answers who owns mandatory follow-on and when it activates; iterative follow-through answers what this slice changed about that larger line of work. -Keep it distinct from `Execution Summary`: follow-through carries forward deferred work and discovered implications, while execution summary records the bounded slice outcome once the slice stops. - -Context budget belongs under `## Context Budget` for active plans: - -- `Live working set` -- `Recoverable later` -- `Externalize before shift` -- `Pre-work memory pull` -- `Tiny resumability note` -- `Context-shift triggers` - -Use this section to keep the smallest necessary live bundle explicit without turning ordinary work into bookkeeping. -The section should stay smaller than the surrounding execplan. -It exists so an agent can deliberately shed context after externalizing the residue that later proof, review, or continuation would otherwise have to reconstruct. -Use `Pre-work memory pull` for the one compact prompt that asks what durable understanding should be recovered before execution and which area it concerns. Planning should answer that question from its own checked-in surfaces first and use Memory only when the repo has it installed. - -Delegated judgment belongs under `## Delegated Judgment` for active plans that should preserve broad direction across sessions: - -- `Requested outcome` -- `Hard constraints` -- `Agent may decide locally` -- `Escalate when` - -Keep this section compact. -It exists to preserve the intended end state, the allowed local latitude, and the escalation boundary when a safe first slice might otherwise drift into a substitute for the larger request. -Use `none` only when the slice is so local that delegated-judgment framing would add no value beyond the surrounding plan. -`agentic-workspace summary --format json` exposes a typed `planning-summary/v1` payload. Inside that payload, `planning_record` is the canonical active planning record when planning has one active TODO item and one active execplan. `active_contract` is the narrower intent projection over that record. -`intent_validation_contract` is the compact inspection view for dangling larger intent, lower-trust closeout, and optional external evidence reconciliation when no active execplan is present. -Treat `planning_record` as canonical active state when it is available; raw `.agentic-workspace/planning/state.toml` and execplan prose remain the thin human maintenance layer and semantic fallback. -When an execplan also has a `.plan.json` sidecar, that sidecar is the canonical plan record and the `.md` file becomes a rendered compatibility view. - -Intent interpretation belongs under `## Intent Interpretation` when the slice should preserve how it moved from the literal request to the bounded intended outcome: - -- `Literal request` -- `Inferred intended outcome` -- `Chosen concrete what` -- `Interpretation distance` -- `Review guidance` - -Keep this section compact and review-oriented. It should make the interpretive move inspectable enough to catch overreach or drift without turning the plan into a reasoning trace. - -Execution bounds belong under `## Execution Bounds` when a bounded executor should have explicit local rails: - -- `Allowed paths` -- `Max changed files` -- `Required validation commands` -- `Ask-before-refactor threshold` -- `Stop before touching` - -Keep these bounds close to the active plan so the worker does not have to reconstruct them from chat. - -Stop conditions belong under `## Stop Conditions` when a bounded executor should know when to stop cheaply: - -- `Stop when` -- `Escalate when boundary reached` -- `Escalate on scope drift` -- `Escalate on proof failure` - -These conditions should make "stop and escalate" cheaper than silent drift. - -Closure checks belong under `## Closure Check` for completed or nearly-complete plans: - -- `Slice status` -- `Larger-intent status` -- `Closure decision` -- `Why this decision is honest` -- `Evidence carried forward` -- `Reopen trigger` - -Prefer `agentic-planning archive-plan <plan> --prepare-closeout` before hand-editing closeout fields; it writes a valid closeout patch from the current record. -When hand-editing, use the same terminal values archive validation accepts: - -- `Slice status`: one of `complete`, `completed`, or `bounded slice complete` -- `Larger-intent status`: use `closed`, `complete`, or `completed` when the larger intent is satisfied; use `open`, `partial`, or `unfinished` when continuation remains -- `Closure decision`: one of `archive-and-close` or `archive-but-keep-lane-open` -- `Was original intent fully satisfied?`: `yes` or `true` for `archive-and-close`; `no` or `false` when keeping the lane open - -Use this section to distinguish bounded slice success from larger-intent closure. -`archive-and-close` is only honest when the larger intent is actually satisfied. -`archive-but-keep-lane-open` is the honest path when the slice is complete but required continuation remains elsewhere. -Do not force later contributors to infer this decision from drift prose, issue bodies, or chat residue. - -Durable residue routing belongs under `## Durable Residue` before archive: - -- `Status`: one of `none`, `evidence_only`, `memory`, `docs`, `contract`, `check`, or `planning` -- `Learned constraint` -- `Motivation worth preserving` -- `Canonical owner now` -- `Promotion trigger` -- `Retention after promotion`: one of `retain`, `shrink`, `stub`, or `delete` - -Use `none` when the slice created no future-relevant learning. Use `evidence_only` only when retained archive/audit evidence is intentionally the right owner because the residue is only proof/history. If the residue should affect future work, route it to Memory, docs, contracts, checks, or Planning; do not leave that motivation owned only by a retained archive. - -## Meaning Boundary - -Use one compact rule when deciding where a planning meaning belongs: - -- machine-readable state keeps the restart-critical meanings that must be recovered cheaply and unambiguously, including active work, next action, follow-on owner, proof state, and escalation boundaries -- compact prose keeps stable route guidance and framing when a queryable field would not reduce recovery cost enough to justify a second owner -- raw execplan detail keeps slice-specific narrative, implementation notes, drift-log residue, and other maintenance detail that should not be the default recovery path - -Example: "What should I do next?" belongs in `resumable_contract`; the route that gets you there belongs in compact prose; the line-by-line change log belongs in raw execplan detail. - -Current-state restart belongs in the compact `resumable_contract` projection: - -- `current_next_action` -- `active_milestone` -- `completion_criteria` -- `proof_expectations` -- `escalate_when` -- `blockers` -- `minimal_refs` - -That object should stay smaller than the full execplan and answer "how do I continue safely right now?" without broad rereading. -Use it before opening raw plan prose when the task is ordinary restart or handoff, not deep semantic maintenance. - -Context-budget and cheap-resume answers belong in the compact `context_budget_contract` projection: - -- `live_working_set` -- `recoverable_later` -- `externalize_before_shift` -- `pre_work_memory_pull` -- `tiny_resumability_note` -- `context_shift_triggers` - -That object should stay compact enough to reduce rereads and mixed-agent restart cost rather than creating a second planning narrative. -Use it when the question is what can be dropped now, what must be written down first, or what should trigger reloading a different bundle later. - -Delegated-work inspection answers belong in three compact projections over the same active plan state: - -- `intent_interpretation_contract` -- `execution_run_contract` -- `finished_run_review_contract` - -Use them when the question is how the slice interpreted the request, what happened in one bounded delegated run, or how returned work should be judged for scope/proof/intent fit. -Keep those projections thin and derived; they are not a second planning authority. - -For larger-picture restart and queue questions, `hierarchy_contract` may also be present as a thin projection over the same active planning state. Use it for parent-lane, next-chunk, continuation-owner, and proof-state answers; do not treat it as a second planning authority. -When queued TODO items exist, the same hierarchy view may also expose the near-term queue so the next same-thread chunk does not survive only in prose or chat. - -Tool verification belongs in the compact planning contract when the task needs a capability that may not be present: - -- `required_tools` -- advisory rule: stop or escalate when a required tool is unavailable instead of attempting an impossible substitute - -Keep the first slice advisory. -The goal is to save tokens by preventing doomed attempts, not to turn execplans into a full runtime capability detector. - -Execution summaries belong under `## Execution Summary` for completed or nearly-complete plans: - -- `Outcome delivered` -- `Validation confirmed` -- `Follow-on routed to` -- `Post-work posterity capture` -- `Resume from` - -Keep this section compact and decision-shaped. -It exists so later contributors do not have to reconstruct what the slice achieved, how it was proved, and where follow-through now lives. -Do not turn it into a second drift log, a notebook, or a memory note. -Use `Post-work posterity capture` to answer what should survive and where it belongs after the slice finishes. Memory may be one destination when installed, but planning closure must still work without it. -If the slice ended with intentionally deferred work or newly discovered implications, leave those in `Iterative Follow-Through` instead of stretching `Execution Summary` into a backlog. - -Closure discipline should stay cheap and explicit: - -- when a slice renames, moves, retires, or refactors a named surface, include a stale-reference sweep in `Validation Commands` -- prefer a narrow search or checker over broad rereads -- if required follow-on remains, route it into checked-in planning instead of leaving it implicit in chat or drift prose - -Keep the drift log decision-shaped and brief. Do not turn an active or completed execplan into a changelog when the same detail is already recoverable from git, issue evidence, Memory, docs, or intentionally retained audit archives. -Execplans own milestone sequencing, blockers, validation scope, and completion detail for planned work. `todo.active_items` should only expose that the work is active and point here. -Environment-sensitive work should express recovery in the existing plan fields rather than inventing ad hoc restart sections or long troubleshooting prose. -Use stable headings, explicit status markers, and compact bullets so active plans remain merge-friendly under concurrent edits. - -Keep durable technical facts and stable subsystem guidance in canonical docs or checked-in memory, not inside active execplans. -When a completed plan leaves behind durable residue, promote it into memory or canonical docs instead of treating the archived plan as its long-term home. - -Prefer refining the existing contract over inventing a second schema. If a proposed improvement makes plans harder to use than the work they are guiding, it is likely the wrong change. - -Default to one active milestone at a time. -Prefer updating an existing active plan over creating overlapping plan files for the same feature. -Close and remove completed plans once they no longer affect future execution; retain archives only when audit or compatibility needs are explicit. - diff --git a/.agentic-workspace/planning/execplans/TEMPLATE.plan.json b/.agentic-workspace/planning/execplans/TEMPLATE.plan.json deleted file mode 100644 index 5495278..0000000 --- a/.agentic-workspace/planning/execplans/TEMPLATE.plan.json +++ /dev/null @@ -1,336 +0,0 @@ -{ - "kind": "planning-execplan/v1", - "title": "Plan Title", - "execplan_profile": { - "schema": "execplan-profile/v1", - "task_shape": "bounded", - "required_core": [ - "kind", - "title", - "canonical_core", - "goal", - "non_goals", - "active_milestone", - "validation_commands", - "completion_criteria" - ], - "optional_sections": [ - "intent_continuity", - "intent_interpretation", - "execution_bounds", - "stop_conditions", - "context_budget", - "delegated_judgment", - "post_decomposition_delegation" - ], - "projection_rule": "canonical_core is authoritative for intent, scope, next action, proof, continuation, and closeout; legacy fields remain compatibility projections." - }, - "canonical_core": { - "requested_outcome": "", - "hard_constraints": "", - "agent_may_decide": "", - "escalate_when": "", - "next_action": "", - "proof_expectations": [], - "touched_scope": [], - "completion_criteria": [], - "continuation_owner": "", - "closeout_decision": "" - }, - "goal": [ - "" - ], - "non_goals": [ - "" - ], - "machine_readable_contract": { - "intent": { - "outcome": "", - "constraints": "", - "latitude": "", - "escalation": "" - }, - "execution": { - "milestone": "", - "status": "", - "next_step": "", - "proof": "" - }, - "scope": { - "touched": [], - "invariants": [] - } - }, - "intent_continuity": { - "larger intended outcome": "", - "this slice completes the larger intended outcome": "", - "continuation surface": "", - "parent lane": "" - }, - "required_continuation": { - "required follow-on for the larger intended outcome": "", - "owner surface": "", - "activation trigger": "" - }, - "iterative_follow_through": { - "what this slice enabled": "", - "intentionally deferred": "", - "discovered implications": "", - "proof achieved now": "", - "validation still needed": "", - "next likely slice": "" - }, - "intent_interpretation": { - "literal request": "", - "inferred intended outcome": "", - "chosen concrete what": "", - "interpretation distance": "", - "review guidance": "" - }, - "execution_bounds": { - "allowed paths": "", - "max changed files": "", - "required validation commands": "", - "ask-before-refactor threshold": "", - "stop before touching": "" - }, - "stop_conditions": { - "stop when": "", - "escalate when boundary reached": "", - "escalate on scope drift": "", - "escalate on proof failure": "" - }, - "context_budget": { - "live working set": "", - "recoverable later": "", - "externalize before shift": "", - "pre-work config pull": "", - "pre-work memory pull": "", - "tiny resumability note": "", - "context-shift triggers": "" - }, - "delegated_judgment": { - "requested outcome": "", - "hard constraints": "", - "agent may decide locally": "", - "escalate when": "" - }, - "post_decomposition_delegation": { - "status": "pending", - "decision rule": "After the slice is bounded, choose whether direct work, read-only exploration, implementation handoff, validation handoff, or stronger review improves quality or saves tokens safely.", - "route candidates": "keep-local|delegate-exploration|delegate-implementation|delegate-validation|escalate-review|no-safe-route", - "required evidence": "slice id, route, reason, quality risk, token-saving class, read-first refs, write scope, proof burden, stop conditions, and return contract" - }, - "adaptive_assurance": { - "level": "low", - "reason": "", - "agent_may_escalate": true, - "agent_may_deescalate": false, - "strict_closeout": false, - "required_refs": [], - "proof_profiles": [], - "required_gates": [] - }, - "traceability_refs": { - "requirement_refs": [], - "regulation_refs": [], - "compliance_refs": [], - "domain_model_refs": [], - "risk_refs": [], - "security_refs": [], - "audit_refs": [], - "acceptance_refs": [], - "decision_refs": [] - }, - "control_gates": [], - "implementation_blockers": [], - "risk_registry_refs": [], - "invariant_refs": [], - "test_data_policy": { - "classification": "", - "forbidden": [], - "fixture_owner": "", - "proof_required": [], - "refs": [] - }, - "layer_scaffold": { - "type": "", - "required_refs": [], - "common_risks": [], - "suggested_proof_profiles": [], - "suggested_gates": [], - "non_goals": [], - "durable_residue_prompts": [] - }, - "architecture_decision_promotion": { - "status": "none", - "target": "", - "decision_refs": [], - "promotion_needed": false, - "notes": "" - }, - "threat_failure_aids": [], - "references": [ - { - "kind": "", - "target": "", - "label": "", - "role": "", - "locator": "" - } - ], - "active_milestone": { - "id": "", - "status": "", - "scope": "", - "ready": "", - "blocked": "", - "optional_deps": "" - }, - "immediate_next_action": [ - "" - ], - "blockers": [ - "None." - ], - "touched_paths": [ - "" - ], - "invariants": [ - "" - ], - "contract_decisions_to_freeze": [ - "" - ], - "open_questions_to_close": [ - "" - ], - "validation_commands": [ - "" - ], - "required_tools": [ - "None." - ], - "completion_criteria": [ - "" - ], - "execution_run": { - "run status": "", - "executor": "", - "handoff source": "", - "what happened": "", - "scope touched": "", - "changed surfaces": "", - "validations run": "", - "result for continuation": "", - "next step": "" - }, - "finished_run_review": { - "review status": "", - "scope respected": "", - "proof status": "", - "intent served": "", - "config compliance": "", - "misinterpretation risk": "", - "follow-on decision": "" - }, - "delegation_outcome_feedback": { - "route chosen": "", - "route skipped reason": "", - "expected savings": "", - "actual friction": "", - "proof result": "", - "quality concern": "", - "decomposition adjustment": "" - }, - "proof_report": { - "validation proof": "", - "proof achieved now": "", - "evidence for \"proof achieved\" state": "" - }, - "intent_satisfaction": { - "original intent": "", - "was original intent fully satisfied?": "", - "evidence of intent satisfaction": "", - "unsolved intent passed to": "" - }, - "system_intent_alignment": { - "relevant system intent": "", - "slice shaping bias": "", - "broader-lane validation question": "", - "intent evidence source": ".agentic-workspace/docs/system-intent-contract.md" - }, - "closure_check": { - "slice status": "bounded slice complete", - "larger-intent status": "closed", - "closure decision": "archive-and-close", - "accepted values": "Accepted values: slice status = complete|completed|bounded slice complete; larger-intent status = closed|complete|completed for archive-and-close or open|partial|unfinished for archive-but-keep-lane-open; closure decision = archive-and-close|archive-but-keep-lane-open. Prefer `agentic-planning archive-plan <plan> --prepare-closeout` before hand-editing closeout fields.", - "why this decision is honest": "", - "evidence carried forward": "", - "reopen trigger": "" - }, - "generated_closeout": { - "status": "not-generated", - "source": "archive-plan --prepare-closeout", - "authority": "derived adapter; structured execplan fields remain authoritative", - "text": "" - }, - "memory_learning_capture": { - "status": "pending", - "memory consult recommended?": "pending", - "memory notes read": "", - "future agents should not rediscover": "pending", - "decision": "pending", - "target": "", - "reason": "Choose one: none, update_existing_memory_note, create_memory_note, promote_to_docs_contracts_checks_code, route_to_planning, evidence_only." - }, - "durable_residue": { - "status": "none", - "learned constraint": "", - "motivation worth preserving": "", - "canonical owner now": "none", - "promotion trigger": "none", - "retention after promotion": "retain" - }, - "task_intent_promotion": { - "decision": "pending", - "accepted values": "do-not-promote|memory|subsystem-intent|system-intent|refine-existing-intent|supersede-existing-intent", - "evidence source": "", - "target scope": "", - "proposed durable intent": "", - "confidence": "low", - "needs review": true, - "owner surface": "" - }, - "execution_summary": { - "outcome delivered": "", - "validation confirmed": "", - "follow-on routed to": "", - "post-work posterity capture": "", - "knowledge promoted (Memory/Docs/Config)": "", - "resume from": "" - }, - "improvement_signal_review": { - "status": "not_checked", - "accepted statuses": "not_checked|signals_routed|signals_fixed|signals_dismissed|no_signal_found", - "guidance": "At closeout, report AW smoothness/helpfulness gaps, better-way signals, unused-feature reflections, and places AW could help more. Route each concrete signal to exactly one owner class unless explicitly split, or mark no_signal_found after checking.", - "source": "operating_posture", - "owner classes": [ - "issue", - "Memory", - "Planning", - "docs/checks/contracts", - "direct fix", - "dismissed with reason" - ], - "ordinary output cap": 3, - "signals found": [], - "signals fixed": [], - "signals routed": [], - "signals dismissed": [], - "next owner": "" - }, - "drift_log": [ - "2026-01-01: Initial plan created." - ] -} diff --git a/.agentic-workspace/planning/execplans/archive/README.md b/.agentic-workspace/planning/execplans/archive/README.md deleted file mode 100644 index 1114e2a..0000000 --- a/.agentic-workspace/planning/execplans/archive/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Archived Execution Plans - -Move completed plans here once they no longer affect future execution. - -- Keep only historical plan files in this directory. -- When a plan used a machine-first `.plan.json` sidecar while active, archive that sidecar alongside the rendered `.md` residue. -- Archived files should be compact inactive-plan residue, not full forever-growing copies of the active execplan. -- Preserve only what later trust, closure, continuation, or cheap resume still needs; use git history for superseded active-step detail. -- Do not read this directory during normal startup unless the task explicitly needs historical planning context. -- Prefer pruning or compressing duplicated completion detail from `TODO.md` and `ROADMAP.md` once a plan is archived. diff --git a/.agentic-workspace/planning/lanes/README.md b/.agentic-workspace/planning/lanes/README.md deleted file mode 100644 index 5bd0f34..0000000 --- a/.agentic-workspace/planning/lanes/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Planning Lane Records - -Lane records are the middle Planning artifact between an epic decomposition and concrete slice execplans. - -- Decompositions own high-level intent, soft requirements, and candidate lanes. -- Lane records own the concrete lane outcome, strategy, subsystem boundaries, slice sequence, proof aggregation, residual lane work, and contribution back to the parent epic. -- Execplans own one concrete implementation slice, including touched paths, validation commands, execution residue, and slice closeout. - -Do not turn execplans into lane journals. A slice may reference a lane, and the lane may list the slice execplan, but lane strategy and lane-to-epic closeout evidence belong in the lane record. diff --git a/.agentic-workspace/planning/lanes/TEMPLATE.lane.json b/.agentic-workspace/planning/lanes/TEMPLATE.lane.json deleted file mode 100644 index fe1268d..0000000 --- a/.agentic-workspace/planning/lanes/TEMPLATE.lane.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "kind": "planning-lane/v1", - "id": "lane-1", - "title": "First implementation lane", - "status": "shaping", - "parent_decomposition_ref": ".agentic-workspace/planning/decompositions/<parent>.decomposition.json", - "lane_outcome": "State the concrete lane-level outcome that advances the parent epic.", - "purpose_for_parent": "State why this lane exists in the parent decomposition.", - "subsystems": [], - "technical_strategy": "State the implementation strategy across slices without putting slice tasks here.", - "technology_choices": [], - "slice_sequence": [ - { - "id": "slice-1", - "title": "First concrete slice", - "status": "planned", - "execplan_ref": "", - "depends_on": [], - "purpose_for_lane": "State how this slice advances the lane.", - "proof": "State the slice proof expectation; exact commands belong in the execplan.", - "residual_after_slice": "State what lane work remains after this slice." - } - ], - "current_slice": "", - "acceptance_boundary": "State what must be true before this lane can be called complete.", - "proof_strategy": "State how slice proofs aggregate into lane proof.", - "proof_aggregation": { - "status": "not-started", - "evidence": [], - "known_gaps": [] - }, - "residual_lane_work": "State remaining lane work or 'none' after closeout.", - "lane_to_epic_contribution": "State how this lane advances or closes the parent epic.", - "parent_close_permission": "not-evaluated", - "closeout_state": { - "status": "open", - "summary": "", - "residual_work": "", - "next_owner": "" - }, - "references": [], - "notes": "" -} diff --git a/.agentic-workspace/planning/schemas/planning-closeout-evidence.schema.json b/.agentic-workspace/planning/schemas/planning-closeout-evidence.schema.json deleted file mode 100644 index 3a07538..0000000 --- a/.agentic-workspace/planning/schemas/planning-closeout-evidence.schema.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://agentic-workspace.local/schemas/planning-closeout-evidence.schema.json", - "title": "Planning Closeout Evidence", - "type": "object", - "required": ["kind", "title", "plan_id", "created_at", "source_plan", "intended_archive", "retention"], - "additionalProperties": false, - "properties": { - "kind": { - "const": "planning-closeout-evidence/v1" - }, - "title": { - "type": "string", - "minLength": 1 - }, - "plan_id": { - "type": "string", - "minLength": 1 - }, - "created_at": { - "type": "string", - "minLength": 1 - }, - "source_plan": { - "type": "string", - "minLength": 1 - }, - "intended_archive": { - "type": "string", - "minLength": 1 - }, - "retention": { - "$ref": "#/$defs/string_map" - }, - "active_milestone": { - "$ref": "#/$defs/string_map" - }, - "delegated_judgment": { - "$ref": "#/$defs/string_map" - }, - "execution_run": { - "$ref": "#/$defs/string_map" - }, - "finished_run_review": { - "$ref": "#/$defs/string_map" - }, - "proof_report": { - "$ref": "#/$defs/string_map" - }, - "intent_satisfaction": { - "$ref": "#/$defs/string_map" - }, - "closure_check": { - "$ref": "#/$defs/string_map" - }, - "durable_residue": { - "$ref": "#/$defs/string_map" - }, - "execution_summary": { - "$ref": "#/$defs/string_map" - }, - "closeout_distillation": { - "type": "object" - } - }, - "$defs": { - "string_map": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } -} diff --git a/.agentic-workspace/planning/schemas/planning-decomposition.schema.json b/.agentic-workspace/planning/schemas/planning-decomposition.schema.json deleted file mode 100644 index b739765..0000000 --- a/.agentic-workspace/planning/schemas/planning-decomposition.schema.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "agentic-planning/planning-decomposition.schema.json", - "title": "Planning Decomposition Record", - "type": "object", - "required": [ - "kind", - "title", - "status", - "larger_intended_outcome", - "non_goals", - "candidate_lanes", - "proof_expectations", - "promotion_rule" - ], - "additionalProperties": false, - "properties": { - "kind": { - "const": "planning-decomposition/v1" - }, - "title": { - "type": "string" - }, - "status": { - "enum": [ - "shaping", - "ready-for-lane-promotion", - "partially-promoted", - "closed" - ] - }, - "larger_intended_outcome": { - "type": "string" - }, - "parent_acceptance": { - "$ref": "#/$defs/parent_acceptance" - }, - "non_goals": { - "$ref": "#/$defs/string_array" - }, - "candidate_lanes": { - "type": "array", - "items": { - "$ref": "#/$defs/candidate_lane" - } - }, - "dependency_assumptions": { - "$ref": "#/$defs/string_array" - }, - "parallelization_assumptions": { - "$ref": "#/$defs/string_array" - }, - "proof_expectations": { - "$ref": "#/$defs/string_array" - }, - "promotion_rule": { - "type": "string" - }, - "references": { - "type": "array", - "items": { - "$ref": "#/$defs/reference" - } - }, - "notes": { - "type": "string" - } - }, - "$defs": { - "string_array": { - "type": "array", - "items": { - "type": "string" - } - }, - "candidate_lane": { - "type": "object", - "required": [ - "id", - "title", - "readiness", - "outcome", - "owner_surface" - ], - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "readiness": { - "enum": [ - "needs-shaping", - "ready", - "promoted", - "blocked", - "deferred" - ] - }, - "outcome": { - "type": "string" - }, - "owner_surface": { - "type": "string" - }, - "proof": { - "type": "string" - }, - "slice_contribution_to_parent": { - "type": "string" - }, - "residual_parent_intent": { - "type": "string" - }, - "parent_proof_boundary": { - "type": "string" - }, - "human_confirmation_needed": { - "$ref": "#/$defs/string_array" - }, - "depends_on": { - "$ref": "#/$defs/string_array" - }, - "parallel_with": { - "$ref": "#/$defs/string_array" - } - } - }, - "parent_acceptance": { - "type": "object", - "required": [ - "original_intent", - "acceptance_target", - "parent_proof_required" - ], - "additionalProperties": false, - "properties": { - "original_intent": { - "type": "string" - }, - "acceptance_target": { - "type": "string" - }, - "parent_proof_required": { - "type": "string" - }, - "residual_intent_rule": { - "type": "string" - }, - "clarification_needed_when": { - "type": "string" - } - } - }, - "reference": { - "type": "object", - "additionalProperties": false, - "properties": { - "kind": { - "type": "string" - }, - "target": { - "type": "string" - }, - "label": { - "type": "string" - }, - "role": { - "type": "string" - } - } - } - } -} - diff --git a/.agentic-workspace/planning/schemas/planning-execplan.schema.json b/.agentic-workspace/planning/schemas/planning-execplan.schema.json deleted file mode 100644 index a656420..0000000 --- a/.agentic-workspace/planning/schemas/planning-execplan.schema.json +++ /dev/null @@ -1,375 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "agentic-planning/planning-execplan.schema.json", - "title": "Planning Execplan Record", - "type": "object", - "required": ["kind", "title", "goal", "non_goals", "active_milestone", "validation_commands", "completion_criteria"], - "additionalProperties": false, - "properties": { - "kind": { "const": "planning-execplan/v1" }, - "title": { "type": "string" }, - "execplan_profile": { "$ref": "#/$defs/string_map" }, - "canonical_core": { "$ref": "#/$defs/string_map" }, - "goal": { "$ref": "#/$defs/string_array" }, - "non_goals": { "$ref": "#/$defs/string_array" }, - "machine_readable_contract": { "type": "object" }, - "intent_continuity": { "$ref": "#/$defs/string_map" }, - "required_continuation": { "$ref": "#/$defs/string_map" }, - "iterative_follow_through": { "$ref": "#/$defs/string_map" }, - "intent_interpretation": { "$ref": "#/$defs/string_map" }, - "execution_bounds": { "$ref": "#/$defs/string_map" }, - "stop_conditions": { "$ref": "#/$defs/string_map" }, - "context_budget": { "$ref": "#/$defs/string_map" }, - "delegated_judgment": { "$ref": "#/$defs/string_map" }, - "post_decomposition_delegation": { "$ref": "#/$defs/string_map" }, - "adaptive_assurance": { - "type": "object", - "additionalProperties": false, - "properties": { - "level": { "enum": ["low", "medium", "high", "critical"] }, - "reason": { "type": "string" }, - "agent_may_escalate": { "type": "boolean" }, - "agent_may_deescalate": { "type": "boolean" }, - "strict_closeout": { "type": "boolean" }, - "required_refs": { "$ref": "#/$defs/string_array" }, - "proof_profiles": { "$ref": "#/$defs/string_array" }, - "required_gates": { "$ref": "#/$defs/string_array" } - } - }, - "traceability_refs": { - "type": "object", - "additionalProperties": false, - "properties": { - "requirement_refs": { "$ref": "#/$defs/string_array" }, - "regulation_refs": { "$ref": "#/$defs/string_array" }, - "compliance_refs": { "$ref": "#/$defs/string_array" }, - "domain_model_refs": { "$ref": "#/$defs/string_array" }, - "risk_refs": { "$ref": "#/$defs/string_array" }, - "security_refs": { "$ref": "#/$defs/string_array" }, - "audit_refs": { "$ref": "#/$defs/string_array" }, - "acceptance_refs": { "$ref": "#/$defs/string_array" }, - "decision_refs": { "$ref": "#/$defs/string_array" } - } - }, - "control_gates": { - "type": "array", - "items": { "$ref": "#/$defs/control_gate" } - }, - "implementation_blockers": { - "type": "array", - "items": { "$ref": "#/$defs/implementation_blocker" } - }, - "risk_registry_refs": { "$ref": "#/$defs/string_array" }, - "invariant_refs": { "$ref": "#/$defs/string_array" }, - "test_data_policy": { - "type": "object", - "additionalProperties": false, - "properties": { - "classification": { "type": "string" }, - "forbidden": { "$ref": "#/$defs/string_array" }, - "fixture_owner": { "type": "string" }, - "proof_required": { "$ref": "#/$defs/string_array" }, - "refs": { "$ref": "#/$defs/string_array" } - } - }, - "layer_scaffold": { - "type": "object", - "additionalProperties": false, - "properties": { - "type": { "type": "string" }, - "required_refs": { "$ref": "#/$defs/string_array" }, - "common_risks": { "$ref": "#/$defs/string_array" }, - "suggested_proof_profiles": { "$ref": "#/$defs/string_array" }, - "suggested_gates": { "$ref": "#/$defs/string_array" }, - "non_goals": { "$ref": "#/$defs/string_array" }, - "durable_residue_prompts": { "$ref": "#/$defs/string_array" } - } - }, - "architecture_decision_promotion": { - "type": "object", - "additionalProperties": false, - "properties": { - "status": { "enum": ["none", "candidate", "needed", "promoted", "deferred"] }, - "target": { "type": "string" }, - "decision_refs": { "$ref": "#/$defs/string_array" }, - "decision": { "type": "string" }, - "rationale": { "type": "string" }, - "tradeoffs": { "$ref": "#/$defs/string_array" }, - "affected_surfaces": { "$ref": "#/$defs/string_array" }, - "proof": { "type": "string" }, - "durable_owner": { "type": "string" }, - "promotion_needed": { "type": "boolean" }, - "notes": { "type": "string" } - } - }, - "threat_failure_aids": { - "type": "array", - "items": { "$ref": "#/$defs/threat_failure_aid" } - }, - "parent_lane": { "$ref": "#/$defs/string_map" }, - "capability_posture": { "$ref": "#/$defs/string_map" }, - "references": { - "type": "array", - "items": { "$ref": "#/$defs/reference" } - }, - "active_milestone": { - "type": "object", - "additionalProperties": { "type": "string" }, - "properties": { - "id": { "type": "string" }, - "status": { "type": "string" }, - "scope": { "type": "string" }, - "ready": { "type": "string" }, - "blocked": { "type": "string" }, - "optional_deps": { "type": "string" } - } - }, - "immediate_next_action": { "$ref": "#/$defs/string_array" }, - "blockers": { "$ref": "#/$defs/string_array" }, - "touched_paths": { "$ref": "#/$defs/string_array" }, - "invariants": { "$ref": "#/$defs/string_array" }, - "contract_decisions_to_freeze": { "$ref": "#/$defs/string_array" }, - "open_questions_to_close": { "$ref": "#/$defs/string_array" }, - "validation_commands": { "$ref": "#/$defs/string_array" }, - "required_tools": { "$ref": "#/$defs/string_array" }, - "completion_criteria": { "$ref": "#/$defs/string_array" }, - "execution_run": { "$ref": "#/$defs/string_map" }, - "finished_run_review": { "$ref": "#/$defs/string_map" }, - "delegation_outcome_feedback": { "$ref": "#/$defs/string_map" }, - "proof_report": { "$ref": "#/$defs/string_map" }, - "intent_satisfaction": { "$ref": "#/$defs/string_map" }, - "system_intent_alignment": { "$ref": "#/$defs/string_map" }, - "closure_check": { "$ref": "#/$defs/string_map" }, - "completion_gate": { "$ref": "#/$defs/completion_gate" }, - "generated_closeout": { "$ref": "#/$defs/string_map" }, - "memory_learning_capture": { "$ref": "#/$defs/string_map" }, - "durable_residue": { - "type": "object", - "additionalProperties": false, - "properties": { - "status": { - "enum": ["none", "memory", "docs", "contract", "check", "planning", "evidence_only"] - }, - "learned constraint": { "type": "string" }, - "motivation worth preserving": { "type": "string" }, - "canonical owner now": { "type": "string" }, - "promotion trigger": { "type": "string" }, - "retention after promotion": { "type": "string" } - } - }, - "task_intent_promotion": { "$ref": "#/$defs/string_map" }, - "execution_summary": { "$ref": "#/$defs/string_map" }, - "improvement_signal_review": { - "type": "object", - "additionalProperties": true, - "properties": { - "status": { "type": "string" }, - "signals found": { "anyOf": [{ "type": "string" }, { "$ref": "#/$defs/string_array" }] }, - "signals fixed": { "anyOf": [{ "type": "string" }, { "$ref": "#/$defs/string_array" }] }, - "signals routed": { "anyOf": [{ "type": "string" }, { "$ref": "#/$defs/string_array" }] }, - "signals dismissed": { "anyOf": [{ "type": "string" }, { "$ref": "#/$defs/string_array" }] }, - "next owner": { "type": "string" } - } - }, - "closeout_distillation": { - "type": "object", - "additionalProperties": false, - "properties": { - "buckets": { - "type": "object", - "additionalProperties": false, - "properties": { - "discard": { "$ref": "#/$defs/distillation_items" }, - "continuation": { "$ref": "#/$defs/distillation_items" }, - "memory": { "$ref": "#/$defs/distillation_items" }, - "config_check": { "$ref": "#/$defs/distillation_items" }, - "docs": { "$ref": "#/$defs/distillation_items" }, - "issue_follow_up": { "$ref": "#/$defs/distillation_items" } - } - } - } - }, - "drift_log": { "$ref": "#/$defs/string_array" }, - "proof_expectations": { "$ref": "#/$defs/string_array" }, - "anti_overfitting_review": { "type": "object" }, - "direct_cli_edit_review": { "type": "object" }, - "cost_assessment": { "type": "object" }, - "parent_acceptance": { "$ref": "#/$defs/string_map" }, - "parent_acceptance_map": { - "anyOf": [ - { "type": "object" }, - { "type": "array" } - ] - } - }, - "$defs": { - "string_array": { - "type": "array", - "items": { - "anyOf": [ - { "type": "string" }, - { "type": "object" } - ] - } - }, - "string_map": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { "type": "string" }, - { "type": "array" }, - { "type": "object" }, - { "type": "boolean" }, - { "type": "number" }, - { "type": "null" } - ] - } - }, - "completion_gate": { - "type": "object", - "additionalProperties": true, - "required": [ - "kind", - "status", - "active_intent_satisfied", - "human_accepted_partial", - "claim_level_requested", - "claim_level_allowed", - "required_next_action", - "claim_authorization", - "self_review", - "continuation", - "authority_boundary" - ], - "properties": { - "kind": { "const": "agentic-workspace/completion-gate/v1" }, - "status": { - "enum": ["allowed", "blocked", "continue-required", "clarification-required", "human-accepted-partial"] - }, - "active_intent_satisfied": { "type": "boolean" }, - "human_accepted_partial": { "type": "boolean" }, - "claim_level_requested": { "type": "string" }, - "claim_level_allowed": { "type": "string" }, - "required_next_action": { "type": "string" }, - "claim_authorization": { "$ref": "#/$defs/claim_authorization" }, - "residual_intent": { "type": "string" }, - "self_review": { "type": "object" }, - "continuation": { "type": "object" }, - "authority_boundary": { "type": "object" } - } - }, - "claim_authorization": { - "type": "object", - "additionalProperties": true, - "required": ["kind", "allowed_claim_classes", "blocked_claim_classes", "closure_actions", "renderer_rule", "diagnostics"], - "properties": { - "kind": { "const": "agentic-workspace/claim-authorization/v1" }, - "allowed_claim_classes": { - "type": "array", - "items": { - "enum": ["partial_progress", "slice_complete", "lane_complete", "parent_complete", "full_intent_complete", "issue_closure"] - } - }, - "blocked_claim_classes": { - "type": "array", - "items": { - "enum": ["partial_progress", "slice_complete", "lane_complete", "parent_complete", "full_intent_complete", "issue_closure"] - } - }, - "closure_actions": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true, - "required": ["kind", "target", "authorized", "reason"], - "properties": { - "kind": { "const": "issue_closure" }, - "target": { "type": "string" }, - "authorized": { "type": "boolean" }, - "reason": { "type": "string" } - } - } - }, - "renderer_rule": { "type": "string" }, - "diagnostics": { - "type": "object", - "additionalProperties": true, - "required": ["unsafe_claim_examples", "diagnostic_only"], - "properties": { - "unsafe_claim_examples": { "$ref": "#/$defs/string_array" }, - "diagnostic_only": { "const": true } - } - } - } - }, - "reference": { - "anyOf": [ - { "type": "string" }, - { - "type": "object", - "additionalProperties": false, - "properties": { - "kind": { "type": "string" }, - "target": { "type": "string" }, - "label": { "type": "string" }, - "role": { "type": "string" }, - "locator": { "type": "string" } - } - } - ] - }, - "control_gate": { - "type": "object", - "additionalProperties": false, - "properties": { - "id": { "type": "string" }, - "owner_role": { "type": "string" }, - "required_for": { "$ref": "#/$defs/string_array" }, - "status": { "enum": ["pending", "satisfied", "waived", "blocked"] }, - "evidence": { "$ref": "#/$defs/string_array" }, - "blocking": { "type": "boolean" }, - "next_action": { "type": "string" } - } - }, - "implementation_blocker": { - "type": "object", - "additionalProperties": false, - "properties": { - "id": { "type": "string" }, - "status": { "type": "string" }, - "do_not_implement": { "type": "boolean" }, - "blocked_by": { "$ref": "#/$defs/string_array" }, - "allowed_work": { "$ref": "#/$defs/string_array" }, - "evidence": { "$ref": "#/$defs/string_array" }, - "next_action": { "type": "string" } - } - }, - "threat_failure_aid": { - "type": "object", - "additionalProperties": false, - "properties": { - "id": { "type": "string" }, - "concern": { "type": "string" }, - "source_ref": { "type": "string" }, - "advisory": { "type": "string" } - } - }, - "distillation_items": { - "type": "array", - "items": { - "anyOf": [ - { "type": "string" }, - { - "type": "object", - "additionalProperties": true, - "properties": { - "summary": { "type": "string" }, - "owner": { "type": "string" }, - "source": { "type": "string" } - } - } - ] - } - } - } -} diff --git a/.agentic-workspace/planning/schemas/planning-external-intent-evidence.schema.json b/.agentic-workspace/planning/schemas/planning-external-intent-evidence.schema.json deleted file mode 100644 index 068f835..0000000 --- a/.agentic-workspace/planning/schemas/planning-external-intent-evidence.schema.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://agentic-workspace.local/schemas/planning-external-intent-evidence.schema.json", - "title": "Planning External Intent Evidence", - "type": "object", - "required": ["kind", "items"], - "additionalProperties": false, - "properties": { - "kind": { - "const": "planning-external-intent-evidence/v1" - }, - "systems": { - "type": "array", - "items": { - "type": "string" - } - }, - "refreshed_at": { - "type": "string" - }, - "refresh_metadata": { - "type": "object", - "additionalProperties": false, - "properties": { - "adapter": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "refreshed_at": { - "type": "string" - }, - "item_count": { - "type": "integer", - "minimum": 0 - }, - "open_count": { - "type": "integer", - "minimum": 0 - }, - "closed_count": { - "type": "integer", - "minimum": 0 - }, - "fetched_item_count": { - "type": "integer", - "minimum": 0 - }, - "fetched_open_count": { - "type": "integer", - "minimum": 0 - }, - "fetched_closed_count": { - "type": "integer", - "minimum": 0 - }, - "limit": { - "type": "integer", - "minimum": 0 - }, - "state": { - "type": "string" - }, - "state_source": { - "type": "string" - }, - "limit_source": { - "type": "string" - }, - "command": { - "type": "string" - }, - "cache_compaction": { - "type": "object", - "additionalProperties": false, - "properties": { - "enabled": { - "type": "boolean" - }, - "storage": { - "type": "string" - }, - "closed_retention_days": { - "type": "integer", - "minimum": 0 - }, - "cutoff": { - "type": "string" - }, - "retained_item_count": { - "type": "integer", - "minimum": 0 - }, - "dropped_closed_count": { - "type": "integer", - "minimum": 0 - }, - "retained_recent_closed_count": { - "type": "integer", - "minimum": 0 - }, - "retained_referenced_closed_count": { - "type": "integer", - "minimum": 0 - }, - "referenced_issue_count": { - "type": "integer", - "minimum": 0 - } - } - } - } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "required": ["system", "id", "status"], - "additionalProperties": false, - "properties": { - "system": { - "type": "string", - "minLength": 1 - }, - "id": { - "type": "string", - "minLength": 1 - }, - "title": { - "type": "string" - }, - "status": { - "type": "string", - "minLength": 1 - }, - "kind": { - "type": "string" - }, - "parent_id": { - "type": "string" - }, - "reopens": { - "type": "array", - "items": { - "type": "string" - } - }, - "planning_residue_expected": { - "type": "string" - }, - "negative_invariants": { - "type": "array", - "items": { - "type": "string" - } - }, - "url": { - "type": "string" - }, - "source_repository": { - "type": "string" - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "created_at": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "closed_at": { - "type": "string" - }, - "comments_count": { - "type": "integer", - "minimum": 0 - } - } - } - }, - "previous_items": { - "type": "array", - "items": { - "type": "object" - } - } - } -} diff --git a/.agentic-workspace/planning/schemas/planning-finished-work-evidence.schema.json b/.agentic-workspace/planning/schemas/planning-finished-work-evidence.schema.json deleted file mode 100644 index cba635c..0000000 --- a/.agentic-workspace/planning/schemas/planning-finished-work-evidence.schema.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://agentic-workspace.local/schemas/planning-finished-work-evidence.schema.json", - "title": "Planning Finished Work Evidence", - "type": "object", - "required": ["kind", "items"], - "additionalProperties": false, - "properties": { - "kind": { - "const": "planning-finished-work-evidence/v1" - }, - "systems": { - "type": "array", - "items": { - "type": "string" - } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "required": ["system", "id", "status"], - "additionalProperties": false, - "properties": { - "system": { - "type": "string", - "minLength": 1 - }, - "id": { - "type": "string", - "minLength": 1 - }, - "title": { - "type": "string" - }, - "status": { - "type": "string", - "minLength": 1 - }, - "kind": { - "type": "string" - }, - "reopens": { - "type": "array", - "items": { - "type": "string" - } - }, - "reason": { - "type": "string" - } - } - } - } - } -} diff --git a/.agentic-workspace/planning/schemas/planning-lane.schema.json b/.agentic-workspace/planning/schemas/planning-lane.schema.json deleted file mode 100644 index d4ccd52..0000000 --- a/.agentic-workspace/planning/schemas/planning-lane.schema.json +++ /dev/null @@ -1,392 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "agentic-planning/planning-lane.schema.json", - "title": "Planning Lane Record", - "type": "object", - "required": [ - "kind", - "id", - "title", - "status", - "parent_decomposition_ref", - "lane_outcome", - "purpose_for_parent", - "subsystems", - "technical_strategy", - "slice_sequence", - "acceptance_boundary", - "proof_strategy", - "proof_aggregation", - "residual_lane_work", - "lane_to_epic_contribution", - "parent_close_permission", - "closeout_state", - "references" - ], - "additionalProperties": false, - "properties": { - "kind": { - "const": "planning-lane/v1" - }, - "id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "status": { - "enum": [ - "shaping", - "ready", - "active", - "blocked", - "closed", - "archived" - ] - }, - "parent_decomposition_ref": { - "type": "string" - }, - "lane_outcome": { - "type": "string" - }, - "purpose_for_parent": { - "type": "string" - }, - "subsystems": { - "$ref": "#/$defs/string_array" - }, - "technical_strategy": { - "type": "string" - }, - "technology_choices": { - "$ref": "#/$defs/string_array" - }, - "slice_sequence": { - "type": "array", - "items": { - "$ref": "#/$defs/slice" - } - }, - "current_slice": { - "type": "string" - }, - "acceptance_boundary": { - "type": "string" - }, - "proof_strategy": { - "type": "string" - }, - "proof_aggregation": { - "$ref": "#/$defs/proof_aggregation" - }, - "residual_lane_work": { - "type": "string" - }, - "lane_to_epic_contribution": { - "type": "string" - }, - "parent_close_permission": { - "enum": [ - "not-evaluated", - "do-not-close-parent", - "may-advance-parent", - "may-close-parent-after-human-confirmation", - "may-close-parent" - ] - }, - "closeout_state": { - "$ref": "#/$defs/closeout_state" - }, - "completion_gate": { - "$ref": "#/$defs/completion_gate" - }, - "references": { - "type": "array", - "items": { - "$ref": "#/$defs/reference" - } - }, - "notes": { - "type": "string" - } - }, - "$defs": { - "string_array": { - "type": "array", - "items": { - "type": "string" - } - }, - "slice": { - "type": "object", - "required": [ - "id", - "title", - "status", - "execplan_ref", - "depends_on", - "purpose_for_lane" - ], - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "status": { - "enum": [ - "planned", - "ready", - "active", - "blocked", - "completed", - "skipped" - ] - }, - "execplan_ref": { - "type": "string" - }, - "depends_on": { - "$ref": "#/$defs/string_array" - }, - "purpose_for_lane": { - "type": "string" - }, - "proof": { - "type": "string" - }, - "residual_after_slice": { - "type": "string" - } - } - }, - "proof_aggregation": { - "type": "object", - "required": [ - "status", - "evidence", - "known_gaps" - ], - "additionalProperties": false, - "properties": { - "status": { - "enum": [ - "not-started", - "partial", - "satisfied", - "blocked" - ] - }, - "evidence": { - "$ref": "#/$defs/string_array" - }, - "known_gaps": { - "$ref": "#/$defs/string_array" - } - } - }, - "closeout_state": { - "type": "object", - "required": [ - "status", - "summary", - "residual_work", - "next_owner" - ], - "additionalProperties": false, - "properties": { - "status": { - "enum": [ - "open", - "ready-for-closeout", - "closed", - "blocked" - ] - }, - "summary": { - "type": "string" - }, - "residual_work": { - "type": "string" - }, - "next_owner": { - "type": "string" - } - } - }, - "completion_gate": { - "type": "object", - "additionalProperties": true, - "required": [ - "kind", - "status", - "active_intent_satisfied", - "human_accepted_partial", - "claim_level_requested", - "claim_level_allowed", - "required_next_action", - "claim_authorization", - "self_review", - "continuation", - "authority_boundary" - ], - "properties": { - "kind": { - "const": "agentic-workspace/completion-gate/v1" - }, - "status": { - "enum": [ - "allowed", - "blocked", - "continue-required", - "clarification-required", - "human-accepted-partial" - ] - }, - "active_intent_satisfied": { - "type": "boolean" - }, - "human_accepted_partial": { - "type": "boolean" - }, - "claim_level_requested": { - "type": "string" - }, - "claim_level_allowed": { - "type": "string" - }, - "required_next_action": { - "type": "string" - }, - "claim_authorization": { - "$ref": "#/$defs/claim_authorization" - }, - "residual_intent": { - "type": "string" - }, - "self_review": { - "type": "object" - }, - "continuation": { - "type": "object" - }, - "authority_boundary": { - "type": "object" - } - } - }, - "claim_authorization": { - "type": "object", - "additionalProperties": true, - "required": [ - "kind", - "allowed_claim_classes", - "blocked_claim_classes", - "closure_actions", - "renderer_rule", - "diagnostics" - ], - "properties": { - "kind": { - "const": "agentic-workspace/claim-authorization/v1" - }, - "allowed_claim_classes": { - "type": "array", - "items": { - "enum": [ - "partial_progress", - "slice_complete", - "lane_complete", - "parent_complete", - "full_intent_complete", - "issue_closure" - ] - } - }, - "blocked_claim_classes": { - "type": "array", - "items": { - "enum": [ - "partial_progress", - "slice_complete", - "lane_complete", - "parent_complete", - "full_intent_complete", - "issue_closure" - ] - } - }, - "closure_actions": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": true, - "required": [ - "kind", - "target", - "authorized", - "reason" - ], - "properties": { - "kind": { - "const": "issue_closure" - }, - "target": { - "type": "string" - }, - "authorized": { - "type": "boolean" - }, - "reason": { - "type": "string" - } - } - } - }, - "renderer_rule": { - "type": "string" - }, - "diagnostics": { - "type": "object", - "additionalProperties": true, - "required": [ - "unsafe_claim_examples", - "diagnostic_only" - ], - "properties": { - "unsafe_claim_examples": { - "$ref": "#/$defs/string_array" - }, - "diagnostic_only": { - "const": true - } - } - } - } - }, - "reference": { - "type": "object", - "additionalProperties": false, - "properties": { - "kind": { - "type": "string" - }, - "target": { - "type": "string" - }, - "label": { - "type": "string" - }, - "role": { - "type": "string" - }, - "locator": { - "type": "string" - } - } - } - } -} diff --git a/.agentic-workspace/planning/schemas/planning-review.schema.json b/.agentic-workspace/planning/schemas/planning-review.schema.json deleted file mode 100644 index cf67b91..0000000 --- a/.agentic-workspace/planning/schemas/planning-review.schema.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "agentic-planning/planning-review.schema.json", - "title": "Planning Review Record", - "type": "object", - "required": ["kind", "title"], - "additionalProperties": false, - "properties": { - "kind": { "const": "planning-review/v1" }, - "title": { "type": "string" }, - "classification": { "type": "string" }, - "date": { "type": "string" }, - "goal": { "$ref": "#/$defs/string_or_array" }, - "scope": { "$ref": "#/$defs/string_or_array" }, - "non_goals": { "$ref": "#/$defs/string_or_array" }, - "review_mode": { "$ref": "#/$defs/string_map" }, - "review_method": { "$ref": "#/$defs/string_map" }, - "references": { - "type": "array", - "items": { "$ref": "#/$defs/reference" } - }, - "findings": { - "type": "array", - "items": { "$ref": "#/$defs/finding" } - }, - "issue_classifications": { - "type": "array", - "items": { "type": "object" } - }, - "recommendation": { "$ref": "#/$defs/string_map" }, - "retention": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { "type": "string" }, - { "$ref": "#/$defs/string_array" } - ] - } - }, - "prose_templates": { - "type": "object", - "additionalProperties": { "$ref": "#/$defs/prose_template" } - }, - "validation_commands": { "$ref": "#/$defs/string_array" }, - "drift_log": { "$ref": "#/$defs/string_array" }, - "summary": { - "anyOf": [ - { "type": "string" }, - { "type": "object" } - ] - }, - "summary_counts": { "type": "object" }, - "classification_legend": { "type": "object" }, - "lane_impacts": { "type": "array" } - }, - "$defs": { - "string_array": { - "type": "array", - "items": { "type": "string" } - }, - "string_or_array": { - "anyOf": [ - { "type": "string" }, - { "$ref": "#/$defs/string_array" } - ] - }, - "string_map": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { "type": "string" }, - { "type": "array" }, - { "type": "object" }, - { "type": "boolean" }, - { "type": "number" }, - { "type": "null" } - ] - } - }, - "reference": { - "type": "object", - "additionalProperties": true, - "properties": { - "kind": { "type": "string" }, - "target": { "type": "string" }, - "label": { "type": "string" }, - "role": { "type": "string" }, - "locator": { "type": "string" } - } - }, - "finding": { - "type": "object", - "additionalProperties": true, - "properties": { - "title": { "type": "string" }, - "summary": { "type": "string" }, - "evidence": { "type": "string" }, - "risk if unchanged": { "type": "string" }, - "suggested action": { "type": "string" }, - "confidence": { "type": "string" }, - "source": { "type": "string" }, - "promotion target": { "type": "string" }, - "promotion trigger": { "type": "string" }, - "post-remediation note shape": { "type": "string" } - } - }, - "prose_template": { - "type": "object", - "additionalProperties": true, - "properties": { - "sections": { "$ref": "#/$defs/string_array" }, - "field_map": { "$ref": "#/$defs/string_map" }, - "rule": { "type": "string" } - } - } - } -} - diff --git a/.agentic-workspace/planning/skills/planning-high-assurance-lifecycle/SKILL.md b/.agentic-workspace/planning/skills/planning-high-assurance-lifecycle/SKILL.md index a52298c..f56edbb 100644 --- a/.agentic-workspace/planning/skills/planning-high-assurance-lifecycle/SKILL.md +++ b/.agentic-workspace/planning/skills/planning-high-assurance-lifecycle/SKILL.md @@ -6,6 +6,7 @@ description: Preserve intent, decomposition, assurance, delegation, proof, and c # Planning High-Assurance Lifecycle Use this skill when work is broad, multi-lane, high-assurance, cross-boundary, or likely to grow beyond an initially bounded slice. +This skill is the mandatory routed path when enabled-AW startup reports broad, milestone-scale, or high-assurance work without active Planning custody; do not treat advisory routing or `implementation_allowed` as permission to skip Planning before implementation. ## Primary Ownership diff --git a/.agentic-workspace/planning/skills/planning-reporting/SKILL.md b/.agentic-workspace/planning/skills/planning-reporting/SKILL.md index 797a14f..4d39b6e 100644 --- a/.agentic-workspace/planning/skills/planning-reporting/SKILL.md +++ b/.agentic-workspace/planning/skills/planning-reporting/SKILL.md @@ -7,6 +7,7 @@ description: Report active planning state, proof expectations, and next-action g Use this skill when you need a compact, comparable picture of what is active and what should happen next, without rereading `.agentic-workspace/planning/state.toml` or execplan prose first. Use `agentic-workspace report --target <repo> --format json` first when the question is broader than planning state alone. +This reporting skill is not a bypass around enabled-AW participation: consult it when `start`, `next_safe_action`, `skill_routing`, or active Planning state routes here, and preserve any planning or proof gate before implementation or closeout. ## Primary Ownership diff --git a/.agentic-workspace/skills/REGISTRY.json b/.agentic-workspace/skills/REGISTRY.json index d98b7e8..32ada45 100644 --- a/.agentic-workspace/skills/REGISTRY.json +++ b/.agentic-workspace/skills/REGISTRY.json @@ -6,41 +6,50 @@ { "id": "workspace-startup", "path": "workspace-startup/SKILL.md", - "scope": "routed-projection", + "scope": "main-operating-skill", "stability": "contract-backed-projection", - "visibility": "routed-on-demand", - "summary": "orient through compact workspace commands before opening raw planning, memory, or docs surfaces", + "visibility": "ordinary-default", + "summary": "main AW operating loop for compact routing, configured invocation, routed gates, proof boundaries, and subskill handoff", "activation_hints": { - "verbs": ["start", "orient", "route", "preflight", "bootstrap", "closeout", "prove"], - "nouns": ["workspace", "startup", "workflow", "config", "proof", "closeout", "module map"], + "verbs": ["start", "orient", "route", "resume", "implement", "closeout"], + "nouns": ["workspace", "startup", "workflow", "config", "proof", "closeout", "AW repo"], "phrases": [ "workspace startup", + "main aw operating loop", + "start work on this aw repo", + "implement issue", "orient in the workspace", "route this task", - "what should I do first", - "proof and closeout" + "what should I do first" ], "when": [ "first contact with an installed workspace", - "task shape or proof route is unclear", - "agent is tempted to scan raw workspace docs" + "ordinary AW work starts or resumes", + "agent is tempted to scan raw workspace docs", + "a compact router should decide next safe action before source inspection" ] } }, { "id": "workspace-intent-discovery", "path": "workspace-intent-discovery/SKILL.md", - "scope": "bundled", + "scope": "specialized-subskill", "stability": "package-managed", - "visibility": "ordinary-default", - "summary": "run bounded human intent discovery before vague or high-stakes prompts become Planning or implementation", + "visibility": "routed-on-demand", + "summary": "clarify ambiguous human intent and classify direct, bounded, lane, or epic work after main AW routing", "activation_hints": { - "verbs": ["ask", "clarify", "discover", "resolve", "brainstorm", "extract", "capture"], + "verbs": ["ask", "clarify", "discover", "resolve", "classify", "shape", "triage"], "nouns": [ "intent discovery", "human intent", "vague prompt", + "vague outcome", "candidate interpretations", + "work shape", + "direct task", + "bounded task", + "lane", + "epic", "non-goals", "first slice", "stakes if wrong", @@ -48,8 +57,14 @@ ], "phrases": [ "intent-discovery dialogue", + "intent and shape", "clarify human intent with candidate interpretations before planning", "clarify human intent", + "classify work shape", + "shape this work", + "vague outcome prompt", + "large vague feature request", + "direct bounded lane epic", "candidate interpretations", "ask before implementation", "ask before planning", @@ -60,6 +75,9 @@ "when": [ "prompt is vague or under-specified", "stakes_if_wrong is high and inferred_intent_confidence is low", + "task size is unclear", + "the user describes an outcome rather than a solution", + "broad work needs routing before planning", "agent might silently choose a convenient implementation slice", "why, desired outcome, non-goals, or acceptable first slice are missing" ] @@ -68,65 +86,38 @@ { "id": "workspace-work-shape", "path": "workspace-work-shape/SKILL.md", - "scope": "bundled", + "scope": "reference-support", "stability": "package-managed", - "visibility": "ordinary-default", - "summary": "classify work shape and route direct, bounded, lane, or epic work before implementation", + "visibility": "reference-only", + "summary": "reference vocabulary for direct, bounded, lane, and epic work shapes; merged procedure lives in workspace-intent-discovery", "activation_hints": { - "verbs": ["classify", "triage", "shape", "route", "decide", "infer", "resolve"], + "verbs": ["reference"], "nouns": [ - "work shape", - "direct task", - "bounded task", - "lane", - "epic", - "vague request", - "vague outcome", - "intended outcome", - "intent", - "trust", - "rework", - "handoff trust", - "what I meant", - "satisfaction evidence" + "work shape reference", + "direct bounded lane epic vocabulary", + "shape vocabulary", + "shape taxonomy" ], "phrases": [ - "classify work shape", - "shape this work", - "infer intended outcome", - "resolve intended outcome", - "vague outcome prompt", - "feel more trustworthy", - "agents hand work back", - "agents keep making me repeat", - "what I meant", - "long task handoff", - "before naming a solution", - "how to know intent is satisfied", - "large vague feature request", - "before implementation", - "direct bounded lane epic" + "work shape reference", + "direct bounded lane epic vocabulary", + "what does lane shape mean" ], "when": [ - "task size is unclear", - "the user describes an outcome rather than a solution", - "the user names a desired quality such as trust, less rework, or safer handoff", - "intent needs to be preserved before implementation", - "satisfaction criteria are unclear", - "agent may jump straight to implementation", - "broad work needs routing before planning" + "a compact packet or review explicitly asks for work-shape vocabulary", + "workspace-intent-discovery has already handled the procedure" ] } }, { "id": "workspace-proof-selection", "path": "workspace-proof-selection/SKILL.md", - "scope": "routed-projection", + "scope": "specialized-subskill", "stability": "contract-backed-projection", "visibility": "routed-on-demand", "summary": "select and interpret proof for task, slice, lane, or epic completion claims", "activation_hints": { - "verbs": ["prove", "validate", "verify", "classify", "select"], + "verbs": ["prove", "validate", "verify", "select"], "nouns": [ "proof selection", "completion claim", @@ -155,12 +146,12 @@ { "id": "workspace-transition-gates", "path": "workspace-transition-gates/SKILL.md", - "scope": "routed-support", + "scope": "reference-support", "stability": "contract-backed-projection", - "visibility": "routed-on-demand", - "summary": "apply SkillSpec-backed gates to startup, planning, proof, memory, and closeout transitions", + "visibility": "reference-only", + "summary": "reference SkillSpec-backed transition gate details when compact routed fields need interpretation", "activation_hints": { - "verbs": ["gate", "transition", "route", "preserve", "fallback"], + "verbs": ["reference", "interpret"], "nouns": [ "SkillSpec", "transition gate", @@ -171,12 +162,11 @@ "no-CLI fallback" ], "phrases": [ - "SkillSpec-backed gate", - "transition gate", - "allowed actions", - "forbidden actions", - "preferred CLI", - "no-CLI fallback" + "SkillSpec-backed gate reference", + "transition gate reference", + "interpret forbidden actions", + "interpret allowed actions", + "no-CLI fallback reference" ], "when": [ "moving between workspace, planning, proof, memory, or closeout", @@ -188,14 +178,21 @@ { "id": "workspace-operating-loop", "path": "workspace-operating-loop/SKILL.md", - "scope": "routed-projection", + "scope": "specialized-subskill", "stability": "contract-backed-projection", "visibility": "routed-on-demand", - "summary": "apply the core operating loop and module slot contract across workspace, planning, proof, closeout, and memory", + "summary": "use compact AW state for state-delta visible updates while preserving module-slot ownership and direct-answer boundaries", "activation_hints": { - "verbs": ["orchestrate", "slot", "route", "own", "preserve"], + "verbs": ["reference", "interpret", "answer", "respond", "update", "resume", "recheck"], "nouns": [ "operating loop", + "state-delta", + "current decision", + "message economy", + "continuation capsule", + "evidence bundle", + "decision packet", + "visible update", "module slot", "module slot contract", "workspace slot", @@ -204,14 +201,23 @@ "direct answer" ], "phrases": [ - "operating loop", - "module slot contract", - "module slot", - "answer directly no artifact", - "planning memory workspace loop", - "completion claim allowed" + "state-delta-first", + "state delta first", + "current decision packet", + "message economy", + "continuation capsule", + "evidence bundle", + "visible update delta", + "answer from compact state", + "module slot contract reference", + "module slot reference", + "interpret module slot", + "answer directly no artifact reference" ], "when": [ + "current_decision, message_economy, continuation_capsule, or evidence_bundle packets are present", + "the agent needs to write a compact visible update from AW state", + "a resume, recheck, handoff, proof, or closeout message should avoid prose recap", "module ownership is unclear", "a next-safe-action packet names a module slot", "the agent may create an unnecessary artifact instead of answering directly" @@ -221,12 +227,12 @@ { "id": "workspace-setup-jumpstart", "path": "workspace-setup-jumpstart/SKILL.md", - "scope": "routed-support", + "scope": "specialized-subskill", "stability": "contract-backed-projection", "visibility": "routed-on-demand", "summary": "route newly installed or adopted Agentic Workspace in a lived-in repo through bounded setup and jumpstart discovery before seeding durable surfaces", "activation_hints": { - "verbs": ["setup", "jumpstart", "populate", "seed", "adopt", "install", "orient"], + "verbs": ["setup", "jumpstart", "populate", "seed", "adopt", "install"], "nouns": [ "lived-in repo", "mature repo", diff --git a/.agentic-workspace/skills/workspace-intent-discovery/SKILL.md b/.agentic-workspace/skills/workspace-intent-discovery/SKILL.md index 887960f..56c75f3 100644 --- a/.agentic-workspace/skills/workspace-intent-discovery/SKILL.md +++ b/.agentic-workspace/skills/workspace-intent-discovery/SKILL.md @@ -1,19 +1,28 @@ --- name: workspace-intent-discovery -description: Run a bounded human intent-discovery dialogue before vague or high-stakes prompts become Planning or implementation work. +description: Clarify ambiguous human intent and classify direct, bounded, lane, or epic work after the main AW operating skill routes to intent/shape judgment. --- -# Workspace Intent Discovery +# Workspace Intent And Shape -Use this skill when a prompt is broad, vague, high-stakes, or outcome-shaped enough that silently choosing a first implementation slice could miss the user's real goal. +Use this subskill after `workspace-startup` or compact routing when a prompt is broad, vague, high-stakes, or outcome-shaped enough that silently choosing a first implementation slice could miss the user's real goal. +This subskill owns the merged intent/work-shape decision. `workspace-work-shape` is reference support, not a competing peer skill. ## Protocol 1. Name two or three plausible interpretations, not just one inferred intent. 2. Ask one compact question that captures why the work matters, desired outcome, non-goals, and an acceptable first slice. 3. If the user does not answer and progress is still safe, proceed only with stated assumptions and visible uncertainty. -4. Carry the clarified result into the smallest existing surface: `task_intent`, `acceptance`, `durable_intent`, Memory, Planning, or an issue. -5. Stop the dialogue after one bounded clarification unless the user's answer exposes a real safety, authority, or scope blocker. +4. Classify the work as `direct`, `bounded`, `lane`, or `epic`. +5. Carry the clarified result into the smallest existing surface: `task_intent`, `acceptance`, `durable_intent`, Memory, Planning, or an issue, including a `completion-boundary` when closure could otherwise be ambiguous. +6. Stop the dialogue after one bounded clarification unless the user's answer exposes a real safety, authority, or scope blocker. + +## Shape Rules + +- `direct`: target and proof are obvious; keep workspace overhead minimal. +- `bounded`: finite local implementation with non-obvious proof or continuation risk; use compact implement/proof output. +- `lane`: multi-slice work that needs checked-in Planning state before coding. +- `epic`: multiple lanes, unclear decomposition, or high assurance; stop before implementation and shape the durable plan first. ## Output Shape @@ -23,11 +32,16 @@ Use this skill when a prompt is broad, vague, high-stakes, or outcome-shaped eno - `likely_non_goals` - `stakes_if_wrong` - `proposed_first_slice` +- `work_shape` +- `why_shape_fits` +- `satisfaction_evidence` - `question_to_user` - `proceed_without_answer_when` - `captured_intent_after_reply` - `promotion_target` +Prefer `intent_custody` when compact refs, boundaries, anti-goals, provenance, and freshness are enough. Use `unresolved-assumption` entries when uncertainty must remain visible through proof or closeout. + ## Examples Ask: diff --git a/.agentic-workspace/skills/workspace-operating-loop/SKILL.md b/.agentic-workspace/skills/workspace-operating-loop/SKILL.md index 1cfae2c..708a707 100644 --- a/.agentic-workspace/skills/workspace-operating-loop/SKILL.md +++ b/.agentic-workspace/skills/workspace-operating-loop/SKILL.md @@ -1,26 +1,57 @@ --- name: workspace-operating-loop -description: Use the core Agentic Workspace operating loop and module slot contract. Use when deciding which module owns startup, planning, implementation, proof, closeout, memory consultation, residue routing, or no-artifact direct answers. +description: Use AW compact state to write visible updates as decision, proof, residue, and next-action deltas while preserving module-slot ownership. --- # Workspace Operating Loop This is a package-managed workspace skill installed under `.agentic-workspace/skills/`. -Use it to keep module ownership visible while preserving compact CLI-first operation. +Start with `workspace-startup`; use this skill when compact routing, `current_decision`, `message_economy`, `continuation_capsule`, `evidence_bundle`, module ownership, or no-artifact direct-answer behavior needs interpretation before a visible update. + +## State-Delta Procedure + +1. Read the compact decision frame when present: + - `current_decision` + - `message_economy` or `communication_contract` + - `continuation_capsule` + - `evidence_bundle` + - `decision_packet` + - `proof_narrowness` + - `reasoning_economy` +2. If the frame is sufficient, answer only the decision-relevant delta: + - decision or finding; + - evidence or proof boundary; + - residue or claim boundary; + - next safe action or closure status. +3. Do not repeat context already captured in AW state unless it changes the current decision. +4. Do not narrate tool chronology unless the chronology itself is proof-relevant or trust-relevant. +5. If the frame is insufficient, use the smallest `evidence_bundle` or safe probe before making a hard claim. +6. Expand only for proof gaps, safety or ownership ambiguity, unresolved residue, stale evidence, or explicit user request. + +## Output Rule + +Default visible output is a compact delta, not a recap: + +- `Decision:` or `Finding:` +- `Evidence:` +- `Residue:` +- `Next action:` + +Omit a field only when it is genuinely irrelevant. Do not omit proof, residue, uncertainty, or owner boundaries when they change the safe claim. ## Module Slot Contract `workspace` - Owns startup, config, ownership, lifecycle, module map, skill routing, proof routing, and package composition. -- Preferred CLI: `agentic-workspace start`, `implement`, `proof`, `skills`, `report`, `doctor`, `status`. +- Preferred route: configured AW invocation with `start`, `implement`, `proof`, `skills`, `report`, `doctor`, or `status`. - No-CLI fallback: `.agentic-workspace/WORKFLOW.md`, `.agentic-workspace/docs/module-map.md`, then only the named surface. `planning` - Owns active execution state, todo promotion, execplans, decomposition, closeout, issue linkage, and continuation. -- Preferred CLI: `agentic-workspace summary`, `agentic-workspace planning ...`. +- Preferred route: configured AW invocation with `summary` or `planning ...`. - No-CLI fallback: read the compact summary first when possible; open the active execplan only when routed there. `planning.closeout` @@ -32,18 +63,18 @@ Use it to keep module ownership visible while preserving compact CLI-first opera `workspace.proof` - Owns proof selection and proof result interpretation, not broader intent by itself. -- Preferred CLI: `agentic-workspace proof --changed <paths> --format json`. +- Preferred route: configured AW invocation with `proof --changed <paths> --format json`. - No-CLI fallback: select the narrowest existing test, lint, contract, or inspection route. `memory` - Owns durable anti-rediscovery knowledge, consultation status, durable residue, and improvement-signal routing. -- Preferred CLI: `agentic-workspace memory route`, `capture-note`, `promotion-report`. +- Preferred route: configured AW invocation with `memory route`, `capture-note`, or `promotion-report`. - No-CLI fallback: read the Memory index and already-routed notes only. ## Loop -1. Start with the compact router. +1. Start with the compact router through `workspace-startup`. 2. Preserve the returned `module_slot`, `preferred_cli`, `forbidden_actions`, `proof_required`, and `completion_claim_allowed`. 3. Move to the owning module slot only when the current packet routes there. 4. Use the module's preferred CLI before raw files. @@ -54,8 +85,23 @@ Use it to keep module ownership visible while preserving compact CLI-first opera When the router or task shape supports an answer-directly/no-artifact outcome, do not create planning, Memory, review, or docs artifacts just to show work. State the answer and the proof or limitation. +## Optional Work-Shape Pre-Study + +Use `work_shape_study` only when a concrete missing evidence class can change the Planning form. Planning custody and known artefact shape are separate decisions: custody may be required while shape-specific creation and product edits remain blocked. + +1. Skip study when available evidence already supports one shape without material ambiguity. +2. When referenced intent, parent/child relationships, lane membership, or conflicting Planning is unresolved, run only the named safe probes. +3. Keep the budget to direct references and one-hop shape evidence. Stop when one shape is sufficiently supported. +4. If materially different shapes remain plausible after cheap evidence is exhausted, route `needs-human-decision`; never default to a regular execplan. +5. Preserve observed evidence, inference, missing/unavailable evidence, freshness bindings, selected shape, artefact route, and next action in the compact packet. +6. Compile useful state into the selected Planning owner or `continuation_capsule.work_shape_seed`, then retire the study packet. It is disposable seed state, not proof or parallel authority. + +Evaluate activation by total successful-completion cost. Compare clear skip, shape-changing study, and apparent uncertainty that resolves without broadening. Report study cost separately from downstream savings, including rereads, refreshes, artefact conversion/cleanup, proof reruns, clarification loops, AW invocations, and unavailable elapsed evidence. Do not activate from task length, title keywords, branch name, file count, or opaque complexity scores. + ## Guardrails +- Do not replace structured packets with prompt-prose keyword matching. +- Do not make all messages short when proof or residue requires detail. - Do not let one module absorb another module's ownership. - Do not put active sequencing in Memory. - Do not put durable repo facts only in a plan closeout. diff --git a/.agentic-workspace/skills/workspace-proof-selection/SKILL.md b/.agentic-workspace/skills/workspace-proof-selection/SKILL.md index ea2945a..f2b12b7 100644 --- a/.agentic-workspace/skills/workspace-proof-selection/SKILL.md +++ b/.agentic-workspace/skills/workspace-proof-selection/SKILL.md @@ -1,13 +1,13 @@ --- name: workspace-proof-selection -description: Select proof that matches the task, slice, lane, or epic before claiming completion. Use when validation evidence, skips, warnings, retries, crashes, or negative proof need to be interpreted separately from whether the requested intent is satisfied. +description: Select and interpret proof for a routed claim level. Use when validation evidence, skips, warnings, retries, crashes, or negative proof need proof-specific interpretation. --- # Workspace Proof Selection This is a package-managed workspace skill installed under `.agentic-workspace/skills/`. -Use it to choose and interpret proof before closeout. It is not a test-running checklist; it is the decision layer that says what evidence is meaningful for the claim being made. +Use it after the main AW operating skill or compact router points at proof selection. It is not a test-running checklist or a general completion policy; it decides what evidence is meaningful for the claim being made. ## Workflow @@ -17,10 +17,10 @@ Use it to choose and interpret proof before closeout. It is not a test-running c - lane - epic - regression guard -2. Read the structured proof route before broad inspection: - - `agentic-workspace implement --changed <paths> --format json` when changed paths are known - - `agentic-workspace proof --changed <paths> --format json` for proof-only selection - - `agentic-workspace summary --format json` when an active plan or lane determines the claim level +2. Read the structured proof route before broad inspection using the configured AW invocation: + - `implement --changed <paths> --format json` when changed paths are known + - `proof --changed <paths> --format json` for proof-only selection + - `summary --format json` when an active plan or lane determines the claim level 3. Select proof for both behavior and intent: - command success for changed behavior - targeted tests for the touched surface @@ -36,9 +36,10 @@ Use it to choose and interpret proof before closeout. It is not a test-running c - `not_run` - `incomplete` - `negative_proof_found` -5. Decide whether completion is allowed separately from command status: - - `completion_claim_allowed=true` only when the proof covers the actual claim level and requested intent - - `completion_claim_allowed=false` when proof is missing, stale, too narrow, skipped without justification, or contradicts the intended outcome +5. Report proof adequacy separately from completion permission: + - proof can support the claim level only when it covers the changed behavior and requested intent + - proof is insufficient when it is missing, stale, too narrow, skipped without justification, or contradicts the intended outcome + - completion permission still belongs to the routed closeout/claim boundary, not this subskill alone 6. Route gaps instead of hiding them: - run the missing focused proof - narrow the completion claim to a slice diff --git a/.agentic-workspace/skills/workspace-setup-jumpstart/SKILL.md b/.agentic-workspace/skills/workspace-setup-jumpstart/SKILL.md index e846ba4..b828aa9 100644 --- a/.agentic-workspace/skills/workspace-setup-jumpstart/SKILL.md +++ b/.agentic-workspace/skills/workspace-setup-jumpstart/SKILL.md @@ -1,34 +1,34 @@ --- name: workspace-setup-jumpstart -description: Route newly installed or adopted Agentic Workspace in a lived-in repo through bounded setup and jumpstart discovery before seeding durable surfaces. +description: Guide bounded post-bootstrap setup for newly installed or adopted Agentic Workspace in a lived-in repo after the main AW operating skill routes to setup jumpstart. --- # Workspace Setup Jumpstart -Use this skill when Agentic Workspace was newly installed or adopted in a lived-in or mature repo and the task is to populate, seed, or orient workspace surfaces after bootstrap. +Use this subskill when Agentic Workspace was newly installed or adopted in a lived-in or mature repo and the task is to populate, seed, or orient workspace surfaces after bootstrap. +This subskill assumes the main AW operating skill or compact router has already selected the AW invocation and routed here. ## Route -1. Run `agentic-workspace start --target . --task "<task>" --format json`. -2. Run `agentic-workspace setup --target . --format json` for bounded post-bootstrap setup guidance. -3. Treat setup as pre-write and pre-seed discovery. Do not bulk-import docs, backlog, or prose. -4. Inspect only surfaces named by setup output, by the task, or by a durable mature-repo jumpstart memory note. -5. Promote only: +1. Run the configured invocation with `setup --target . --format json` for bounded post-bootstrap setup guidance. +2. Treat setup as pre-write and pre-seed discovery. Do not bulk-import docs, backlog, or prose. +3. Inspect only surfaces named by setup output, by the task, or by a durable mature-repo jumpstart memory note. +4. Promote only: - durable operating knowledge to Memory; - bounded follow-up to Planning; - evidence-backed friction to repo-friction or improvement intake; - low-confidence or generic findings to transient report only. -6. Before writing seed surfaces, check promotion criteria in `docs/setup-findings-contract.md` and the durable candidate rule in `docs/jumpstart-contract.md`. +5. Before writing seed surfaces, check promotion criteria in `docs/setup-findings-contract.md` and the durable candidate rule in `docs/jumpstart-contract.md`. ## Required Seed Surfaces When the task is to populate durable workspace surfaces after bootstrap, handle these files explicitly: - `.agentic-workspace/OWNERSHIP.toml`: keep package-managed module roots, managed surfaces, fences, and authority surfaces generic; add host-specific `[[subsystems]]` only from inspected repo structure, test commands, ownership boundaries, or clear user direction. Do not copy subsystem entries from the Agentic Workspace source repo into a host repo. -- `.agentic-workspace/system-intent/intent.toml`: run `agentic-workspace system-intent --target . --sync --format json` first, then refine only reviewable interpreted fields that are supported by named repo intent sources such as `README.md`, `SYSTEM_INTENT.md`, product docs, or explicit user direction. Do not mechanically summarize every source file. +- `.agentic-workspace/system-intent/intent.toml`: use the configured invocation with `system-intent --target . --sync --format json` first, then refine only reviewable interpreted fields that are supported by named repo intent sources such as `README.md`, `SYSTEM_INTENT.md`, product docs, or explicit user direction. Do not mechanically summarize every source file. - `.agentic-workspace/system-intent/subsystems.toml`: add scoped durable intent only for subsystem ids already declared in `.agentic-workspace/OWNERSHIP.toml [[subsystems]]`. Leave `subsystems = []` when no host subsystem boundary is clear. -- `.agentic-workspace/config.toml [assurance]`: run `agentic-workspace defaults --section assurance_onboarding --format json` before seeding assurance. Add proof profiles, requirements, or subsystem profiles only when an inspected host-owned source names the risk, requirement, evidence burden, proof route, or claim boundary. Subsystem profiles must use existing `.agentic-workspace/OWNERSHIP.toml [[subsystems]]` ids. -- `.agentic-workspace/verification/manifest.toml`: run `agentic-workspace defaults --section verification_onboarding --format json` before seeding Verification. Add protocols, scenarios, proof routes, bundles, or known gaps only when the host repo has a repeatable proof need that ordinary test or command selection does not already express. +- `.agentic-workspace/config.toml [assurance]`: use the configured invocation with `defaults --section assurance_onboarding --format json` before seeding assurance. Add proof profiles, requirements, or subsystem profiles only when an inspected host-owned source names the risk, requirement, evidence burden, proof route, or claim boundary. Subsystem profiles must use existing `.agentic-workspace/OWNERSHIP.toml [[subsystems]]` ids. +- `.agentic-workspace/verification/manifest.toml`: use the configured invocation with `defaults --section verification_onboarding --format json` before seeding Verification. Add protocols, scenarios, proof routes, bundles, or known gaps only when the host repo has a repeatable proof need that ordinary test or command selection does not already express. - `.agentic-workspace/verification/proof-strategy.toml`: seed only enum hints that the host repo explicitly owns. Do not summarize strategy prose or infer policy from filenames. Population rule: host repo values must be derived from the host repo. Package defaults may provide schema shape and managed-surface ownership, but not source-repo product intent, source-repo subsystem ids, source paths, proof commands, or issue references. diff --git a/.agentic-workspace/skills/workspace-startup/SKILL.md b/.agentic-workspace/skills/workspace-startup/SKILL.md index 4d99f0b..89c1370 100644 --- a/.agentic-workspace/skills/workspace-startup/SKILL.md +++ b/.agentic-workspace/skills/workspace-startup/SKILL.md @@ -1,22 +1,35 @@ --- name: workspace-startup -description: Orient through compact Agentic Workspace commands before opening raw planning, memory, or docs surfaces. +description: Use the main Agentic Workspace operating loop in an installed AW repo. Start from the configured compact router, preserve routed actions and proof boundaries, and load specialized AW skills only when routed. --- -# Workspace Startup +# Workspace Startup / Operating Loop -Use this skill when the task is about ordinary startup, task routing, config obligations, proof selection, closeout, or module boundaries in an installed Agentic Workspace repo. +Use this skill for ordinary AW startup, resume, changed-path implementation, proof approach, closeout, or routed fallback in an installed Agentic Workspace repo. +When Agentic Workspace is enabled, this is the canonical main operating skill. Advisory skill routing and `implementation_allowed` never bypass startup, Planning gates, proof, or closeout. -## Route +Do not use this as a broad manual. Load specialized AW subskills only when the compact router, task shape, or this skill names their narrower job. -1. Run `agentic-workspace start --target . --task "<task>" --format json` for ordinary first contact. -2. If changed paths are already known, run `agentic-workspace implement --target . --changed <paths> --format json`. -3. Run `agentic-workspace preflight --target . --format json` only for takeover, recovery, or uncertain state. -4. Run `agentic-workspace summary --target . --format json` when active work, planning, handoff, or continuation matters. -5. Run `agentic-workspace config --target . --format json` when local posture, configured obligations, startup file, or CLI invocation matters; use `--verbose` only when the tiny answer is insufficient. -6. Run `agentic-workspace proof --target . --changed <paths> --format json` before claiming validation. +## Configured Invocation -Open raw `.agentic-workspace/` files only after a compact command points there. +Use the configured AW invocation exposed by the repo adapter, config, or compact startup/config output. In an installed repo this may look like `agentic-workspace ...`; in a source checkout or dev-dependency install it may be a repo-local command. Do not prefer a bare selector when adapter/config names a different invocation. + +## Procedure + +1. Run the configured invocation with `start --target . --task "<task>" --format json` for ordinary first contact. +2. If changed paths are already known, run the configured invocation with `implement --target . --changed <paths> --task "<task>" --format json`. +3. Preserve `module_slot`, `next_safe_action`, `allowed_actions`, `forbidden_actions`, `proof_required`, and `completion_claim_allowed`. +4. Follow `next_safe_action` before opening raw `.agentic-workspace/` files or running drill-down commands. +5. Keep direct work direct when the router allows no-artifact work; do not create Planning, Memory, review, or handoff artifacts just to show work. +6. Load specialized subskills only for routed intent/shape, proof, setup, or fallback/reference needs. +7. Before claiming completion, reconcile intent, proof, residue, issue/PR closure, and next owner separately. + +## Subskill Routes + +- `workspace-intent-discovery`: ambiguous human intent, vague outcome prompts, or direct/bounded/lane/epic work-shape decisions. +- `workspace-proof-selection`: proof selection or interpretation for task, slice, lane, epic, skipped, warning, retry, crash, or negative evidence. +- `workspace-setup-jumpstart`: newly installed or adopted AW in a lived-in repo that needs bounded post-bootstrap seeding. +- `workspace-operating-loop` / `workspace-transition-gates`: reference support only when `module_slot`, `forbidden_actions`, preferred invocation fallback, or transition gate details need interpretation. ## Red Flags @@ -24,14 +37,14 @@ Red flag: I can inspect raw planning or memory files first because the request seems simple. Use instead: - Run `agentic-workspace start --target . --task "<task>" --format json`, or the known dedicated AW command when the request already names one, then follow `next_safe_action`. + Run the configured invocation with `start --target . --task "<task>" --format json`, or the known dedicated AW command when the request already names one, then follow `next_safe_action`. ## SkillSpec Pilot This skill is the hand-authored startup pilot for the `startup-router` SkillSpec contract in `src/agentic_workspace/contracts/skill_specs.json`. -- Preferred CLI: `agentic-workspace start --target . --task "<task>" --format json`. -- Interpreted fields: `immediate_next_allowed_action`, `next_safe_action`, `planning_safety_gate`, `skill_routing.preferred_routes`, and `detail_commands`. +- Preferred route: configured AW invocation with `start --target . --task "<task>" --format json`. +- Interpreted fields: `workflow_participation`, `immediate_next_allowed_action`, `next_safe_action`, `planning_safety_gate`, `skill_routing.preferred_routes`, and `detail_commands`. - Direct work: if compact startup does not require planning and proof is obvious, keep the work direct and avoid planning, review, Memory, or handoff artifacts. - Planning work: if `planning_safety_gate.implementation_allowed` is false, run the named planning command before implementation. - No-CLI fallback: read `.agentic-workspace/WORKFLOW.md` only far enough to preserve the same forbidden actions and no-artifact-by-default rule. diff --git a/.agentic-workspace/skills/workspace-transition-gates/SKILL.md b/.agentic-workspace/skills/workspace-transition-gates/SKILL.md index 48349d8..d82031c 100644 --- a/.agentic-workspace/skills/workspace-transition-gates/SKILL.md +++ b/.agentic-workspace/skills/workspace-transition-gates/SKILL.md @@ -1,13 +1,14 @@ --- name: workspace-transition-gates -description: Apply SkillSpec-backed gates to workspace transitions. Use when moving between startup, planning, implementation, proof, closeout, memory residue, or issue/PR routing and the agent needs explicit allowed actions, forbidden actions, preferred CLI, interpreted fields, and fallback behavior. +description: Reference SkillSpec-backed transition gates only when the main AW operating skill or compact router names allowed actions, forbidden actions, preferred invocation, interpreted fields, or fallback behavior that need interpretation. --- -# Workspace Transition Gates +# Workspace Transition Gates Reference This is a package-managed workspace skill installed under `.agentic-workspace/skills/`. -Use it to make workflow transitions inspectable instead of relying on ambient judgement. +Do not use it as an ordinary startup, implementation, proof, or closeout entrypoint. Start with `workspace-startup`; use this reference only when a routed transition packet needs explicit gate interpretation. +When AW is enabled, these gates are mandatory workflow boundaries. Advisory routing explains agent-owned choices inside the workflow; it is not permission to skip `start`, `implement`, Planning gates, proof, or closeout. Each gate is a compact SkillSpec-shaped record: @@ -24,16 +25,16 @@ Each gate is a compact SkillSpec-shaped record: ### Startup To Work - Trigger: first contact, takeover, or uncertain task shape. -- Preferred CLI: `agentic-workspace start --task "<task>" --format json`. -- Interpreted fields: `immediate_next_allowed_action`, `workflow_sufficiency`, `next_safe_action`, `skill_routing`. +- Preferred route: configured AW invocation with `start --task "<task>" --format json`. +- Interpreted fields: `workflow_participation`, `immediate_next_allowed_action`, `workflow_sufficiency`, `next_safe_action`, `skill_routing`. - Allowed: follow `next_safe_action.preferred_cli`, request a selector, or continue direct work when the packet says enough. -- Forbidden: open broad raw planning files before the compact summary when the packet forbids it. +- Forbidden: open broad raw planning files before the compact summary when the packet forbids it; treat advisory routing or `implementation_allowed` as a bypass around enabled-AW workflow participation. - Fallback: read `.agentic-workspace/WORKFLOW.md` and preserve forbidden actions. ### Work To Planning - Trigger: lane/epic shape, active planning pressure, durable sequencing, or issue-linked execution. -- Preferred CLI: `agentic-workspace summary --format json`, then Planning commands named by the packet. +- Preferred route: configured AW invocation with `summary --format json`, then Planning commands named by the packet. - Interpreted fields: active item, active execplan, continuation owner, stop conditions. - Allowed: create or continue the active planning artifact through package commands. - Forbidden: hand-edit planning state or claim completion from a local slice. @@ -42,7 +43,7 @@ Each gate is a compact SkillSpec-shaped record: ### Work To Proof - Trigger: changed paths are known or a completion claim is near. -- Preferred CLI: `agentic-workspace implement --changed <paths> --format json` or `agentic-workspace proof --changed <paths> --format json`. +- Preferred route: configured AW invocation with `implement --changed <paths> --format json` or `proof --changed <paths> --format json`. - Interpreted fields: required commands, proof burden, acceptance guidance, completion-claim boundary. - Allowed: run the selected narrow proof and classify gaps. - Forbidden: substitute passing commands for intent satisfaction. @@ -51,7 +52,7 @@ Each gate is a compact SkillSpec-shaped record: ### Work To Memory Residue - Trigger: repeated correction, durable lesson, closeout residue, or improvement signal. -- Preferred CLI: `agentic-workspace memory route --files <paths...> --format json`, `agentic-workspace memory promotion-report --mode remediation --format json`. +- Preferred route: configured AW invocation with `memory route --files <paths...> --format json` or `memory promotion-report --mode remediation --format json`. - Interpreted fields: `memory_consultation_status`, `durable_residue_decision`, `improvement_signal_status`. - Allowed: capture only durable anti-rediscovery knowledge or route to the owning surface. - Forbidden: write task logs, plan history, or one-off chat residue to Memory. diff --git a/.agentic-workspace/skills/workspace-work-shape/SKILL.md b/.agentic-workspace/skills/workspace-work-shape/SKILL.md index 1799cea..8641ccb 100644 --- a/.agentic-workspace/skills/workspace-work-shape/SKILL.md +++ b/.agentic-workspace/skills/workspace-work-shape/SKILL.md @@ -1,26 +1,34 @@ --- name: workspace-work-shape -description: Classify work shape and route direct, bounded, lane, or epic work before implementation. +description: Reference the direct, bounded, lane, and epic vocabulary only when workspace-intent-discovery or compact routing needs work-shape details interpreted. --- -# Workspace Work Shape +# Workspace Work Shape Reference -Use this skill before implementation when task size, proof cost, handoff needs, or the user's intended outcome are unclear. +Do not use this as an independently invoked subskill. `workspace-intent-discovery` owns the merged intent/shape procedure after the main AW operating skill routes there. +When AW is enabled, this reference preserves the same routed workflow boundary as the main skill; it does not make work-shape judgment a bypass around startup, planning or proof gates. -## Route +This reference exists so compact output, reviews, or issue discussions can name the work-shape vocabulary without reloading the full intent protocol. -1. Run `agentic-workspace start --target . --task "<task>" --format json`. -2. If changed paths are known, run `agentic-workspace implement --target . --changed <paths> --format json`. -3. Run `agentic-workspace preflight --target . --format json` only for takeover, recovery, or uncertain state. -4. For vague outcome prompts, resolve the intended outcome before naming a solution: - - What user-visible failure or cost should be reduced? - - What would count as satisfaction? - - Which repo-visible surface should preserve that intent for the next pass? -5. Classify the request as `direct`, `bounded`, `lane`, or `epic`. -6. For `direct` work, keep workspace overhead minimal and prove with the obvious narrow command. -7. For `bounded` work, use compact planning or proof output when continuation, risk, or non-obvious validation matters. -8. For `lane` or `epic` work, stop before coding and create or continue checked-in Planning state. +## Vocabulary -## Output +- `direct`: target and proof are obvious; answer or edit with the narrowest proof and no durable artifact unless routed. +- `bounded`: finite implementation with meaningful proof, continuation, or issue-linkage risk; use compact implement/proof routing. +- `lane`: multi-slice or issue-lane work; checked-in Planning state owns sequencing before implementation. +- `epic`: multiple lanes, high assurance, or unclear decomposition; shape before implementation. -Report the inferred intended outcome, the shape, why that shape fits, the first repo-visible surface to inspect or update, the satisfaction evidence, the required next command, and whether Planning state is optional, recommended, or required. +## External Reporting Targets + +Use this as an agent checklist, not as runtime keyword policy. Issue or PR references used only as comment, report, reply, evidence-hub, or follow-up destinations are context for the current communication task. Do not treat those refs as implementation issue scope or multi-issue lane evidence by themselves. + +When a task mixes an implementation issue with a reporting target, separate them before judging shape: + +- implementation refs may carry issue scope and proof obligations; +- reporting target refs identify where to post, edit, or read a comment; +- the agent still owns the final direct/bounded/lane judgment from action safety, source impact, proof burden, and closure claims. + +Do not implement this distinction with hardcoded prompt/prose keyword matching in AW runtime. Runtime may expose neutral refs, structured PR refs, changed paths, active Planning state, and proof facts; the semantic split belongs to this checklist and agent judgment. + +## Reference Output + +When this reference is explicitly requested, report the inferred intended outcome, work shape, why that shape fits, the first repo-visible surface to inspect or update, satisfaction evidence, required next route, and whether Planning state is optional, recommended, or required. diff --git a/AGENTS.md b/AGENTS.md index 6109134..6179114 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -8,19 +8,27 @@ Authority marker: - refresh_command: null <!-- agentic-workspace:workflow:start --> +Use the main Agentic Workspace operating skill: `.agentic-workspace/skills/workspace-startup/SKILL.md`. + +Invocation rule: +1. Use `.agentic-workspace/config.local.toml` `[workspace].cli_invoke` when present. +2. Otherwise use `.agentic-workspace/config.toml` `[workspace].cli_invoke`. +3. Otherwise use the package default `agentic-workspace`. +4. If no CLI invocation works, read `.agentic-workspace/WORKFLOW.md` before other workspace files. + Ordinary route: -1. Use `uv run agentic-workspace start --task "<task>" --format json` before non-trivial answers, edits, read-only workflow, config, delegation, or action-safety decisions. -2. Use `uv run agentic-workspace implement --changed <paths> --task "<task>" --format json` when changed paths are already known. +1. Run `<configured AW invocation> start --target . --task "<task>" --format json` before non-trivial answers, edits, read-only workflow, config, delegation, or action-safety decisions. +2. Run `<configured AW invocation> implement --target . --changed <paths> --task "<task>" --format json` when changed paths are already known. 3. Follow `next_safe_action`, `action_signals`, and `skills` before opening raw `.agentic-workspace` files or running drill-down commands. -4. When implementing an issue, satisfy the intended end state in the ordinary path; ask for clarification instead of closing with a partial path when the full outcome appears larger than the issue safely permits. +4. Use the returned `communication_contract` for decision-first, evidence-backed, compact output; expand only for its safety/proof/detail triggers. +5. When implementing an issue, satisfy the intended end state in the ordinary path; ask for clarification instead of closing with a partial path when the full outcome appears larger than the issue safely permits. Boundaries: -- The effective invocation comes from `.agentic-workspace/config.toml` `[workspace].cli_invoke`; `.agentic-workspace/config.local.toml` may override it. - Known dedicated Agentic Workspace commands are allowed only when the request maps directly to that command and no takeover, recovery, active-planning, or ambiguous safety decision is needed first. -- Do not try a bare `agentic-workspace` command first when the effective invocation names a repo-local or dev-dependency command; PATH may resolve a stale installed selector. +- Do not bake machine-local AW invocation paths into checked-in generic guidance; concrete commands come from the configured invocation or live router output. +- Treat checked-in `.agentic-workspace/skills` and module skill trees as required operating surfaces, not optional payload mirror content. - Treat `preflight`, `config`, `defaults`, `skills`, `modules`, `ownership`, and `report` as routed drill-down or recovery surfaces, not the ordinary startup loop. - Report repo-relative paths, not local absolute paths. -- If the effective CLI is unavailable after trying it, immediately read `.agentic-workspace/WORKFLOW.md` before any other files. <!-- agentic-workspace:workflow:end --> ## Release discipline diff --git a/uv.lock b/uv.lock index dfb994d..b554a93 100644 --- a/uv.lock +++ b/uv.lock @@ -4,30 +4,31 @@ requires-python = ">=3.11" [[package]] name = "agentic-memory" -version = "0.6.2" -source = { git = "https://github.com/rickardvh/agentic-workspace.git?subdirectory=packages%2Fmemory&branch=master#a1e86965601f1cc3f0b9387c2724915f1755bab0" } +version = "0.33.7" +source = { git = "https://github.com/rickardvh/agentic-workspace.git?subdirectory=packages%2Fmemory&branch=master#b86db0a02e3c5075e9e4220826c5ffe199f3629d" } [[package]] name = "agentic-planning" -version = "0.6.2" -source = { git = "https://github.com/rickardvh/agentic-workspace.git?subdirectory=packages%2Fplanning&branch=master#a1e86965601f1cc3f0b9387c2724915f1755bab0" } +version = "0.33.7" +source = { git = "https://github.com/rickardvh/agentic-workspace.git?subdirectory=packages%2Fplanning&branch=master#b86db0a02e3c5075e9e4220826c5ffe199f3629d" } dependencies = [ { name = "jsonschema" }, ] [[package]] name = "agentic-verification" -version = "0.6.2" -source = { git = "https://github.com/rickardvh/agentic-workspace.git?subdirectory=packages%2Fverification&branch=master#a1e86965601f1cc3f0b9387c2724915f1755bab0" } +version = "0.33.7" +source = { git = "https://github.com/rickardvh/agentic-workspace.git?subdirectory=packages%2Fverification&branch=master#b86db0a02e3c5075e9e4220826c5ffe199f3629d" } [[package]] name = "agentic-workspace" -version = "0.6.2" -source = { git = "https://github.com/rickardvh/agentic-workspace.git?branch=master#a1e86965601f1cc3f0b9387c2724915f1755bab0" } +version = "0.33.7" +source = { git = "https://github.com/rickardvh/agentic-workspace.git?branch=master#b86db0a02e3c5075e9e4220826c5ffe199f3629d" } dependencies = [ { name = "agentic-memory" }, { name = "agentic-planning" }, { name = "agentic-verification" }, + { name = "jsonschema" }, ] [[package]] @@ -170,196 +171,182 @@ wheels = [ [[package]] name = "rpds-py" -version = "2026.5.1" +version = "2026.6.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459, upload-time = "2026-05-28T12:02:13.232Z" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/2a/9618a122aeb2a169a28b03889a2995fe297588964333d4a7d67bdf46e147/rpds_py-2026.6.3.tar.gz", hash = "sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4", size = 64051, upload-time = "2026-06-30T07:17:53.009Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609, upload-time = "2026-05-28T11:58:50.78Z" }, - { url = "https://files.pythonhosted.org/packages/b6/95/f8203fd997484b1690a6869cd0e503b6c3c6be55b0ecc36d1a491fe742f0/rpds_py-2026.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99ab6ba7bfa2cb0f96a04e3652355bf04e3f51aceb1e943b8541dab7ba4828cc", size = 348460, upload-time = "2026-05-28T11:58:52.374Z" }, - { url = "https://files.pythonhosted.org/packages/33/8c/b47326ad2f0be545a5e5c1a55937a12afaea7d392ba2837bb9680f57e6c9/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0efbe45632665e53e3db8fe1e5692db58fc5cb9bab4459d570b83efefe11164", size = 381031, upload-time = "2026-05-28T11:58:53.775Z" }, - { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121, upload-time = "2026-05-28T11:58:55.243Z" }, - { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026, upload-time = "2026-05-28T11:58:56.788Z" }, - { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865, upload-time = "2026-05-28T11:58:58.298Z" }, - { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012, upload-time = "2026-05-28T11:58:59.589Z" }, - { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111, upload-time = "2026-05-28T11:59:01.104Z" }, - { url = "https://files.pythonhosted.org/packages/d8/34/5bb334a5a0f65d77869217c4654f34c78a7d11b93938a3c076a2edeafc52/rpds_py-2026.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe71bca7d547acb17027c7fd1624ff8aae623499c498d3e7011182c4de5c25e0", size = 409225, upload-time = "2026-05-28T11:59:02.433Z" }, - { url = "https://files.pythonhosted.org/packages/16/0f/007ec21283b5b040b4ec3bd95e0402591e22bfa7d5c93dfe01c465c2d2d7/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05fa4f41f37ec97c9c260441a940450a192f78d774d2b097eee1379f1e1246a", size = 556487, upload-time = "2026-05-28T11:59:04.012Z" }, - { url = "https://files.pythonhosted.org/packages/ff/10/5437c94508169b6b22d8418fef7a66e9ffb5f3b9e9c94460f2eedafe06ff/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df1d2a1996755b24b9ecee92cb4d36c28f86f464a6a173349c26bab41e94b8c2", size = 620798, upload-time = "2026-05-28T11:59:05.485Z" }, - { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053, upload-time = "2026-05-28T11:59:06.837Z" }, - { url = "https://files.pythonhosted.org/packages/6c/31/750617dd0ae1752471bf43f9e41d263398fae7cde7849d23b8574a70e617/rpds_py-2026.5.1-cp311-cp311-win32.whl", hash = "sha256:3684a59b158a7683aaeb8e25352e9a9dd2122cec78f2d8530266e4f91b4c7b3f", size = 214390, upload-time = "2026-05-28T11:59:08.402Z" }, - { url = "https://files.pythonhosted.org/packages/3c/bb/3dcab0e1d9516303f2eb672a5d6f62eca5a69e2886301e9c8c54b520c39b/rpds_py-2026.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:7bd530e6a530bb3ea892f194fafa455f3516ac25ecf7143fd33c09be62b0470a", size = 231097, upload-time = "2026-05-28T11:59:09.786Z" }, - { url = "https://files.pythonhosted.org/packages/49/d6/c6bbf5cb1cf12b9732df8074b57f6ef8341ba884c95d40632ae8bddb44e4/rpds_py-2026.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:0a5ae4dbe43c1076983b72616496919872ae7bbe7a1e21cc48336bc3154d130b", size = 226361, upload-time = "2026-05-28T11:59:11.079Z" }, - { url = "https://files.pythonhosted.org/packages/d4/e7/a78582dc57caa592dcc7d4fb69b61390561e908eb3d2f5df5928a8e354c0/rpds_py-2026.5.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3abe24a66e57adcfa645d718063a5fa5103ecc71ddbf26d78af8f9368018ff1d", size = 353040, upload-time = "2026-05-28T11:59:12.531Z" }, - { url = "https://files.pythonhosted.org/packages/a3/43/35e3f136343aef451e545ce8c38d36c2f93c0ed88703db8b64ba2b205c68/rpds_py-2026.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b1d94308ddf0b1982f61f2eb54bf92997c9ece8a8093ef014250f4a517906c", size = 345775, upload-time = "2026-05-28T11:59:13.827Z" }, - { url = "https://files.pythonhosted.org/packages/20/e1/0f2160c5982d3157734d5cb3ed63d8b2d583a73c9864f77b666449f32cf8/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa92420128dadce7f54bd73ba1825a273e9268fe9e35dbf7e6362890efa4e08", size = 376329, upload-time = "2026-05-28T11:59:15.271Z" }, - { url = "https://files.pythonhosted.org/packages/d0/11/ee0ba42aff83bf4effdbc576673c6be64c5e173978c3f6d537e94482f77d/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca653c6546386227cd9800d1bef6a348099acf8db4250341da6d90f663d6dfcb", size = 383539, upload-time = "2026-05-28T11:59:16.665Z" }, - { url = "https://files.pythonhosted.org/packages/11/df/d94aa6a499d4ac40afe2d7620f2c597fd3c0f182e854ad7cf3f596a81cb6/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66c93681c4729e4e3ecba31b8179fae083ff3118841672835140338b4b9867c1", size = 494674, upload-time = "2026-05-28T11:59:17.991Z" }, - { url = "https://files.pythonhosted.org/packages/1f/75/33d30f43bb2f458de11979486a591b1bf6e5651765ed1704c6197c2dc773/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ff257542e04796880e011e15cd4dc21c2599975df2aaa8f2c8495ca574e1a5", size = 389268, upload-time = "2026-05-28T11:59:19.434Z" }, - { url = "https://files.pythonhosted.org/packages/f4/1e/2c9096fc19d5fd084b0184ca2b651e659aa0a37e6fdbecf6ece47f147fe1/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6825cc329b290e93c5f6a9be2393118a763f6ccf6abd83704e0c102ca583644", size = 376280, upload-time = "2026-05-28T11:59:21Z" }, - { url = "https://files.pythonhosted.org/packages/b9/e5/61ec9f8be8211ea7f48448195549e4aaf02004083475493b0e137702ecb2/rpds_py-2026.5.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:de42116e69cb53b911cc34aee5ab98f36c597b822545045d49e938818b99e5e4", size = 387233, upload-time = "2026-05-28T11:59:22.454Z" }, - { url = "https://files.pythonhosted.org/packages/0d/ca/bcec1005c4f4a234f92a29078631fee49206c7265ccae966f18fd332e80e/rpds_py-2026.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0f920015df2a504bebaba6d4c31ccf3fcf942f92655c086da30b671aad19aa6", size = 405009, upload-time = "2026-05-28T11:59:23.845Z" }, - { url = "https://files.pythonhosted.org/packages/72/e6/4d5718c5cf26c522dc7c9999e238da1e77380b81d0c5d1df11e271ddfeb1/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0408a24e44feb919423dc6d9da677cb5cddb894d2ca9e763967d156d9c60fab4", size = 553113, upload-time = "2026-05-28T11:59:25.184Z" }, - { url = "https://files.pythonhosted.org/packages/d4/25/2ee807bdb3e1f0b7eddf7782acd5665a8b5205a331a7d7244a52c4812fd9/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cea68bcd53467561ae2f96a6bdad1544299ba97b5b0ddcd5ac3d376e5c781c24", size = 618838, upload-time = "2026-05-28T11:59:26.749Z" }, - { url = "https://files.pythonhosted.org/packages/6a/c1/7d4c26f167f8c41501cc073d30ee22082b16ce358cf5b00ec97cbc7804ea/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4be8b1d2a705cc37d08256004e1d07de143fa0075c8e85a3df020b776f62b732", size = 582436, upload-time = "2026-05-28T11:59:28.11Z" }, - { url = "https://files.pythonhosted.org/packages/04/1d/9d12b0a337bab46f4769f8857f4007e3b2d639e14f9a44a0efe157696e64/rpds_py-2026.5.1-cp312-cp312-win32.whl", hash = "sha256:6736718bd4fc49cbcb538ba30516fdbef161522acefb739657d48b97bd864fed", size = 212734, upload-time = "2026-05-28T11:59:29.689Z" }, - { url = "https://files.pythonhosted.org/packages/c5/93/e4116f2de7f56bc7406a76033dc501811ddeb22b7f056b92d632871ebb0c/rpds_py-2026.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:0a7d1eec967df0e9b22614a5e177622e0c89611d03727fa0cb48e45028907870", size = 229045, upload-time = "2026-05-28T11:59:31.033Z" }, - { url = "https://files.pythonhosted.org/packages/cb/53/6c3419d85eb2ec5938a37627c585b42d76a63bb731d6e42ed4b079ebf486/rpds_py-2026.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1841d067089e117142d79b98aa0df2f08b52f2ecc1819dd2700636c0db74a473", size = 223967, upload-time = "2026-05-28T11:59:32.318Z" }, - { url = "https://files.pythonhosted.org/packages/6c/32/14c961ad295f490eb0849ada8b79683e93a59b9de3afdd983eaf55fa6867/rpds_py-2026.5.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:efef4ac29c6ff495531eb17ee705b62841ecaa291b7c7077e848ea03e237164d", size = 352787, upload-time = "2026-05-28T11:59:33.655Z" }, - { url = "https://files.pythonhosted.org/packages/ca/bb/d1b85117967c11191441a7274ae616c65d93901d082c588f89a50a8da5ae/rpds_py-2026.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c39f5b67a8a2e67179ada2a954227d670fe65fa9098457f698f56ddf248709b3", size = 345179, upload-time = "2026-05-28T11:59:35Z" }, - { url = "https://files.pythonhosted.org/packages/7c/46/d84105f062e626a1b233f863907288a4708c2d833b8b4c6fb2764bc080c0/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5c30f3f04eef4fbd362226a6f31d7c8895ca4fbb6e0b790f6890a98d8da8559", size = 376173, upload-time = "2026-05-28T11:59:36.43Z" }, - { url = "https://files.pythonhosted.org/packages/e2/ae/469d7959ce5b1201e1de135dc735b86db3b35dd0d1734f6a44246d5f061c/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:277f6c82f0580848796c7ecc8a7173aa3bfb928e4ff831261c2f60a81dc270db", size = 383162, upload-time = "2026-05-28T11:59:37.995Z" }, - { url = "https://files.pythonhosted.org/packages/dc/a2/57853d31a1116a561aa072794602ad3f6341e18d70a8523f1bd5b9fc1e5a/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63c2c4c213f1a4e3f3de28ecab029dbdee976324e729c0d7a55211be72576b02", size = 495093, upload-time = "2026-05-28T11:59:39.453Z" }, - { url = "https://files.pythonhosted.org/packages/99/63/3a8eabcad9314b7daf5c65f451d2c33d989235cd8a5762186cf2c3f5a4f8/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3350ec808fb538fe71a1f94dfaa0e29c598dfad805ce49f0caec5ae3183c652b", size = 389829, upload-time = "2026-05-28T11:59:40.896Z" }, - { url = "https://files.pythonhosted.org/packages/4b/25/05678d97fc25e2622df14dc530fb82023174ecfff6733991ed0d78f167bd/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1b964e3ab599e718dc46c018d104b1ebc007cbc6567d827c94a687fca56d77e", size = 374786, upload-time = "2026-05-28T11:59:42.626Z" }, - { url = "https://files.pythonhosted.org/packages/88/d1/8c90b6431e80a3b91b284a5c7c8c0c4f9c006444d90477a740d6e0f9c694/rpds_py-2026.5.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:19cb09fab7b7fc96b2a6e28f2e34b72a3705ff27b37edb77455316e5d3f3dc9b", size = 386920, upload-time = "2026-05-28T11:59:44.124Z" }, - { url = "https://files.pythonhosted.org/packages/ff/99/4638f672ab356682d633ee0da9255f5b67ce6efd0b85eb94ad3e255e65a5/rpds_py-2026.5.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abe76bcdba31e576cb83eeb8797aa0d882b738fef6dc65d0601fc753806a5b46", size = 405059, upload-time = "2026-05-28T11:59:47.177Z" }, - { url = "https://files.pythonhosted.org/packages/66/3f/3546524b6eb4cc2e1f363a3d638fa52f6c24faae3500c25fb488b02f1740/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8bff7073db3899158fff55ebf57b113a67030af26f80a18978f9f0aa60250ddf", size = 553030, upload-time = "2026-05-28T11:59:48.603Z" }, - { url = "https://files.pythonhosted.org/packages/c6/c3/7b3388c796fcf471bd17194242d4dc1a7608567c0fa422bcc1c5e79f9c1e/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8ba264fa49be666cd9cc56bf34ec7002fb3d27a4aee5bcb4d43d0d18feb1bb6f", size = 618975, upload-time = "2026-05-28T11:59:50.314Z" }, - { url = "https://files.pythonhosted.org/packages/61/1e/a3cb07f2795075d1d88efddae2f541359fde5f08c81ee114c29c2949c90a/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4860b603ddda0475a8885499b3729e90229d480105b42651962a5397d995fa89", size = 581178, upload-time = "2026-05-28T11:59:51.673Z" }, - { url = "https://files.pythonhosted.org/packages/a1/74/e758c03a5ef46f04c37f2651a2893db846d569ba8a7bca469d4b58939bcd/rpds_py-2026.5.1-cp313-cp313-win32.whl", hash = "sha256:7944270ae71383f6e2657dd7d5ce4eeb4ac2d0059a6738f0510583d462ab4842", size = 212481, upload-time = "2026-05-28T11:59:53.148Z" }, - { url = "https://files.pythonhosted.org/packages/70/ec/a2aca432db9c7359b40fa393eeeaa0d166c2f70175be956e75fa24197c44/rpds_py-2026.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:88647f43a73c4e01be19b04ceef0c8d3a1958153604d13c773becd8016f2a0cf", size = 228519, upload-time = "2026-05-28T11:59:54.505Z" }, - { url = "https://files.pythonhosted.org/packages/29/60/a73bfdd45b096574556acf303bbd9fa9eed36ca8a818b514e2a5d5fe2b9d/rpds_py-2026.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:453895624ecf7db7063b1004e44037522bbaef9ff6a945e59bc71662d7a03abd", size = 223446, upload-time = "2026-05-28T11:59:56.081Z" }, - { url = "https://files.pythonhosted.org/packages/18/e2/408105fd611823f00882aea810f3989a30d26b1bab8b6beb20f98c724e0e/rpds_py-2026.5.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:b4e4bc98639ec915f512fde3aa7a95e0041d95d9c3cc86eea841fa63cb1e8600", size = 355287, upload-time = "2026-05-28T11:59:57.448Z" }, - { url = "https://files.pythonhosted.org/packages/8d/58/5c4a43436843c90d0f6d19f82c200c80e3843ca9fa07b237623327f6d384/rpds_py-2026.5.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cacedb7a6e167680acba45ad5716e89067d225dc80da0d7040cae8c81d4572fa", size = 347033, upload-time = "2026-05-28T11:59:58.881Z" }, - { url = "https://files.pythonhosted.org/packages/fb/c2/1a71acdacaf4e259b10278fb87b039ded3cf80041bcd89dd8a3ea702ded6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68700371c5d7ae1412862ddfa719090925c93ecf351c566d66f09d04b136ea00", size = 376891, upload-time = "2026-05-28T12:00:00.516Z" }, - { url = "https://files.pythonhosted.org/packages/c2/c8/535f3d9b65addd8e28aa87b83c6e526799c3717a88273db8ea795beeef7a/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:296c799becfa849c779c8725494fe9ed94959ed886787df4364b058465bad7f0", size = 385646, upload-time = "2026-05-28T12:00:02.394Z" }, - { url = "https://files.pythonhosted.org/packages/1c/91/dc033f313345c354ade914dbe73cdb90b615a4409ea02430d5356794f3d8/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3858b908218ee108d0bbfb2095ccc237648053c9bf98affad7cb079acaf1d97", size = 498830, upload-time = "2026-05-28T12:00:04.189Z" }, - { url = "https://files.pythonhosted.org/packages/27/fc/90fcbea459dbb8ddc18a2e0fd1de9412b48bc84ffff2db771cf714bacfd6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4fb8d2e7cb2f850b169806d61d1b991738acec96500a75c30f49caf064ce7cef", size = 392830, upload-time = "2026-05-28T12:00:05.797Z" }, - { url = "https://files.pythonhosted.org/packages/b2/1d/46cd11a228c9750684a798d98f878be6f614aa762438da7378f035e79e35/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b74c10ed6a8f190f4287f53bcfea348b92a84a9c9f70d30183d1e6172d580d", size = 379613, upload-time = "2026-05-28T12:00:07.433Z" }, - { url = "https://files.pythonhosted.org/packages/24/4a/d9b0c6af3a1de03eb93741bbe8be2bdce84d8fda8224f3005451d86df389/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:b9a6528956191c48c52294a592dbd4a8386d7048bdb25c0efcb6b966466c6d83", size = 388183, upload-time = "2026-05-28T12:00:09.227Z" }, - { url = "https://files.pythonhosted.org/packages/c5/b4/db7aaabdda6d020afc87d981bcc2f57a434c7dec60ecfc2ab3dd50b20351/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:af03e34e860047bc7a352b842856fcf78798fbb81132cc98bd2f907ab4eb9cd2", size = 408578, upload-time = "2026-05-28T12:00:10.779Z" }, - { url = "https://files.pythonhosted.org/packages/08/d6/070f6a41cbb343e2ac4171859bf3f3623e0ab002f72619d6d505313ec2de/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fea6e836d10abbe191d557d33bd58bd5987725fe63aa1eefe557d230209855bd", size = 553573, upload-time = "2026-05-28T12:00:12.443Z" }, - { url = "https://files.pythonhosted.org/packages/75/ab/1a71ea3589c4345dac0a0518f0e6a031cb42689277851b683c46d27463a5/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:fc0c0f878ea770a0a8a462456c5ad36fc9fe6358e6b76fdadc7f17575e0b8bf1", size = 620861, upload-time = "2026-05-28T12:00:14.09Z" }, - { url = "https://files.pythonhosted.org/packages/8a/22/9bf80a56069c0c443fcfefac639a86a744550a2898817a6dfd3e26654924/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e0b360f316d966b048b085857630b3cc51f3db2f07b06f440eac8f695374d1e3", size = 585633, upload-time = "2026-05-28T12:00:15.66Z" }, - { url = "https://files.pythonhosted.org/packages/da/68/3b2c0a75c9e04125696f84ebdbbf304acf5a40b58ba4481cdb98a922c3ba/rpds_py-2026.5.1-cp313-cp313t-win32.whl", hash = "sha256:a2999883eedf72fdfb7520b92c7d4ec2572a71ff40239377aa604cc529eecafc", size = 210074, upload-time = "2026-05-28T12:00:17.291Z" }, - { url = "https://files.pythonhosted.org/packages/e7/8b/609157d5a25d37d4f29f92840ba531f416907c34ae5c5739dd21fc2bef98/rpds_py-2026.5.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e07be2a9d7122bd6e82dea89814ef8dc893feb1aae97fec1630f3263bbb30e55", size = 228635, upload-time = "2026-05-28T12:00:18.73Z" }, - { url = "https://files.pythonhosted.org/packages/d4/6f/19c1918a4b590d8de87e712e4abe4b3875771eff60216fb6153cf6665c68/rpds_py-2026.5.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:1f2c391c3059798093b65df23aca2cac150460ae9c630d99dec83d703d9485b9", size = 349756, upload-time = "2026-05-28T12:00:20.217Z" }, - { url = "https://files.pythonhosted.org/packages/e5/60/a06fe7da34eca79dacbf958a2ba0c6eea85bc2b29de20080bf40f72f66fa/rpds_py-2026.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:413b424f7c4ee65ab5e5be91f5731be0f8b41a1ee2b12dfe810d716312e95a78", size = 343831, upload-time = "2026-05-28T12:00:21.711Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ec/b2333b97b90e2a6ef6ca8ad386ee284968e74bcfe113b3f1a8d9036429a9/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c595a1d9255dce0599e13130d1440ab2506654f2b50294226ee06402f8fef63", size = 375127, upload-time = "2026-05-28T12:00:23.326Z" }, - { url = "https://files.pythonhosted.org/packages/14/7f/e00aae54067f2b488c4637961d5f58204d470795fc791085fa3f15060d2e/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c27c5f6102eac8c03e7595a00827a53b271ba40a53b59ff8709170e0855ea4a", size = 379034, upload-time = "2026-05-28T12:00:24.89Z" }, - { url = "https://files.pythonhosted.org/packages/be/cc/423999bbb8ae8dc93c77fc1d5e984ade5eb89d237d3bb884ccfa72ae2890/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c7fcf61d44cacecaf3aea542b0e053db77972a4573e7ceda16fb2b399161195", size = 490823, upload-time = "2026-05-28T12:00:26.676Z" }, - { url = "https://files.pythonhosted.org/packages/0f/aa/c671bf660f12e68d3c52ff86c7066ed1372df5a0f4f2ff584e419b8207e7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c817a189d4ee14290420e5ff051e4dd6baa13f3edf84685071dee07a6d538ee", size = 388144, upload-time = "2026-05-28T12:00:28.577Z" }, - { url = "https://files.pythonhosted.org/packages/19/c8/d63bb75b68afe77b229e3021c6031bcaf01da5db5b0e69d0d10f9ba679a7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21846aac0ed2e0589f38c12dc44e77bb64e494b771eadbcf169cba00566ba7ba", size = 371959, upload-time = "2026-05-28T12:00:30.304Z" }, - { url = "https://files.pythonhosted.org/packages/82/35/c51122014d8274ff37dc606d60049c3db7d83da02b5b282511e5a906a9a6/rpds_py-2026.5.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b317c87a13f769a4e787819bd508aaa5d69aa09b0880de9af6d3a8a54571cdec", size = 383558, upload-time = "2026-05-28T12:00:31.764Z" }, - { url = "https://files.pythonhosted.org/packages/e3/f9/2790cb99c136a5363acdeacf5c27c56f3de0d4118a1f48fca83404c99c89/rpds_py-2026.5.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce87129d9f2c14fa6c4a8601fb80eb4488c80d38a20cd13758ef11123e14995d", size = 402789, upload-time = "2026-05-28T12:00:33.247Z" }, - { url = "https://files.pythonhosted.org/packages/e5/1b/e4fb584f8c75d35c38150ff6a332cda949e6f97acba1f4fd123b14ab56fe/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9cdddb6c1207d284d94fd1530adf57fbd797fe7c4b8704ba85f49414f2557e7d", size = 551405, upload-time = "2026-05-28T12:00:34.819Z" }, - { url = "https://files.pythonhosted.org/packages/d8/f7/a6731b4216cb3793ea1af5391da240f5683dacc0d13e034fe5fc3503f240/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4e237e139f94d3c036fd28eb9f564c99055476ff4ff05cd42be55ce349b5aa02", size = 616975, upload-time = "2026-05-28T12:00:36.268Z" }, - { url = "https://files.pythonhosted.org/packages/2c/ea/2e051a81d95d8e63f4b35a1c463a87e8766bc3d083c067c5dfb6bf220747/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ed0954b524873214369184a9c82b0eaa45a3fbb9a798cd95b17e0d98499e7ea0", size = 578701, upload-time = "2026-05-28T12:00:37.82Z" }, - { url = "https://files.pythonhosted.org/packages/65/56/b5f6fdb2083e32bca8a8993d89e70db114b4756c9e2c38421328126689d2/rpds_py-2026.5.1-cp314-cp314-win32.whl", hash = "sha256:2d88621d6a7d4dfa633d21abe90f280bb205274e16b1d1e61c6ad4640b2453b7", size = 209806, upload-time = "2026-05-28T12:00:39.492Z" }, - { url = "https://files.pythonhosted.org/packages/fb/80/65a5aa96c155e611d1ed844e4e1f57f3e36b021f396d9f8585d756e6b90d/rpds_py-2026.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:cef8ac28d26f4dda3533060c20fbf80a325458fa9fd23ea72a73cdfa8e978838", size = 225985, upload-time = "2026-05-28T12:00:40.94Z" }, - { url = "https://files.pythonhosted.org/packages/27/7c/ad185212e87b05f196daef92bc5f3caf07298eb47c295b5585c3dd3093ac/rpds_py-2026.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:eaaea962c68cdc68d4a533ba985ab8e9484277910bbfaa2ab3ef7732667bfed8", size = 221219, upload-time = "2026-05-28T12:00:43.15Z" }, - { url = "https://files.pythonhosted.org/packages/23/58/e14ae18759020334646b031e708ab4158d653a938822bfb7b95ef2e93aa3/rpds_py-2026.5.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:21942f52dbbd5f8758bf021213d28bd45c39e873e65e2407faf5f1846f5761ad", size = 352148, upload-time = "2026-05-28T12:00:44.638Z" }, - { url = "https://files.pythonhosted.org/packages/31/9b/5f4a1e2f960bca3ac5d052b139dd31eed97b259f9d909173821760d542e8/rpds_py-2026.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f414556f6e3958300ff941e40c9f97e3dc9774ddd1b3434c475d73dd354bbed3", size = 345196, upload-time = "2026-05-28T12:00:46.14Z" }, - { url = "https://files.pythonhosted.org/packages/1a/71/1d9574d6a2fa20ab60eaa55c7467f5aa20cbc770f341a05f09c0876f59e2/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef1013a8625c74043210190b246f5b1551e09757c1f356c6e4160ef96c5bc081", size = 374981, upload-time = "2026-05-28T12:00:47.531Z" }, - { url = "https://files.pythonhosted.org/packages/0c/9a/37e99f4915a80aa71670263c1267f7ae0af95f53a3f61e6c3bdc016d4515/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc68e231a77a5f0d774ae278a1f8e55c0456501820847c1e4efb3829f3441df6", size = 379961, upload-time = "2026-05-28T12:00:49.216Z" }, - { url = "https://files.pythonhosted.org/packages/a8/ff/6e73f74b89d2e0715e0fc86b7dde893f9a61ae2f9b256ff3bdfe41ac4e94/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9baffb505aff33acc69b422a19f77806680f3c8632227d79f48de8a810d1c2c5", size = 495965, upload-time = "2026-05-28T12:00:51.111Z" }, - { url = "https://files.pythonhosted.org/packages/ea/e0/425faba25f59d74d4638b267f7c7a80e8649d2ef4db10a19b0c4a71e6e6f/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8d2f912928d426e8cfa396f7f3f8d29a59e6689c86dcca3c420730c1096322b", size = 389526, upload-time = "2026-05-28T12:00:52.77Z" }, - { url = "https://files.pythonhosted.org/packages/c6/76/7a41960e3fddae47fab43a28684d5da981401dffd88253de0944148654cb/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90f628283be835db980c941767d41c9a27b5239e54ba0a9c1335247e82406964", size = 376190, upload-time = "2026-05-28T12:00:54.215Z" }, - { url = "https://files.pythonhosted.org/packages/27/60/5f38dc70824fc6951b51d35377e577a3a3a4c81a6769cc5a2de25ebe0ad1/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:1ebb2f0ab7e16132995a72de805170e0203df0c3dd22e1ef1cd1fdd90bd7a131", size = 383921, upload-time = "2026-05-28T12:00:55.673Z" }, - { url = "https://files.pythonhosted.org/packages/60/1a/d60a38caa1505f4b9483c3fbbde12c94e1079154f4f401a6da96f7e77621/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f3df3d16ded76f1f8c9cdebd0e1ea55fdf4c23b812de189814da7cf229c22a81", size = 404766, upload-time = "2026-05-28T12:00:57.518Z" }, - { url = "https://files.pythonhosted.org/packages/87/ff/602fd3f174d6425f0bce05ad0dfbec0e96b38d0f7d08a79af5aa20083885/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9af8905b8f854990e40d5206aa5ac58d9b0fe0b7f351ff2bb086c20f6c8c6a47", size = 551343, upload-time = "2026-05-28T12:00:58.978Z" }, - { url = "https://files.pythonhosted.org/packages/b8/c1/1be13327acdbead3eca1fde03b6a34dbb011f1e864e217f0d32cc1779a7f/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:036a36a87fb1cd3b214d11c4b3c4f7d2ddad933625dca1c900b56a057c07740a", size = 618502, upload-time = "2026-05-28T12:01:00.656Z" }, - { url = "https://files.pythonhosted.org/packages/f3/d7/afb49b49d7f2be8b7ba1a9f0977fa5168003437b93086726f066544e8351/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ae3853454fe9ef283a03c96c2d835d39e84b14643a9d62c82ef0fb87d702ca", size = 581916, upload-time = "2026-05-28T12:01:02.22Z" }, - { url = "https://files.pythonhosted.org/packages/25/d1/dbef8c1f8a10f07beb62b5f054e20099fd9924b3ec001b8f0b6ac7813a85/rpds_py-2026.5.1-cp314-cp314t-win32.whl", hash = "sha256:6c3d771a46ec18b12af06ce36243a9a80b07a5d0515236332d90863ca8bb326a", size = 207855, upload-time = "2026-05-28T12:01:03.821Z" }, - { url = "https://files.pythonhosted.org/packages/2a/72/bfa4e61ab8e7dc1c8adf397e05e6cbdd4239357bd72b248d3de662f23915/rpds_py-2026.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c93c629be4636cf54337bd5f06c104d55e42ced54d681f6fe21ae510a65116f6", size = 225422, upload-time = "2026-05-28T12:01:05.194Z" }, - { url = "https://files.pythonhosted.org/packages/27/3a/7b5da92b640f67b6717ccafc83cdd06bfa7ff2395c3685c68922bb54d703/rpds_py-2026.5.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:3574b55c604b8f75dacb007136508bbc0db406e626301778096a133327e7f2fb", size = 349576, upload-time = "2026-05-28T12:01:06.722Z" }, - { url = "https://files.pythonhosted.org/packages/d7/8a/2aafd7ad355a1bd48ca76e2262b74b15e6432b5a1efe150efd4d779cd55d/rpds_py-2026.5.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:94068eb3ae6d43f5a786b7db96a406a34e6d5c24489feef32fd6e8946ea7b291", size = 343640, upload-time = "2026-05-28T12:01:08.441Z" }, - { url = "https://files.pythonhosted.org/packages/f7/7d/6c9523c1abbe840a1b7fba3c516d48e1d3487cc80fea4366c4071cf56784/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a5b10e8ce894825f380a8f1b6444cf73c294dfea62afbb2d13e3a9e630cec1", size = 375322, upload-time = "2026-05-28T12:01:09.934Z" }, - { url = "https://files.pythonhosted.org/packages/5a/5d/0b7b03fb1dc509321f01de3149784ab773e34c8573022029af8076afcb9c/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc09f82e63d4bcd58149572f857a431bae851dc747e313c3b5bdf7abb907fda8", size = 379066, upload-time = "2026-05-28T12:01:11.48Z" }, - { url = "https://files.pythonhosted.org/packages/d7/e2/8ef6012999ebf1cb1c22f876d9ce5e63d960fd4631d2af3202d3f480aa25/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e10464d17df3b582745c25cec695cb9558bca2cb6ddb631aee1787fc72c767b2", size = 494586, upload-time = "2026-05-28T12:01:13.051Z" }, - { url = "https://files.pythonhosted.org/packages/80/af/1eeb029bec67582c226b7809172207cd005073af4ebd906e65ff494f4983/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba05adbf15d994c38ec0b7ab32e858e5110c21e9009a00a86545fd220f84e038", size = 388415, upload-time = "2026-05-28T12:01:14.631Z" }, - { url = "https://files.pythonhosted.org/packages/18/23/ffbe10711c4d766c1cab0557d6906c074f795814863c67b351355d29354a/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77c004fdc7b891967106f78ddfd7b076bfe6813c6139c6fff6aed3bcaa960b26", size = 372427, upload-time = "2026-05-28T12:01:16.153Z" }, - { url = "https://files.pythonhosted.org/packages/bd/3a/30ba4a6ad457e5b070c18d742a33fb77d8d922b565cc881f8a5313d63bfe/rpds_py-2026.5.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:83bcf894486c9d78dd290d3c0124ff6dd8875d3025e2090a8ec49fcc37c55fdd", size = 383615, upload-time = "2026-05-28T12:01:17.809Z" }, - { url = "https://files.pythonhosted.org/packages/d3/69/62e242b53ce39c0814bd24e1a6e6eba6c92be716277745f317f9540a2e7b/rpds_py-2026.5.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3df104083952a0e0c6f10de33e440eabe98fb6317d23e1a58c68f6df08d01b9", size = 402786, upload-time = "2026-05-28T12:01:19.419Z" }, - { url = "https://files.pythonhosted.org/packages/38/c1/a770b9c186928a1ed0f7e6d7ae50e7f3950ed23e3f9e366dbc8e38cb55de/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:980450826cf22e133c57e0835070bdd0dd3f73b9b708c3ce223def2cb9469e14", size = 551583, upload-time = "2026-05-28T12:01:21.013Z" }, - { url = "https://files.pythonhosted.org/packages/21/7c/68e8579b95375b70d2a963103c42e705856cdb98569258bd807f4423891c/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:205dde846f24332ab0c1188699a043b8d165b79bb84529ce272c45048ff6be01", size = 616941, upload-time = "2026-05-28T12:01:22.548Z" }, - { url = "https://files.pythonhosted.org/packages/70/a1/a6135aed5730ff03ab957182259987ac11e55fb392a28dc6f0592048a280/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:3966b82dd563176396df030f3dd52a6e54cb69b718e95e78bd555ed3d1e0185d", size = 578349, upload-time = "2026-05-28T12:01:24.118Z" }, - { url = "https://files.pythonhosted.org/packages/09/6e/f24201a76a84e6c49d0bdfdfcb735210e21701e9b21c5bfc0ba497dd62f6/rpds_py-2026.5.1-cp315-cp315-win32.whl", hash = "sha256:7818f8d0a415be74d2be3590b0a1c1f463a642f4d0217e7d10602dceef5b79aa", size = 209922, upload-time = "2026-05-28T12:01:25.522Z" }, - { url = "https://files.pythonhosted.org/packages/9e/e4/966bc240bb0485fc265278f6de44d05834bf0b3618886e0b22e33d54c49a/rpds_py-2026.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:b3cc20c0d800af78fd0fac68086e28c1856cec51ea528bb81ea851aa40d39325", size = 226003, upload-time = "2026-05-28T12:01:27.062Z" }, - { url = "https://files.pythonhosted.org/packages/5c/5c/a15a59269cd5e74472734516c73795c15eccfc841b3d4b0228c3f53f19d0/rpds_py-2026.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:3609e9939a8a76cd904cf98a3f1f13b5dc7e150adeaee89e0ea09652ea213e16", size = 221245, upload-time = "2026-05-28T12:01:28.51Z" }, - { url = "https://files.pythonhosted.org/packages/e0/22/135ce03804e179a71ceb13be095deda4a279bc88f7a6b8fa161c5ad44e12/rpds_py-2026.5.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:5d333a7127d4b307601ac37792bee01bb95c867cbfacf21b6375b804d6bbd723", size = 352015, upload-time = "2026-05-28T12:01:30.214Z" }, - { url = "https://files.pythonhosted.org/packages/3b/5f/f1f6d2652eb9d848f6eb369d8db83a2da6249bb49ad2c2a48f45d54538d3/rpds_py-2026.5.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:b5f077b44a4f7808520f66dae234988d867deb9aed9be5da057ce9ba831b2a41", size = 345016, upload-time = "2026-05-28T12:01:31.656Z" }, - { url = "https://files.pythonhosted.org/packages/88/66/b74182775691ea2290c99e52ac8d5db844e56fbec90ce421f107658c8314/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d8f9b7b78c9538fc9e04e82ec0e888ff0c3cffcfad152c77e57cd09351a98a", size = 374775, upload-time = "2026-05-28T12:01:33.136Z" }, - { url = "https://files.pythonhosted.org/packages/ff/8f/15e5a61d9f0a43902d36561d4f07cae6ae9f4716be825159fd72717f33af/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e3a8ae58895ac107ed934a6bf51e5846f95c53b9b940c2c6d310838fd5846358", size = 380270, upload-time = "2026-05-28T12:01:34.574Z" }, - { url = "https://files.pythonhosted.org/packages/02/c3/f859b12763a80540cdf2af0f15b19904cf756a71d7bdd3f82ff3e5b1bbf9/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0957cf3c2b8632ec7aaebffebea8005b353cc2a237b6e2ae3c2cac0820704cfb", size = 495285, upload-time = "2026-05-28T12:01:36.127Z" }, - { url = "https://files.pythonhosted.org/packages/1c/c7/ff27c2ac8411d30b03b1829fd88cae8dad1a4d0da48dd25e57c4038042e6/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c396c1304de421050b3681ea70f371874b54d41b0151e96109758144c231e30b", size = 389581, upload-time = "2026-05-28T12:01:37.635Z" }, - { url = "https://files.pythonhosted.org/packages/6e/67/fe92ee32a6cc05c77228a2f8b1762e7124f386ec20ff83d0757b762d58d0/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad1bff7f666b9598e573815affd666aac6a13a585dde336f843e33350c7fadc", size = 376041, upload-time = "2026-05-28T12:01:39.307Z" }, - { url = "https://files.pythonhosted.org/packages/f8/91/b4d6685c27aba55bd82f25b278be8237038117d05f9659a6213ad3408130/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:656a042550878f12d45752452d47094b7cfe5ad1e9d7b87b5a22ad3ae5ff8015", size = 383946, upload-time = "2026-05-28T12:01:41.043Z" }, - { url = "https://files.pythonhosted.org/packages/bd/79/2c1d832a53c8e0f8e98fc970ec257b950fecd4f62be2ab7182b500a0cbc8/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c4bd4f70294737b5206a3e8e30ccadbf8a60301831c8ea23eec5dbeea1ecfa", size = 405526, upload-time = "2026-05-28T12:01:43.032Z" }, - { url = "https://files.pythonhosted.org/packages/78/c4/c98117b03c6a8581ab2c2dfccfe9a5ad82bd8128a3c28b46a6ad2d97c393/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:43bca78665423cabae77146f2fe7ce55272b6c8d55d82cca83effd42c7e13972", size = 551165, upload-time = "2026-05-28T12:01:44.648Z" }, - { url = "https://files.pythonhosted.org/packages/3b/c1/bc479ca069200af730881b1bd525e3114b2b391a351509fcb1b772f28086/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:42d0f20e85e549c870749d0e247f0c10d318a45b7e9676d575d2dcb04a1b2e66", size = 618778, upload-time = "2026-05-28T12:01:46.337Z" }, - { url = "https://files.pythonhosted.org/packages/77/65/38ab2f90df44c2febfb63cc10ced40763d9b4bc94d173e734528663fe7f5/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:b1be5c35683684d5331b93600c210e8367c254683d8a6df6bd21bd2da3a334fb", size = 581839, upload-time = "2026-05-28T12:01:48.109Z" }, - { url = "https://files.pythonhosted.org/packages/15/2d/ce1f605fe036aadd460e5822e578c6c7ec3a860936cca37d6e0f299daa77/rpds_py-2026.5.1-cp315-cp315t-win32.whl", hash = "sha256:75808f6c38ce7749bb68cc2770161aae5045e6c6f6781a9782e74b93304399df", size = 207866, upload-time = "2026-05-28T12:01:49.648Z" }, - { url = "https://files.pythonhosted.org/packages/79/cb/966040123eb102371559746908ef2c9471f4d43e17ec9a645a2258dab64b/rpds_py-2026.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:90bd6630002a1c7f09e7843dd79f0d24f3d2897cc25a753480917865d14f15b3", size = 225441, upload-time = "2026-05-28T12:01:51.408Z" }, - { url = "https://files.pythonhosted.org/packages/42/56/3fe0fb34820ff667be791b3a3c22b85e8bcba54e9c832f47438c191fa7be/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:edf2765d84e42447f112ad877af8fe1db0089aaec5b28e88d6eab45e7fe99cea", size = 357151, upload-time = "2026-05-28T12:01:53.43Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f2/3eb9ccdb9f143b8c9b003978898cb497f942a324c077401e6b8834238e63/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad3773236e95f7f33991eb125224b7da66f206504d032a253a02da7e134519fb", size = 350195, upload-time = "2026-05-28T12:01:54.901Z" }, - { url = "https://files.pythonhosted.org/packages/a7/24/dbda232bc4f3ed732120692ab0d2c8402cb020516556d8bee622dcef2413/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a04df86b3f0fade39ec8fd0e0aab089b1da9fbd2b48df778a57ef96f5e7d38df", size = 381850, upload-time = "2026-05-28T12:01:56.601Z" }, - { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899, upload-time = "2026-05-28T12:01:58.212Z" }, - { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618, upload-time = "2026-05-28T12:01:59.888Z" }, - { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003, upload-time = "2026-05-28T12:02:01.482Z" }, - { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778, upload-time = "2026-05-28T12:02:03.197Z" }, - { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359, upload-time = "2026-05-28T12:02:04.817Z" }, - { url = "https://files.pythonhosted.org/packages/93/dd/472ba494c70753f93745992c99855bee0636daf74e6984e5e003f150316f/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4abbf391a70be864920858bf360f4fb380577c9a0f732438a1996726e2c195b", size = 412820, upload-time = "2026-05-28T12:02:06.401Z" }, - { url = "https://files.pythonhosted.org/packages/1d/6f/93831a3bfe789542ed0c1d0d74b78b440f055d6dc3ea4640eba2d95e6e23/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c74005a7bb87752acf351c93897ec63ad77a07a0da7ecad9c050e32e7286ba34", size = 557243, upload-time = "2026-05-28T12:02:08.013Z" }, - { url = "https://files.pythonhosted.org/packages/1f/ff/0b3d604614ffc77522c6b288fdbce68957eb583da1002aa65ba38ac0ee40/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:8213afbe8a3a906fb9acb2014423fe3359ee783d0bf90995f70623a3217bfa6c", size = 623541, upload-time = "2026-05-28T12:02:09.661Z" }, - { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326, upload-time = "2026-05-28T12:02:11.47Z" }, + { url = "https://files.pythonhosted.org/packages/94/1f/a2dca5ffdbf1d475ffc4e80e4d5d720ff3a00f691795910116960ee12511/rpds_py-2026.6.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:7b689145a1485c335569bd056464f3243a29af7ed3871c7be31ad624ba239bc7", size = 342174, upload-time = "2026-06-30T07:14:54.821Z" }, + { url = "https://files.pythonhosted.org/packages/4d/dc/323d08583c0832911768663d1944f0107fcd4088704858d84b5e06d105a0/rpds_py-2026.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db08f45aecde626498fb3df07bcf6d2ec040af42e859a4f5040d79c200342911", size = 345513, upload-time = "2026-06-30T07:14:56.515Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2a/e31989834d18d2f26ec1d2774c5b1eb3331df4ea8ada525175294c94b48a/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc992ab27b15f852c76755eb2ab7dce86585ddadba6fa5946e58556088845b4", size = 373783, upload-time = "2026-06-30T07:14:57.736Z" }, + { url = "https://files.pythonhosted.org/packages/87/fe/e80107ee3639585c9941c17d6a42cd65325022f656c023191fce78c324c8/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f88d653e7b3b779d71ae7454e20dcc9b6bae903f33c269db9f2be41bda3f261", size = 378316, upload-time = "2026-06-30T07:14:59.077Z" }, + { url = "https://files.pythonhosted.org/packages/22/6f/81e3adf81acfb6fa694de2a6e4e7d8863121e3e0799e0a7725e6cf5679c4/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e52655eaf81e32593abedaa4bfe33170c8cfedf3365ed9be6e11e07f148f0278", size = 499423, upload-time = "2026-06-30T07:15:00.488Z" }, + { url = "https://files.pythonhosted.org/packages/2d/9a/41263969df0ce3d9af2a96d5005a288200af1989aed3354bfceb5fc0b21f/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dfcc8b909769d19db55c7cc9541eb64b9b774b1057ffffb4f1048070475bb9f9", size = 386077, upload-time = "2026-06-30T07:15:01.911Z" }, + { url = "https://files.pythonhosted.org/packages/5e/19/7e98f468bd50346faff5b10e5297374b443bfdddacc8e9fbc65984539597/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7", size = 371315, upload-time = "2026-06-30T07:15:03.317Z" }, + { url = "https://files.pythonhosted.org/packages/99/3c/2b973b4d371906a134b03decfea7f5d9835a2c6d263454392e15b64b5b18/rpds_py-2026.6.3-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:8d2294a31386bfa251d8c8a39472beee17db67d4f1a6eabea665d35c9a4461c3", size = 383502, upload-time = "2026-06-30T07:15:04.627Z" }, + { url = "https://files.pythonhosted.org/packages/98/2a/12e2799500af0a307bca76b63361c51f9fe479223561489c29eea1f2ee41/rpds_py-2026.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8f23ead891a3b762f35ab3b04623da7056545b48aa60d59957e6789914545da", size = 402673, upload-time = "2026-06-30T07:15:05.856Z" }, + { url = "https://files.pythonhosted.org/packages/2d/e3/21e5872d165fe08be4f229e3d5ee9d90019c0bf0e5538de60dbd54009450/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:421aba32367055614287a4292b6a17f1939c9452299f7a0209c117e990b646d4", size = 549964, upload-time = "2026-06-30T07:15:07.159Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d0/5ee0fe36844297de8123bee27bc12078c1a7416ad9f1b8a8ca18d6b0c0ac/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1e5822dfc2f0d4ab7e745eaa6d85945069329beeccef965af3f3bb26058fcab6", size = 615446, upload-time = "2026-06-30T07:15:08.531Z" }, + { url = "https://files.pythonhosted.org/packages/b1/80/1ea5873cb683f2fbe5f21b23ea1f6d179ead19f3c5b249b7eb5dca568ef2/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:83e35b57523816c8613fd0776b40cd8bb9f596b37ddd2692eb4a6bb5ab2f8c93", size = 576975, upload-time = "2026-06-30T07:15:09.97Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e1/90ef639217a5ddb15b7f4f61b1c33911fd044ad03c311bafdd2bcab85582/rpds_py-2026.6.3-cp311-cp311-win32.whl", hash = "sha256:de3eceba0b683bcbb1ab93da016d0270df1f9ae7be716b40214c5dafac6ea45a", size = 204453, upload-time = "2026-06-30T07:15:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b7/b7a1695d7af36f521fb11e80d6d3adbd744f73b921859bd3c2a2c0dc706f/rpds_py-2026.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:2c54a076ca4d370980ab57bc0e31df57bbe8d41340436a90ef8b1219a3cbb127", size = 223219, upload-time = "2026-06-30T07:15:12.476Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a2/145afacf796e4506062825941176ad9445c2dcf2b3b6a1f13d3030a15e19/rpds_py-2026.6.3-cp311-cp311-win_arm64.whl", hash = "sha256:168c733a7112e071bb7a66460e667edfcff06c017a3c523f7a8a8e08d0140804", size = 219137, upload-time = "2026-06-30T07:15:13.631Z" }, + { url = "https://files.pythonhosted.org/packages/5c/be/2e8974163072e7bab7df1a5acd54c4498e75e35d6d18b864d3a9d5dadc92/rpds_py-2026.6.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0", size = 343691, upload-time = "2026-06-30T07:15:14.96Z" }, + { url = "https://files.pythonhosted.org/packages/a4/73/319dfa745dd668efe89309141ded489126461fcecd2b8f3a3cda185129b6/rpds_py-2026.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf", size = 338542, upload-time = "2026-06-30T07:15:16.267Z" }, + { url = "https://files.pythonhosted.org/packages/21/63/4239893be1c4d09b709b1a8f6be4188f0870084ff547f46606b8a75f1b03/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24", size = 368180, upload-time = "2026-06-30T07:15:17.62Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ca/9c5de382225234ceb37b1844ebdb140db12b2a278bb9efe2fcd19f6c82ce/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e", size = 375067, upload-time = "2026-06-30T07:15:18.952Z" }, + { url = "https://files.pythonhosted.org/packages/87/dc/863f69d1bf04ade34b7fe0d59b9fdf6f0135fe2d7cbca74f1d665589559d/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975", size = 490509, upload-time = "2026-06-30T07:15:20.434Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ef/eac16a12048b45ec7c7fa94f2be3438a5f26bf9cc8580b18a1cfd609b7f6/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680", size = 382754, upload-time = "2026-06-30T07:15:21.831Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/d2f3f532616be4d06c316ef119683e832bd3d41e112bf3a88f4151c95b17/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6", size = 366189, upload-time = "2026-06-30T07:15:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/e3/29/41a7b0e98a4b44cd676ab7598419623373eb43b20be68c084935c1a8cf88/rpds_py-2026.6.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a", size = 377750, upload-time = "2026-06-30T07:15:24.659Z" }, + { url = "https://files.pythonhosted.org/packages/2e/05/ecda0bec46f9a1565090bcdc941d023f6a25aff85fda28f89f8d19878152/rpds_py-2026.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4", size = 395576, upload-time = "2026-06-30T07:15:25.987Z" }, + { url = "https://files.pythonhosted.org/packages/68/a8/6ed52f03ee6cb854ce78785cc9a9a672eb880e83fd7224d471f667d151f1/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa", size = 543807, upload-time = "2026-06-30T07:15:27.356Z" }, + { url = "https://files.pythonhosted.org/packages/8f/d6/156c0d3eea27ba09b92562ba2364ba124c0a061b199e17eac637cd25a5e2/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc", size = 611187, upload-time = "2026-06-30T07:15:28.931Z" }, + { url = "https://files.pythonhosted.org/packages/f1/31/774212ed989c62f7f310220089f9b0a3fb8f40f5443d1727abd5d9f52bc9/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822", size = 573030, upload-time = "2026-06-30T07:15:30.553Z" }, + { url = "https://files.pythonhosted.org/packages/c9/50/22f73127a41f1ce4f87fe39aadfb9a126345801c274aa93ae88456249327/rpds_py-2026.6.3-cp312-cp312-win32.whl", hash = "sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed", size = 202185, upload-time = "2026-06-30T07:15:32.027Z" }, + { url = "https://files.pythonhosted.org/packages/04/3a/f0ee4d4dde9d3b69dedf1b5f74e7a40017046d55052d173e418c6a94f960/rpds_py-2026.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f", size = 220394, upload-time = "2026-06-30T07:15:33.359Z" }, + { url = "https://files.pythonhosted.org/packages/f3/83/3382fe37f809b59f02aac04dbc4e765b480b46ee0227ed516e3bdc4d3dfc/rpds_py-2026.6.3-cp312-cp312-win_arm64.whl", hash = "sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96", size = 215753, upload-time = "2026-06-30T07:15:34.778Z" }, + { url = "https://files.pythonhosted.org/packages/a4/9e/b818ee580026ec578138e961027a68820c40afeb1ec8f6819b54fb99e196/rpds_py-2026.6.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223", size = 343012, upload-time = "2026-06-30T07:15:36.005Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6b/686d9dc4359a8f163cfbbf89ee0b4e586431de22fe8248edb63a8cf50d49/rpds_py-2026.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f", size = 338203, upload-time = "2026-06-30T07:15:37.462Z" }, + { url = "https://files.pythonhosted.org/packages/9e/9b/069aa329940f8207615e091f5eedbbd40e1e15eac68a0790fd05ccdf796c/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f", size = 367984, upload-time = "2026-06-30T07:15:39.008Z" }, + { url = "https://files.pythonhosted.org/packages/14/db/34c203e4becff3703e4d3bc121842c00b8689197f398161203a880052f4e/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7", size = 374815, upload-time = "2026-06-30T07:15:40.253Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7d/8071067d2cc453d916ad836e828c943f575e8a44612537759002a1e07381/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6", size = 490545, upload-time = "2026-06-30T07:15:41.729Z" }, + { url = "https://files.pythonhosted.org/packages/a3/42/da06c5aa8f0484ff07f270787434204d9f4535e2f8c3b51ed402267e63c3/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af", size = 382828, upload-time = "2026-06-30T07:15:43.327Z" }, + { url = "https://files.pythonhosted.org/packages/57/d7/fe978efc2ae50abe48eb7464668ea99f53c010c60aeebb7b35ad27f23661/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf", size = 365678, upload-time = "2026-06-30T07:15:44.992Z" }, + { url = "https://files.pythonhosted.org/packages/69/9d/1d8922e1990b2a6eb532b6ff53d3e73d2b3bbffc84116c75826bee73dfc6/rpds_py-2026.6.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885", size = 377811, upload-time = "2026-06-30T07:15:46.523Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3d/198dceafb4fb034a6a47347e1b0735d34e0bd4a50be4e898d408ee66cb14/rpds_py-2026.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4", size = 395382, upload-time = "2026-06-30T07:15:47.955Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f1/13968e49655d40b6b19d8b9140296bbc6f1d86b3f0f6c346cf9f1adddf4b/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7", size = 543832, upload-time = "2026-06-30T07:15:49.33Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ab/289bcb1b90bd3e40a2900c561fa0e2087345ecbb094f0b870f2345142b7c/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d", size = 611011, upload-time = "2026-06-30T07:15:50.847Z" }, + { url = "https://files.pythonhosted.org/packages/1e/16/5043105e679436ccfbc8e5e0dd2d663ed18a8b8113515fd06a5e5d77c83e/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97", size = 572431, upload-time = "2026-06-30T07:15:52.394Z" }, + { url = "https://files.pythonhosted.org/packages/85/ed/adab103321c0a6565d5ae1c2998349bc3ee175b82ccc5ae8fc04cc413075/rpds_py-2026.6.3-cp313-cp313-win32.whl", hash = "sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0", size = 201710, upload-time = "2026-06-30T07:15:53.894Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ed/a03b09668e74e5dabbf2e211f6468e1820c0552f7b0500082da31841bf7b/rpds_py-2026.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80", size = 219454, upload-time = "2026-06-30T07:15:55.25Z" }, + { url = "https://files.pythonhosted.org/packages/27/17/b8642c12930b71bc2b25831f6708ccf0f75abcd11883932ec9ce54ba3a78/rpds_py-2026.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb", size = 215063, upload-time = "2026-06-30T07:15:56.573Z" }, + { url = "https://files.pythonhosted.org/packages/b6/36/7fbe9dcdaf857fb3f63c2a2284b62492d95f5e8334e947e5fb6e7f68c9be/rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e", size = 344510, upload-time = "2026-06-30T07:15:57.921Z" }, + { url = "https://files.pythonhosted.org/packages/ba/54/f785cc3d3f60839ca57a5af4927a9f347b07b2799c373fc20f7949f87c7e/rpds_py-2026.6.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd", size = 339495, upload-time = "2026-06-30T07:15:59.238Z" }, + { url = "https://files.pythonhosted.org/packages/63/ef/d4cdaf309e6b095b43597103cf8c0b951d6cca2acce68c474f75ec12e0c7/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d", size = 369454, upload-time = "2026-06-30T07:16:01.021Z" }, + { url = "https://files.pythonhosted.org/packages/96/4a/9559a68b7ee15db09d7981212e8c2e219d2a1d6d4faa0391d813c3496a36/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda", size = 374583, upload-time = "2026-06-30T07:16:02.287Z" }, + { url = "https://files.pythonhosted.org/packages/ef/75/8964aa7d2c6e8ac43eba8eb6e6b0fdda1f46d39f2fc3e6aa9f2cb17f485d/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8", size = 492919, upload-time = "2026-06-30T07:16:03.723Z" }, + { url = "https://files.pythonhosted.org/packages/8f/97/6908094ac804115e65aedfd90f1b5fee4eebebd3f6c4cfc5419939267565/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53", size = 383725, upload-time = "2026-06-30T07:16:05.305Z" }, + { url = "https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504", size = 367255, upload-time = "2026-06-30T07:16:07.086Z" }, + { url = "https://files.pythonhosted.org/packages/c4/fe/f0209ca4a9ed074bc8acb44dfd0e81c3122e94c9689f5645b7973a866719/rpds_py-2026.6.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc", size = 379060, upload-time = "2026-06-30T07:16:08.525Z" }, + { url = "https://files.pythonhosted.org/packages/c6/8d/f1cc54c616b9d8897de8738aac148d20afca93f68187475fe194d09a71b9/rpds_py-2026.6.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77", size = 395960, upload-time = "2026-06-30T07:16:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/fb/04/aafff00f73aeca2945f734f1d483c64ab8f472d0864ab02377fd8e89c3b2/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698", size = 545356, upload-time = "2026-06-30T07:16:11.816Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cc/e229663b9e4ddac5a4acbe9085dd80a71af2a5d356b8b39d6bff233f24b0/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd", size = 612319, upload-time = "2026-06-30T07:16:13.586Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7a/8a0e6d3e6cd066af108b71b43122c3fe158dd9eb86acac626593a2582eb1/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d", size = 573508, upload-time = "2026-06-30T07:16:15.23Z" }, + { url = "https://files.pythonhosted.org/packages/87/03/2a69ab618a789cf6cf85c86bb844c62d090e700ab1a2aa676b3741b6c516/rpds_py-2026.6.3-cp314-cp314-win32.whl", hash = "sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8", size = 202504, upload-time = "2026-06-30T07:16:16.893Z" }, + { url = "https://files.pythonhosted.org/packages/85/62/a3892ba945f4e24c78f352e5de3c7620d8479f73f211406a97263d13c7d2/rpds_py-2026.6.3-cp314-cp314-win_amd64.whl", hash = "sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5", size = 220380, upload-time = "2026-06-30T07:16:18.108Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e7/c2bd44dc831931815ad11ebb5f430b5a0a4d3caa9de837107876c30c3432/rpds_py-2026.6.3-cp314-cp314-win_arm64.whl", hash = "sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703", size = 215976, upload-time = "2026-06-30T07:16:19.654Z" }, + { url = "https://files.pythonhosted.org/packages/79/9c/fff7b74bce9a091ec9a012a03f9ff5f69364eaf9451060dfc4486da2ffdd/rpds_py-2026.6.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90", size = 346840, upload-time = "2026-06-30T07:16:21.268Z" }, + { url = "https://files.pythonhosted.org/packages/e9/44/77bcb1168b33704908295533d27f10eb811e9e3e193e8993dc99572211d3/rpds_py-2026.6.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4", size = 340282, upload-time = "2026-06-30T07:16:22.875Z" }, + { url = "https://files.pythonhosted.org/packages/87/3c/7a9081c7c9e645b39efe19e4ffbeccd80add246327cd9b888aecffd72317/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9", size = 370403, upload-time = "2026-06-30T07:16:24.415Z" }, + { url = "https://files.pythonhosted.org/packages/f7/69/af47021eb7dad6ff3396cb001c08f0f3c4d06c20253f75be6421a59fe6b7/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f", size = 376055, upload-time = "2026-06-30T07:16:26.111Z" }, + { url = "https://files.pythonhosted.org/packages/81/fc/a3bcf517084396a6dd258c592567a3c011ba4557f2fde23dceaf26e74f2e/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41", size = 494419, upload-time = "2026-06-30T07:16:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/c9/eb/13d529d1788135425c7bf207f8463458ca5d92e43f3f701365b83e9dffc1/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945", size = 384848, upload-time = "2026-06-30T07:16:29.183Z" }, + { url = "https://files.pythonhosted.org/packages/8e/f4/b7ac49f30013aba8f7b9566b1dd07e81de95e708c1374b7bacc5b9bc5c9c/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f", size = 371369, upload-time = "2026-06-30T07:16:30.912Z" }, + { url = "https://files.pythonhosted.org/packages/31/86/6260bafa622f788b07ddec0e52d810305c8b9b0b8c27f58a2ab04bf62b4f/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1", size = 379673, upload-time = "2026-06-30T07:16:32.486Z" }, + { url = "https://files.pythonhosted.org/packages/19/c3/03f1ee79a047b48daeca157c89a18509cde22b6b951d642b9b0af1be660a/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e", size = 397500, upload-time = "2026-06-30T07:16:34.471Z" }, + { url = "https://files.pythonhosted.org/packages/f0/95/8ed0cd8c377dca12aea498f119fe639fc474d1461545c39d2b5872eb1c0f/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538", size = 545978, upload-time = "2026-06-30T07:16:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f2/0eb57f0eaa83f8fc152a7e03de968ab77e1f00732bebc892b190c6eebde7/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db", size = 613350, upload-time = "2026-06-30T07:16:38.213Z" }, + { url = "https://files.pythonhosted.org/packages/5b/de/e0674bdbc3ef7634989b3f854c3f34bc1f587d36e5bfdc5c378d57034619/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2", size = 576486, upload-time = "2026-06-30T07:16:39.797Z" }, + { url = "https://files.pythonhosted.org/packages/f2/f6/21101359743cd136ada781e8210a85769578422ba460672eea0e29739200/rpds_py-2026.6.3-cp314-cp314t-win32.whl", hash = "sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e", size = 201068, upload-time = "2026-06-30T07:16:41.316Z" }, + { url = "https://files.pythonhosted.org/packages/a6/b2/9574d4d44f7760c2aa32d92a0a4f41698e33f5b204a0bf5c9758f52c79d5/rpds_py-2026.6.3-cp314-cp314t-win_amd64.whl", hash = "sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2", size = 220600, upload-time = "2026-06-30T07:16:43.091Z" }, + { url = "https://files.pythonhosted.org/packages/08/ae/f23a2697e6ee6340a578b0f136be6483657bef0c6f9497b752bb5c0964bb/rpds_py-2026.6.3-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13", size = 344726, upload-time = "2026-06-30T07:16:44.5Z" }, + { url = "https://files.pythonhosted.org/packages/c3/63/e7b3a1a5358dd32c930a1062d8e15b67fd6e8922e81df9e91706d66ee5c8/rpds_py-2026.6.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05", size = 339587, upload-time = "2026-06-30T07:16:46.255Z" }, + { url = "https://files.pythonhosted.org/packages/ec/64/10a85681916ca55fffb91b0a211f84e34297c109243484dd6394660a8a7c/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba", size = 369585, upload-time = "2026-06-30T07:16:48.101Z" }, + { url = "https://files.pythonhosted.org/packages/76/c2/baf95c7c38823e12ba34407c5f5767a89e5cf2233895e56f608167ae9493/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617", size = 375479, upload-time = "2026-06-30T07:16:49.93Z" }, + { url = "https://files.pythonhosted.org/packages/6a/94/0aad06c72d65101e11d33528d438cda99a39ce0da99466e156158f2541d3/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9", size = 492418, upload-time = "2026-06-30T07:16:51.641Z" }, + { url = "https://files.pythonhosted.org/packages/b5/17/de3f5a479a1f056535d7489819639d8cd591ea6281d700390b43b1abd745/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb", size = 384123, upload-time = "2026-06-30T07:16:53.622Z" }, + { url = "https://files.pythonhosted.org/packages/46/7d/bf09bd1b145bb2671c03e1e6d1ab8651858d90d8c7dfeadd85a37a934fd8/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885", size = 367351, upload-time = "2026-06-30T07:16:55.241Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ea/1bb734f314b8be319149ddee80b18bd41372bdcfbdf88d28131c0cd37719/rpds_py-2026.6.3-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a", size = 378827, upload-time = "2026-06-30T07:16:56.841Z" }, + { url = "https://files.pythonhosted.org/packages/4b/93/d9611e5b25e26df9a3649813ed66193ace9347a7c7fc4ab7cf70e94851c0/rpds_py-2026.6.3-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868", size = 395966, upload-time = "2026-06-30T07:16:58.557Z" }, + { url = "https://files.pythonhosted.org/packages/c3/cb/99d77e16e5534ae1d90629bbe419ba6ee170833a6a85e3aa1cc41726fbbc/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187", size = 545680, upload-time = "2026-06-30T07:17:00.164Z" }, + { url = "https://files.pythonhosted.org/packages/59/15/11a29755f790cef7a2f755e8e14f4f0c33f39489e1893a632a2eee59672b/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107", size = 611853, upload-time = "2026-06-30T07:17:01.962Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/0c27547e21644da938fb530f7e1a8148dd24d02db07e7a5f2567a17ce710/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba", size = 573715, upload-time = "2026-06-30T07:17:03.693Z" }, + { url = "https://files.pythonhosted.org/packages/29/71/4d8fcf700931815594bce892255bbd973b94efaf0fc1932b0590df18d886/rpds_py-2026.6.3-cp315-cp315-win32.whl", hash = "sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369", size = 202864, upload-time = "2026-06-30T07:17:05.746Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/b577562de0edbb55b2be85ce5fd09c33e386b9b13eee09833af4240fd5c4/rpds_py-2026.6.3-cp315-cp315-win_amd64.whl", hash = "sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146", size = 220430, upload-time = "2026-06-30T07:17:07.471Z" }, + { url = "https://files.pythonhosted.org/packages/c8/95/d6d0b2509825141eef60669a5739eec88dbc6a48053d6c92993a5704defe/rpds_py-2026.6.3-cp315-cp315-win_arm64.whl", hash = "sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e", size = 215877, upload-time = "2026-06-30T07:17:09.008Z" }, + { url = "https://files.pythonhosted.org/packages/b7/bf/f3ea278f0afd615c1d0f19cb69043a41526e2bb600c2b536eb192218eb27/rpds_py-2026.6.3-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b", size = 346933, upload-time = "2026-06-30T07:17:10.762Z" }, + { url = "https://files.pythonhosted.org/packages/9d/29/9907bdf1c5346763cf10b7f6852aad86652168c259def904cbe0082c5864/rpds_py-2026.6.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690", size = 340274, upload-time = "2026-06-30T07:17:12.266Z" }, + { url = "https://files.pythonhosted.org/packages/6f/2c/8e03767b5778ef25cebf74a7a91a2c3806f8eced4c92cb7406bbe060756d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342", size = 370763, upload-time = "2026-06-30T07:17:14.107Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e1/df2a7e1ba2efd796af26194250b8d42c821b46592311595162af9ef0528d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6", size = 376467, upload-time = "2026-06-30T07:17:15.76Z" }, + { url = "https://files.pythonhosted.org/packages/6b/de/8a0814d1946af29cb068fb259aa8622f856df1d0bab58429448726b537f5/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140", size = 496689, upload-time = "2026-06-30T07:17:17.308Z" }, + { url = "https://files.pythonhosted.org/packages/df/f3/f19e0c852ba13694f5a79f3b719331051573cb5693feacf8a88ffffc3a71/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442", size = 385340, upload-time = "2026-06-30T07:17:18.928Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ae/7ec3a9d2d4351f99e37bcb06b6b6f954512646bfdbf9742e1de727865daf/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12", size = 372179, upload-time = "2026-06-30T07:17:20.539Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ac/9cee911dff2aaa9a5a8354f6610bf2e6a616de9197c5fff4f54f82585f1e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5", size = 379993, upload-time = "2026-06-30T07:17:22.212Z" }, + { url = "https://files.pythonhosted.org/packages/83/6b/7c2a07ba88d1e9a936612f7a5d067467ed03d971d5a06f7d309dff044a7e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf", size = 398909, upload-time = "2026-06-30T07:17:23.66Z" }, + { url = "https://files.pythonhosted.org/packages/97/0b/776ffcb66783637b0031f6d58d6fb55913c8b5abf00aeecd46bf933fb477/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00", size = 546584, upload-time = "2026-06-30T07:17:25.264Z" }, + { url = "https://files.pythonhosted.org/packages/55/33/ba3bc04d7092bd553c9b2b195624992d2cc4f3de1f380b7b93cbee67bd79/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef", size = 614357, upload-time = "2026-06-30T07:17:26.888Z" }, + { url = "https://files.pythonhosted.org/packages/8b/71/14edf065f04630b1a8472f7653cad03f6c478bcf95ea0e6aed55451e33ea/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a", size = 576533, upload-time = "2026-06-30T07:17:28.546Z" }, + { url = "https://files.pythonhosted.org/packages/ba/76/65002b08596c389105720a8c0d22298b8dc25a4baf89b2ce431343c8b1de/rpds_py-2026.6.3-cp315-cp315t-win32.whl", hash = "sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577", size = 201204, upload-time = "2026-06-30T07:17:30.193Z" }, + { url = "https://files.pythonhosted.org/packages/8c/97/d855d6b3c322d1f27e26f5241c42016b56cf01377ea8ed348285f54652f0/rpds_py-2026.6.3-cp315-cp315t-win_amd64.whl", hash = "sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324", size = 220719, upload-time = "2026-06-30T07:17:31.788Z" }, + { url = "https://files.pythonhosted.org/packages/b4/9c/f0d19ac587fd0e4ab6b72cda355e9c5a6166b01ef7e064e437aef8eb9fef/rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4cf2d36a2357e4d07bb5a4f98801265327b48256867816cfd2ceb001e9754a8f", size = 349791, upload-time = "2026-06-30T07:17:33.315Z" }, + { url = "https://files.pythonhosted.org/packages/38/c7/1d49d204c9fd2ee6c537601dc4c1ba921e03363ca576bfab94a00254ac9a/rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:30c6dc199b24a5e3e81d50da0f00858c5bbdb2617a750395687f4339c5818171", size = 352842, upload-time = "2026-06-30T07:17:34.897Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e5/c0b5dc93cd0d4c06ce1f438907649514e2ea077bcd911e3154a51e96c38e/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9891e594296ab9dada6551c8e7b387b2721f27a67eecd528412e8906247a7b90", size = 382094, upload-time = "2026-06-30T07:17:36.514Z" }, + { url = "https://files.pythonhosted.org/packages/0d/54/ec0e907b4ca8d541112db352409bd15f871c9b243e0c92c9b5a46ae96f01/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5c2dc92304aa48a4a60443b548bb12f12e119d4b72f314015e67b9e1be97fca", size = 388662, upload-time = "2026-06-30T07:17:38.235Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f4/921c22a4fd0f1c1ac13a3996ffbf0aa67951e2c8ad0d1d9574938a2932e8/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:127e08c0642d880cf32ca47ec2a4a77b901f7e2dd1ad9762adb13955d72ffcc9", size = 504896, upload-time = "2026-06-30T07:17:39.689Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1b/a114b972cefa1ab1cdb3c7bb177cd3844a12826c507c722d3a73516dbbaf/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8bb68f03f395eb793220b45c097bd4d8c32944393da0fad8b999efac0868fc8c", size = 391545, upload-time = "2026-06-30T07:17:41.336Z" }, + { url = "https://files.pythonhosted.org/packages/4e/98/af9b3db77d47fcbe6c8c1f36e2c2147ec70292819e99c325f871584a1c11/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3450b693fde92133e9f51060568a4c31fcca76d5e53bbd611e689ca446517e9", size = 380059, upload-time = "2026-06-30T07:17:42.857Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ba/0efd8668b97c1d26a61566386c636a7a7a09829e474fdf807caa15a2c844/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:5e8d07bddee435a2ff6f1920e18feff28d0bc4533e42f4bf6927fbd073312c41", size = 393235, upload-time = "2026-06-30T07:17:44.637Z" }, + { url = "https://files.pythonhosted.org/packages/62/90/8c139ee9690f73b0829f32647de6f40d826f8f443af6fa72644f96351aac/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a83ae6c67b7676b9878378547ca8e93ed77a580037bcbcd1d32f739e1e6089c", size = 413008, upload-time = "2026-06-30T07:17:46.225Z" }, + { url = "https://files.pythonhosted.org/packages/9c/97/0043896fdd7828ce09a1d9a8b06433714d0960fc4ff3fc4aa72b666b764e/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2bfd04c19ddbd6640de0b51894d764bd2758854d5b75bd102d2ef10cb9c293a9", size = 558118, upload-time = "2026-06-30T07:17:47.759Z" }, + { url = "https://files.pythonhosted.org/packages/f6/40/02355f0e134f783a8f9814c4680a1bd311d37671577a5964ea838573ff37/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:ca6546b66be9dc4738b1b043d5ebd5488c66c578c5ff0fd0e8065313fe3afb76", size = 623138, upload-time = "2026-06-30T07:17:49.355Z" }, + { url = "https://files.pythonhosted.org/packages/10/85/48f0abdcef5cce4e034c7a5b0ceeceba0b01bf0d942824f4bb720afe2dec/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8e65860d238379ed982fd9ba690579b5e95af2f4840f99c772816dbe573cb826", size = 586486, upload-time = "2026-06-30T07:17:51.141Z" }, ] [[package]] name = "ruff" -version = "0.15.20" +version = "0.15.21" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/dc/35b341fc554ba02f217fc10da57d1a75168cfbcf75b0ef2202176d4c4f2d/ruff-0.15.20.tar.gz", hash = "sha256:1416eb04349192646b54de98f146c4f59afe37d0decfc02c3cbbf396f3a28566", size = 4755489, upload-time = "2026-06-25T17:20:37.578Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/36/6f65aa9989acdec45d417192d8f4e7921931d8a6cf87ac74bce3eed98a8e/ruff-0.15.21.tar.gz", hash = "sha256:d0cfc841c572283c36548f82664a54ce6565567f1b0d5b4cf2caac693d8b7500", size = 4769401, upload-time = "2026-07-09T20:01:34.005Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/d9/2d5014f0253ba541d2061d9fa7193f48e941c8b21bb88a7ff9bbe0bd0596/ruff-0.15.20-py3-none-linux_armv6l.whl", hash = "sha256:00e188c53e499c3c1637f73c91dcf2fb56d576cab76ce1be50a27c4e80e37078", size = 10839665, upload-time = "2026-06-25T17:19:44.702Z" }, - { url = "https://files.pythonhosted.org/packages/c6/d3/ac1798ba64f670698867fcfc591d50e7e421bef137db564858f619a30fcf/ruff-0.15.20-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9ebd1fd9b9c95fc0bd7b2761aebec1f030013d2e193a2901b224af68fe47251b", size = 11208649, upload-time = "2026-06-25T17:19:48.787Z" }, - { url = "https://files.pythonhosted.org/packages/47/47/d3ac899991202095dfcf3d5176be4272642be3cf981a2f1a30f72a2afb95/ruff-0.15.20-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c5b16cdd67ca108185cd36dce98c576350c03b1660a751de725fb049193a0632", size = 10622638, upload-time = "2026-06-25T17:19:51.354Z" }, - { url = "https://files.pythonhosted.org/packages/33/13/4e043fe30aa94d4ff5213a9881fc296d12960f5971b234a5263fdc225312/ruff-0.15.20-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3413bb3c3d2ca6a8208f1f4809cd2dca3c6de6d0b491c0e70847672bde6e6efd", size = 10984227, upload-time = "2026-06-25T17:19:54.044Z" }, - { url = "https://files.pythonhosted.org/packages/76/e6/92e7bf40388bc5800073b96564f56264f7e48bfd1a498f5ced6ae6d5a769/ruff-0.15.20-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd7ec42b3bb3da066488db093308a69c4ac5ee6d2af333a86ba6e2eb2e7dd44b", size = 10622882, upload-time = "2026-06-25T17:19:57.037Z" }, - { url = "https://files.pythonhosted.org/packages/13/7a/43460be3f24495a3aa46d4b16873e2c4941b3b5f0b00cf88c03b7b94b339/ruff-0.15.20-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1a36ad0eb77fba9aabfb69ede54de6f376d04ac18ebea022847046d340a8267", size = 11474808, upload-time = "2026-06-25T17:20:00.357Z" }, - { url = "https://files.pythonhosted.org/packages/27/a0/f37077884873221c6b33b4ab49eb18f9f88e54a16a25a5bca59bef46dd66/ruff-0.15.20-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6df3b1e4610432f0386dba04d853b5f08cbbc903410c6fcc02f620f05aff53c", size = 12293094, upload-time = "2026-06-25T17:20:03.446Z" }, - { url = "https://files.pythonhosted.org/packages/a6/74/165545b60256a9704c21ac0ec4a0d07933b320812f9584836c9f4aca4292/ruff-0.15.20-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e89f198a1ea6ef0d727c1cf16088bc91a6cb0ab947dedc966715691647186eae", size = 11526176, upload-time = "2026-06-25T17:20:06.301Z" }, - { url = "https://files.pythonhosted.org/packages/86/b1/a976a136d40ade83ce743578399865f57001003a409acadc0ecbb3051082/ruff-0.15.20-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309809086c2acb67624950a3c8133e80f32d0d3e27106c0cd60ff26657c9f24b", size = 11520767, upload-time = "2026-06-25T17:20:09.191Z" }, - { url = "https://files.pythonhosted.org/packages/19/0f/f032696cb01c9b54c0263fa393474d7758f1cdc021a01b04e3cbc2500999/ruff-0.15.20-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2d2374caa2f2c2f9e2b7da0a50802cfb8b79f55a9b5e49379f564544fbf56487", size = 11500132, upload-time = "2026-06-25T17:20:13.602Z" }, - { url = "https://files.pythonhosted.org/packages/4b/f4/51b1a14bc69e8c224b15dab9cce8e99b425e0455d462caa2b3c9be2b6a8e/ruff-0.15.20-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a1ed17b65293e0c2f22fc387bc13198a5de94bf4429589b0ff6946b0feaf21a3", size = 10943828, upload-time = "2026-06-25T17:20:16.635Z" }, - { url = "https://files.pythonhosted.org/packages/71/4b/fe267640783cd02bf6c5cc290b1df1051be2ec294c678b5c15fe19e52343/ruff-0.15.20-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f701305e66b38ea6c91882490eb73459796808e4c6362a1b765255e0cdcd4053", size = 10645418, upload-time = "2026-06-25T17:20:19.4Z" }, - { url = "https://files.pythonhosted.org/packages/b0/c0/a65aa4ec2f5e87a1df32dc3ec1fede434fe3dfd5cbcf3b503cafc676ab54/ruff-0.15.20-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5b9c0c367ad8e5d0d5b5b8537864c469a0a0e55417aadfbeca41fa61333be9f4", size = 11211770, upload-time = "2026-06-25T17:20:22.033Z" }, - { url = "https://files.pythonhosted.org/packages/5a/a4/0caa331d954ae2723d729d351c989cb4ca8b6077d5c6c2cb6de75e98c041/ruff-0.15.20-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:01cc00dd58f0df339d0e902219dd53990ea99996a0344e5d9cc8d45d5307e460", size = 11618698, upload-time = "2026-06-25T17:20:25.259Z" }, - { url = "https://files.pythonhosted.org/packages/10/9b/5f14927848d2fd4aa891fd88d883788c5a7baba561c7874732364045708c/ruff-0.15.20-py3-none-win32.whl", hash = "sha256:ed65ef510e43a137207e0f01cfcf998aeddb1aeeda5c9d35023e910284d7cf21", size = 10857322, upload-time = "2026-06-25T17:20:28.612Z" }, - { url = "https://files.pythonhosted.org/packages/fa/f0/fe47c501f9dea92a26d788ff98bb5d92ed4cb4c88792c5c88af6b697dc8e/ruff-0.15.20-py3-none-win_amd64.whl", hash = "sha256:a525c81c70fb0380344dd1d8745d8cc1c890b7fc94a58d5a07bd8eb9557b8415", size = 11993274, upload-time = "2026-06-25T17:20:31.871Z" }, - { url = "https://files.pythonhosted.org/packages/d7/2b/9555445e1201d92b3195f45cdb153a0b68f24e0a4273f6e3d5ab46e212bb/ruff-0.15.20-py3-none-win_arm64.whl", hash = "sha256:2f5b2a6d614e8700388806a14996c40fab2c47b819ef57d790a34878858ed9ca", size = 11343498, upload-time = "2026-06-25T17:20:35.03Z" }, + { url = "https://files.pythonhosted.org/packages/d0/c6/ede15cac6839f3dbce52565c8f5164a8210e669c7bc4decb03e5bdf47d0d/ruff-0.15.21-py3-none-linux_armv6l.whl", hash = "sha256:63ea0e965e5d73c90e95b2434beeafc70820536717f561b32ab6e777cb9bdf5d", size = 10854342, upload-time = "2026-07-09T20:00:53.998Z" }, + { url = "https://files.pythonhosted.org/packages/28/9d/d825b07ee7ea9e2d61df92a860033c94e06e7300d50a1c2653aac27d24fe/ruff-0.15.21-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0f212c5d7d54c01bbfe6dcab02b724a39300f3e34ed7acbe995ccb320a2c58bd", size = 11139539, upload-time = "2026-07-09T20:00:57.809Z" }, + { url = "https://files.pythonhosted.org/packages/f5/de/3b107712e642f063c7a9e0887c427b22cb44097de5aab36c05f2e280670c/ruff-0.15.21-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e6312e41bc96791299614995ea3a977c5857c3b5662b1ecef6755b02b87cb646", size = 10595437, upload-time = "2026-07-09T20:01:00.006Z" }, + { url = "https://files.pythonhosted.org/packages/9a/6f/b4523cc90ba239ede441447a19d0c968846a3012e5a0b0c5b62831a3d5e3/ruff-0.15.21-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01d65b4831c6b2a4ba8ee6faa84049d44d982b7a706e622c4094c509e51673be", size = 10990053, upload-time = "2026-07-09T20:01:02.187Z" }, + { url = "https://files.pythonhosted.org/packages/92/cc/c6a9872a5375f0628875481cf2f66b13d7d865bf3ca2e57f91c7e762d976/ruff-0.15.21-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c5a913a589120ce67933d5d05fd6ddbcc2481c6a054980ee767f7414c72b4fd", size = 10666096, upload-time = "2026-07-09T20:01:04.299Z" }, + { url = "https://files.pythonhosted.org/packages/ab/97/c621f7a17e097f1790fa3af6374138823b330b2d03fc38337945daca212c/ruff-0.15.21-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef04b681d02ad4dc9620f00f83ac5c22f652d0e9a9cfe431d219b16ad5ccc41", size = 11537011, upload-time = "2026-07-09T20:01:06.771Z" }, + { url = "https://files.pythonhosted.org/packages/ea/51/d928727e476e25ccc57c6f449ffd80241a651a973ad949d39cfb2a771d28/ruff-0.15.21-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16d090c0740916594157e75b80d666eab8e78083b39b3b0e1d698f4670a17b86", size = 12347101, upload-time = "2026-07-09T20:01:08.859Z" }, + { url = "https://files.pythonhosted.org/packages/1e/88/8cd62026802b16018ad06931d87997cf795ba2a6239ab659606c87d96bf0/ruff-0.15.21-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a10e74757dd65004d779b73e2f3c5210156d9980b41224d50d2ebcf1db51e67", size = 11572001, upload-time = "2026-07-09T20:01:11.092Z" }, + { url = "https://files.pythonhosted.org/packages/b2/97/f63084cf55444fc110e8cb985ebfcc592af47f597d44453d778cb81bc156/ruff-0.15.21-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bab0905d2f29e0d9fbc3c373ed23db0095edaa3f71f1f4f519ec15134d9e85c8", size = 11549239, upload-time = "2026-07-09T20:01:13.27Z" }, + { url = "https://files.pythonhosted.org/packages/9d/77/f107da4a2874b7715914b03f09ba9c54424de3ff8a1cc5d015d3ee2ce0ac/ruff-0.15.21-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:00eca240af5789fec6fe7df74c088cc1f9644ed83027113468efba7c92b94075", size = 11535340, upload-time = "2026-07-09T20:01:15.206Z" }, + { url = "https://files.pythonhosted.org/packages/d5/e9/601deb322d3303a7bf212b0100ead6f2ee3f6a044d89c30f2f92bf83c731/ruff-0.15.21-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:262ab31557a75141325e32d3357f3597645a7f084e732b6b054dde428ecd9341", size = 10964048, upload-time = "2026-07-09T20:01:17.723Z" }, + { url = "https://files.pythonhosted.org/packages/ea/2e/0f2176d1e99c15192caea19c8c3a0a955246b4cb4de795042eeb616345cd/ruff-0.15.21-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:659c4e7a4212f83306045ec7c5e5a356d16d9a6ef4ae0c7a4d872914fc655d9d", size = 10667055, upload-time = "2026-07-09T20:01:19.73Z" }, + { url = "https://files.pythonhosted.org/packages/48/60/abd74a02e0c4214f12a68becfd30af7165cfdcb0e661ecdc60bbb949c09a/ruff-0.15.21-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9e866eab611a5f959d36df2d10e446973a3610bc42b0c15b31dc27977d59c233", size = 11242043, upload-time = "2026-07-09T20:01:21.947Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c6/583075d8ccabb4b229345edcaf1545eb3d8d6be90f686a479d7e94088bbf/ruff-0.15.21-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e89bc93c0d3803ba870b55c29671bad9dc6d94bb1eb181b056b52eb05b52854f", size = 11648064, upload-time = "2026-07-09T20:01:24.023Z" }, + { url = "https://files.pythonhosted.org/packages/3a/3c/37d0ecb729a7cc2d393ea7dce316fc585680f35d93b8d62139d7d0a3700c/ruff-0.15.21-py3-none-win32.whl", hash = "sha256:01f8d5be84823c172b389e123174f781f9daf86d6c58719d603f941932195cdd", size = 10896555, upload-time = "2026-07-09T20:01:26.941Z" }, + { url = "https://files.pythonhosted.org/packages/c0/b8/e43466b2a6067ce91e669068f6e28d6c719a920f014b070d5c8731725de3/ruff-0.15.21-py3-none-win_amd64.whl", hash = "sha256:d4b8d9a2f0f12b816b50447f6eccb9f4bb01a6b82c86b50fb3b5354b458dc6d3", size = 12038772, upload-time = "2026-07-09T20:01:29.497Z" }, + { url = "https://files.pythonhosted.org/packages/dd/75/e90ab9aeece218a9fc5a5bc3ec97d0ee6bb3c4ff95869463c1de58e29a1c/ruff-0.15.21-py3-none-win_arm64.whl", hash = "sha256:6e83115d4b9377c1cbc13abf0e051f069fab0ef815ea0504a8a008cee24dd0a8", size = 11375265, upload-time = "2026-07-09T20:01:31.772Z" }, ] [[package]] name = "ty" -version = "0.0.55" +version = "0.0.58" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/08/48/f687c8d268e3581f2f104d1f2ac5944d5b5e841b3695c613b3f263e5bbf7/ty-0.0.55.tar.gz", hash = "sha256:88ca87073825a79a8327c550efcc86cec94344890244c5946f84c9e44a969f31", size = 6040230, upload-time = "2026-06-27T00:27:29.385Z" } +sdist = { url = "https://files.pythonhosted.org/packages/09/4c/26c90732658903aeb1d289208f7b7b492fa21029e0c4d6c51bdd6f8f5e51/ty-0.0.58.tar.gz", hash = "sha256:8f22484174e65c630660a454bf81b80cae7a3a7e70479f19c170d6cd87949258", size = 6133665, upload-time = "2026-07-10T03:09:30.542Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/87/a3/1a90ba7e5a61c6d09adb92346ddba97668095fc257b577af433e5ac4f404/ty-0.0.55-py3-none-linux_armv6l.whl", hash = "sha256:31e83eef512d066542fe990fe1a3b814423abd1616376c54e48af7045b3e1749", size = 11677249, upload-time = "2026-06-27T00:26:52.18Z" }, - { url = "https://files.pythonhosted.org/packages/82/3a/669f9aa478c38243e213a2684db1502086026cfadc15bb1b29b7cbde030d/ty-0.0.55-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ab4bca857950608fea73e269e2da369d43e6467131de85160d68e2fa466fa248", size = 11444180, upload-time = "2026-06-27T00:26:54.576Z" }, - { url = "https://files.pythonhosted.org/packages/15/a4/6a4b2507a53ce6530c66c5b4fe0d58551eb1748ffa9e0696c32fdd55bbd4/ty-0.0.55-py3-none-macosx_11_0_arm64.whl", hash = "sha256:55032bfd31bf2c5355ee81bdc6407b144a1cc7ee41e5681dd1368e4cef2ba327", size = 10963134, upload-time = "2026-06-27T00:26:57.348Z" }, - { url = "https://files.pythonhosted.org/packages/ce/ae/a3b1a0f1cc83b7d258662cb98aa80a720c2e671d0e8fa0d17a4d5d057a7a/ty-0.0.55-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef1e049f69ce65b3c269af67624607f435e1c32319786c1e453ef9611502f295", size = 11493517, upload-time = "2026-06-27T00:26:59.26Z" }, - { url = "https://files.pythonhosted.org/packages/0d/9f/311ce39065a979ef40a9b847f685c8e02464e53adf1671e081eea90640ca/ty-0.0.55-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:631409975c681d5a280fc5a99b7b32e9e801f33be7567c6b42ec331362f59d7d", size = 11460590, upload-time = "2026-06-27T00:27:01.425Z" }, - { url = "https://files.pythonhosted.org/packages/cd/8f/3bf29aa77bd78aae48275153135a2052fa7d3ccdf1ecabeb99c8773abd66/ty-0.0.55-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e08cb0436e68b9351555ae8f2697138c9009b4d5b4ae4272232988b2a431a98f", size = 12098430, upload-time = "2026-06-27T00:27:03.596Z" }, - { url = "https://files.pythonhosted.org/packages/bc/6e/e88411a88240b94640bba06fb6d0d92b247fbeef47ee2bc71f39e58c2558/ty-0.0.55-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16c215ad9f823829409b94ee188cfaa4563f6e1384f6ce3fecb1db75f6c7cf7c", size = 12673086, upload-time = "2026-06-27T00:27:05.589Z" }, - { url = "https://files.pythonhosted.org/packages/6c/7e/8f1762fb7f9245a68ba5ae338d73c59403ce57554e5d311b8bb55027b0ec/ty-0.0.55-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b510eb8f4032baf11b7aee2f1d53babc3b4ca03939b9cdcf6a9d15761d575188", size = 12242559, upload-time = "2026-06-27T00:27:07.714Z" }, - { url = "https://files.pythonhosted.org/packages/72/1f/143657daf2670d977dac83435f1fe03d4843efb798d8e1e75950e541aadd/ty-0.0.55-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ddc05e7959709c3b9b83aa627128a80446865e3c1a4882638dcff6d776dc34a", size = 12021409, upload-time = "2026-06-27T00:27:09.881Z" }, - { url = "https://files.pythonhosted.org/packages/6d/30/69487c439dd1fad3a4a3d96f0a472193de297eaba6fc4b8ea687ce434ac2/ty-0.0.55-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:636e8e5078787b8c6916c94e1406719f10189a4ca6b37b813a5922ce5857a8c7", size = 12303807, upload-time = "2026-06-27T00:27:11.986Z" }, - { url = "https://files.pythonhosted.org/packages/e8/ca/cd88b6493dafc7db077f5e17c0438eb3af6e2d6d08f616dbb52a8ddfd567/ty-0.0.55-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ef7d6deaacb73fec603666b5471f1dc5a5699aa84e11a6d4d644dd07ca72121e", size = 11441263, upload-time = "2026-06-27T00:27:14.087Z" }, - { url = "https://files.pythonhosted.org/packages/aa/fe/66b6915671653ab739f71e4f1b0528e69da64429b7ebf3840c625b6e43f2/ty-0.0.55-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:9aeea0fe5875d3cf37faf0e44d0fdf9669335467749741b8fc0103916fb5cd32", size = 11484584, upload-time = "2026-06-27T00:27:16.311Z" }, - { url = "https://files.pythonhosted.org/packages/4a/4f/7a9c0bbac8b899e9f6c0ec110c6612f52e4db35f6bb17ddc0ef60384fa3e/ty-0.0.55-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0b699c01310dbd2705a07c97c5f4aaeedef61bd9adeea2e7c46aed32401d3576", size = 11759309, upload-time = "2026-06-27T00:27:18.471Z" }, - { url = "https://files.pythonhosted.org/packages/ca/de/b6f8b1b69aa631b5716ef3f985c3b56de0e46c2499cc00d30c402b41f714/ty-0.0.55-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:32cbeba543e46de2a983ec6d525d8b56514f7422bd1e1b57c44ccf7bfa72c38a", size = 12128755, upload-time = "2026-06-27T00:27:20.55Z" }, - { url = "https://files.pythonhosted.org/packages/7d/90/a912531e51ee7e076b42972479290fa687c0f5e747b7e773f3033164acaa/ty-0.0.55-py3-none-win32.whl", hash = "sha256:52b968e24eb4f7a5c3bd251db1f99f60dd385890356d38fc619d84f1b423446a", size = 11117501, upload-time = "2026-06-27T00:27:22.714Z" }, - { url = "https://files.pythonhosted.org/packages/4c/7a/99d59843bf8908a7f9f4d13fda107dbad07b7faa28ecd7860eacf363fb1c/ty-0.0.55-py3-none-win_amd64.whl", hash = "sha256:bf39cbfdc0add44d94bd3fff1f53c351418d134b6a66b87efdb7876d7b7a2224", size = 12150106, upload-time = "2026-06-27T00:27:24.881Z" }, - { url = "https://files.pythonhosted.org/packages/b3/44/20987505cedf2a865b08482f0eabc181fd9599b062964057ec8a128a4296/ty-0.0.55-py3-none-win_arm64.whl", hash = "sha256:f7f3700a9a060e8f1af11e4fb63fafcaf272b041781f4ccdfda2b3b5c6c1e439", size = 11560157, upload-time = "2026-06-27T00:27:27.332Z" }, + { url = "https://files.pythonhosted.org/packages/51/e1/5d1aa2a75829459834689f080e4be7a9d8828ce14b939ebed69161a35811/ty-0.0.58-py3-none-linux_armv6l.whl", hash = "sha256:47412850b6fbef61c42f244f6a51aa2f2c9e91f08cfbafd2d1e3730d2419d317", size = 11706915, upload-time = "2026-07-10T03:08:51.028Z" }, + { url = "https://files.pythonhosted.org/packages/96/e1/929eda9cc72a9afe39a03c76f946a503508d37343cc8ff2e64226afda105/ty-0.0.58-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:79deb7bb4e5b3a1eee6ab9abc724d6ce3559d4977982707f310a139ee11fc703", size = 11532079, upload-time = "2026-07-10T03:08:53.771Z" }, + { url = "https://files.pythonhosted.org/packages/07/43/ebc58b3fc7d86a7abba2829f1674f7d4ae3a08f9794c1f31b707950c871f/ty-0.0.58-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5a28af3187e661708a386d44a4fc32896a5f589fb07b734a11ab2f516e7572b7", size = 11092983, upload-time = "2026-07-10T03:08:56.025Z" }, + { url = "https://files.pythonhosted.org/packages/92/6e/9547dbb8e51e47749cfb721a02b4fc862f9a932fa0f66a34a4d6dc429bb1/ty-0.0.58-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21a6977e34bc362fb378add46e59d5d56331c1c36727e6904767217ca8479718", size = 11490492, upload-time = "2026-07-10T03:08:58.49Z" }, + { url = "https://files.pythonhosted.org/packages/d9/76/9f83b51b5e7795d6c8d76b4bb1bb7cebf4c10d609e846c02ab138e404556/ty-0.0.58-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3ac23e6bf6105ceca46632debf1b10b98125aaf60202aeae02f6abfeea242b3d", size = 11503696, upload-time = "2026-07-10T03:09:00.741Z" }, + { url = "https://files.pythonhosted.org/packages/47/9d/9fd48a0696c680f74e50f31cd54e524eeb58c97ea9bb1c3b8e04230ba215/ty-0.0.58-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb6df6a8c6a21894807a49851370ec7fc64aa910296c78ada31db0ef19359112", size = 12158653, upload-time = "2026-07-10T03:09:02.998Z" }, + { url = "https://files.pythonhosted.org/packages/bc/ea/b5de845d2d8edae04d901c7585af7f04a057e18b26311f7fa4ca62b2da30/ty-0.0.58-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9df5847eebc026cde088b44420a03f7c6c169a7db747176bdf0a656eb1144713", size = 12723019, upload-time = "2026-07-10T03:09:05.291Z" }, + { url = "https://files.pythonhosted.org/packages/17/1c/54083b23eeff1e101f50b6df6a2c7f1e14b31abe0577c91bcae9e2c9395d/ty-0.0.58-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53a331a7f1f85872c810676a0f16096ef98c1b95c8c9a573fe7fde64d0a93e7c", size = 12275715, upload-time = "2026-07-10T03:09:07.564Z" }, + { url = "https://files.pythonhosted.org/packages/22/88/16925434b06faa49d36aa7e7508a6821ec6feacb429ca2fd80a3d52716b4/ty-0.0.58-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb0b05cd479fdcedc2e6781d376ee1a33569f37ae7f58357004635f615c4374c", size = 12033075, upload-time = "2026-07-10T03:09:10.222Z" }, + { url = "https://files.pythonhosted.org/packages/58/2b/b55708dd483982ae03d14da3667e3f0346cd384e11cca3dd3674a8b598c1/ty-0.0.58-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9a0012786077e5becbb6add9fe51eda1d4d36d249afd3ae6cd141d554af15ae3", size = 12367729, upload-time = "2026-07-10T03:09:12.338Z" }, + { url = "https://files.pythonhosted.org/packages/91/a3/99ad66652956408f7e9ac3db6b4a416199d773b6c073cf95b0eea126d340/ty-0.0.58-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4ede96d7f6d149156da254e784b062b817736b68d4c6d660555a3d02d96966fb", size = 11439798, upload-time = "2026-07-10T03:09:14.518Z" }, + { url = "https://files.pythonhosted.org/packages/ee/23/344ceed4fe02ed498711e1f4a47b6e311fb1e9c4fecc19d31894be7a3472/ty-0.0.58-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:47608e58f73901b989402e6f283249cda4c2314282ec368aa74ab61761c62bd5", size = 11512695, upload-time = "2026-07-10T03:09:16.852Z" }, + { url = "https://files.pythonhosted.org/packages/55/cf/3801831812c468f3fd0b3043a80f557a9aa90e6c27375763d7c3121e03f2/ty-0.0.58-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9757de17cc17e4c6bc26e18d4e26dea52ffee53d41a10d9087c6465e6ab12e2b", size = 11812253, upload-time = "2026-07-10T03:09:19.151Z" }, + { url = "https://files.pythonhosted.org/packages/7b/80/bce4f245787b77d1ec9feec7d9161eade5e01a77dbc132e016b24df83b0d/ty-0.0.58-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f3776d54c1d935fcb8f814bd58efba402c86c555f93e1144c59d087e7aa8b906", size = 12123918, upload-time = "2026-07-10T03:09:21.636Z" }, + { url = "https://files.pythonhosted.org/packages/46/00/bab3d6268e7e88c792bf7cdde81bd11b31aa587eaba75196502b729747c8/ty-0.0.58-py3-none-win32.whl", hash = "sha256:8f50ec0ac3b42baa4c75895dc367071dc86b00ab440d29fdc72c633286a94815", size = 11230897, upload-time = "2026-07-10T03:09:23.871Z" }, + { url = "https://files.pythonhosted.org/packages/9c/68/d9504c895864aaa84a840dce6ac7f8e681f6938be1882c8d4f60832dbe57/ty-0.0.58-py3-none-win_amd64.whl", hash = "sha256:de8847b3a65475ae4773bddd3126bfcf29f017e88967c4dcc9c75d743a4d3e5c", size = 12299376, upload-time = "2026-07-10T03:09:26.292Z" }, + { url = "https://files.pythonhosted.org/packages/26/04/c9847cb680b5fe8e1f7d7b483edd5cedcc29394496e7b8ed40d96be796ba/ty-0.0.58-py3-none-win_arm64.whl", hash = "sha256:7334bb38789878f60677f2eb9c1de4bfdf4583e2443790989c77da9b10fe0989", size = 11710495, upload-time = "2026-07-10T03:09:28.478Z" }, ] [[package]] name = "typing-extensions" -version = "4.15.0" +version = "4.16.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, ]