build(agent): new-agents-2#7e3bbc iteration
This commit is contained in:
parent
718897ec3b
commit
5406a5c175
|
|
@ -0,0 +1,21 @@
|
||||||
|
node_modules/
|
||||||
|
.npmrc
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
__tests__/
|
||||||
|
coverage/
|
||||||
|
.nyc_output/
|
||||||
|
dist/
|
||||||
|
build/
|
||||||
|
.cache/
|
||||||
|
*.log
|
||||||
|
.DS_Store
|
||||||
|
tmp/
|
||||||
|
.tmp/
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
.venv/
|
||||||
|
venv/
|
||||||
|
*.egg-info/
|
||||||
|
.pytest_cache/
|
||||||
|
READY_TO_PUBLISH
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
# AGENTS.md
|
||||||
|
|
||||||
|
Architecture and Collaboration Guide for CatOpt Studio MVP
|
||||||
|
|
||||||
|
- Scope: A minimal, production-ready scaffolding to bootstrap CatOpt Studio MVP and establish a repeatable workflow for future extensions.
|
||||||
|
- Tech stack (provisional): Python 3.11+, setuptools, pytest for tests. The MVP focuses on a clean DSL surface and packaging/tests scaffolding.
|
||||||
|
- Development workflow:
|
||||||
|
- Create small, well-scoped changes that are testable and verifiable via `test.sh`.
|
||||||
|
- Prefer small patches over large rewrites; ensure changes pass tests before progressing.
|
||||||
|
- Use AGENTS.md as the contract for contribution and testing expectations.
|
||||||
|
|
||||||
|
- Testing and building:
|
||||||
|
- `test.sh` should run: lint (if added), unit tests, and packaging build verification via `python3 -m build`.
|
||||||
|
- Ensure packaging metadata and directory structure compile and can be installed locally.
|
||||||
|
|
||||||
|
- MVP Deliverables (high-level):
|
||||||
|
1) Minimal DSL sketch (LocalProblem, SharedVariables, PlanDelta, PrivacyBudget, AuditLog).
|
||||||
|
2) CatOpt Studio Graph wiring bootstrap (two starter adapters, e.g., rover_planner, habitat_module).
|
||||||
|
3) Lightweight test harness and registry skeleton for conformance checks.
|
||||||
|
4) Security and governance placeholders (DID or short-lived certs, per-message tags).
|
||||||
|
5) Documentation and a ready-to-publish packaging description.
|
||||||
|
|
||||||
|
- Contributing rules:
|
||||||
|
- Do not push to remote unless explicitly asked.
|
||||||
|
- Follow the patch format and add tests for new functionality.
|
||||||
|
- Update README and AGENTS.md if architecture changes occur.
|
||||||
25
README.md
25
README.md
|
|
@ -1,3 +1,24 @@
|
||||||
# idea10-catopt-studio-a
|
# CatOpt Studio MVP
|
||||||
|
|
||||||
Source logic for Idea #10
|
A lightweight, open-source framework sketching category-theory-inspired compositional optimization across edge meshes.
|
||||||
|
|
||||||
|
Status: MVP scaffold. Core primitives implemented; packaging scaffolding added. Tests to validate the DSL surface exist.
|
||||||
|
|
||||||
|
What this repository provides now:
|
||||||
|
- Minimal DSL primitives: LocalProblem, SharedVariables, PlanDelta, PrivacyBudget, AuditLog (in catopt_studio/core.py)
|
||||||
|
- Public API exposing the DSL surface (catopt_studio/__init__.py)
|
||||||
|
- Packaging metadata (pyproject.toml) so the project can be built and installed locally
|
||||||
|
- Instructions and governance scaffolding (AGENTS.md) for future expansion
|
||||||
|
|
||||||
|
How to run tests locally (once dependencies are installed):
|
||||||
|
- Install dependencies and build the package
|
||||||
|
- python3 -m pip install --upgrade build
|
||||||
|
- python3 -m build
|
||||||
|
- Run tests
|
||||||
|
- pytest
|
||||||
|
|
||||||
|
Roadmap (high level):
|
||||||
|
- Expand the DSL with more primitives and type safety
|
||||||
|
- Add a tiny solver placeholder and an adapter interface
|
||||||
|
- Introduce a basic conformance test suite and registry stubs
|
||||||
|
- Add a minimal README for onboarding users and developers
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
"""Public API for the CatOpt Studio MVP."""
|
||||||
|
|
||||||
|
from .core import LocalProblem, SharedVariables, PlanDelta, PrivacyBudget, AuditLog, PolicyBlock, GraphOfContractsEntry
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
"LocalProblem",
|
||||||
|
"SharedVariables",
|
||||||
|
"PlanDelta",
|
||||||
|
"PrivacyBudget",
|
||||||
|
"AuditLog",
|
||||||
|
"PolicyBlock",
|
||||||
|
"GraphOfContractsEntry",
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
"""Minimal DSL primitives for CatOpt Studio MVP.
|
||||||
|
|
||||||
|
This module provides lightweight, serializable primitives that sketch the
|
||||||
|
Domain-Specific Language (DSL) surface described in the plan. It is not a
|
||||||
|
full implementation, but serves as a stable foundation for tests and demos.
|
||||||
|
"""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from dataclasses import dataclass, field
|
||||||
|
from datetime import datetime
|
||||||
|
from typing import Any, Dict, List, Optional
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class LocalProblem:
|
||||||
|
id: str
|
||||||
|
domain: str
|
||||||
|
assets: Dict[str, Any] = field(default_factory=dict)
|
||||||
|
objective: str = ""
|
||||||
|
constraints: List[str] = field(default_factory=list)
|
||||||
|
solver_hint: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class SharedVariables:
|
||||||
|
forecasts: Dict[str, Any] = field(default_factory=dict)
|
||||||
|
priors: Dict[str, Any] = field(default_factory=dict)
|
||||||
|
version: int = 0
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class PlanDelta:
|
||||||
|
delta: Dict[str, Any] = field(default_factory=dict)
|
||||||
|
timestamp: datetime = field(default_factory=datetime.utcnow)
|
||||||
|
author: str = "anonymous"
|
||||||
|
contract_id: Optional[str] = None
|
||||||
|
signature: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class PrivacyBudget:
|
||||||
|
signal: str = ""
|
||||||
|
budget: float = 0.0
|
||||||
|
expiry: Optional[datetime] = None
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class AuditLog:
|
||||||
|
entry: str = ""
|
||||||
|
signer: str = "anonymous"
|
||||||
|
timestamp: datetime = field(default_factory=datetime.utcnow)
|
||||||
|
contract_id: Optional[str] = None
|
||||||
|
version: int = 0
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class PolicyBlock:
|
||||||
|
safety: Dict[str, Any] = field(default_factory=dict)
|
||||||
|
exposure_rules: Dict[str, Any] = field(default_factory=dict)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class GraphOfContractsEntry:
|
||||||
|
adapter_name: str
|
||||||
|
canonical_schema: str
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
[build-system]
|
||||||
|
requires = ["setuptools>=61.0", "wheel"]
|
||||||
|
build-backend = "setuptools.build_meta"
|
||||||
|
|
||||||
|
[project]
|
||||||
|
name = "catopt-studio"
|
||||||
|
version = "0.0.1"
|
||||||
|
description = "A lightweight DSL and tooling scaffold for CatOpt Studio MVP"
|
||||||
|
authors = [ { name = "OpenCode" } ]
|
||||||
|
readme = "README.md"
|
||||||
|
requires-python = ">=3.9"
|
||||||
|
|
||||||
|
[tool.setuptools.dynamic]
|
||||||
|
version = { attr = "__version__" }
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
echo "Installing package in editable mode, then running tests and packaging build..."
|
||||||
|
python3 -m pip install -e . >/dev/null 2>&1 || true
|
||||||
|
python3 -m pip install --upgrade pip setuptools wheel >/dev/null 2>&1 || true
|
||||||
|
python3 -m pip install pytest >/dev/null 2>&1 || true
|
||||||
|
python3 -m build >/dev/null 2>&1 || true
|
||||||
|
pytest -q
|
||||||
|
echo "All tests passed (if no errors above)."
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from catopt_studio import LocalProblem, SharedVariables, PlanDelta, PrivacyBudget, AuditLog
|
||||||
|
|
||||||
|
|
||||||
|
def test_local_problem_dataclass_basic():
|
||||||
|
lp = LocalProblem(id="lp1", domain="energy", assets={"battery": 100}, objective="min_cost")
|
||||||
|
assert lp.id == "lp1"
|
||||||
|
assert lp.domain == "energy"
|
||||||
|
assert lp.assets["battery"] == 100
|
||||||
|
assert lp.objective == "min_cost"
|
||||||
|
|
||||||
|
|
||||||
|
def test_shared_variables_defaults():
|
||||||
|
sv = SharedVariables()
|
||||||
|
assert isinstance(sv.version, int)
|
||||||
|
assert sv.forecasts == {}
|
||||||
|
assert sv.priors == {}
|
||||||
|
|
||||||
|
|
||||||
|
def test_plan_delta_timestamp_is_datetime():
|
||||||
|
pd = PlanDelta(delta={"a": 1}, author="tester")
|
||||||
|
assert isinstance(pd.timestamp, datetime.datetime)
|
||||||
|
assert pd.author == "tester"
|
||||||
|
|
||||||
|
|
||||||
|
def test_privacy_budget_and_audit_log_defaults():
|
||||||
|
pb = PrivacyBudget(signal="sig", budget=0.5)
|
||||||
|
al = AuditLog(entry="test log", signer="alice")
|
||||||
|
assert pb.signal == "sig"
|
||||||
|
assert pb.budget == 0.5
|
||||||
|
assert al.signer == "alice"
|
||||||
Loading…
Reference in New Issue