Skip to content

Commit ae16d3e

Browse files
authored
Merge pull request #949 from dataelement/v1.11.4
Prepare the v1.11.4 release candidate
2 parents 251aeba + 9838292 commit ae16d3e

303 files changed

Lines changed: 36759 additions & 2685 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.env.example‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ MINIO_API_PORT=9000
7878
MINIO_CONSOLE_PORT=9001
7979
API_PORT=8000
8080

81+
# Code Executor operation timeout defaults (seconds).
82+
SANDBOX_DEFAULT_TIMEOUT=180
83+
SANDBOX_MAX_TIMEOUT=300
84+
8185
# Jina AI API key (for jina_search and jina_read tools — get one at https://jina.ai)
8286
# Without a key, the tools still work but with lower rate limits
8387
JINA_API_KEY=

‎.gitignore‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ backend/tests/test_agent_api_live.py
4343
.coaligne/
4444
.clawith-local-designs/
4545

46+
# Local generated and temporary artifacts
47+
/.tmp/
48+
/tmp/
49+
/outputs/
50+
/docs/internal/
51+
4652
# Local Toolathlon benchmark harness (never commit or deploy)
4753
backend/app/scripts/toolathlon_benchmark.py
4854
backend/app/services/agent_runtime/benchmark/

‎.specify/init-options.json‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"ai": "codex",
3+
"ai_commands_dir": null,
4+
"ai_skills": true,
5+
"branch_numbering": "sequential",
6+
"here": true,
7+
"offline": true,
8+
"preset": null,
9+
"script": "sh",
10+
"speckit_version": "0.4.1"
11+
}

‎.specify/memory/constitution.md‎

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<!--
2+
Sync Impact Report
3+
- Version change: template -> 1.0.0
4+
- Added principles: Evidence Before Claims; Minimal Scoped Changes; Contract and State Ownership;
5+
Tests Prove Behavior; Preserve Existing Work
6+
- Added sections: Project Constraints; Development Workflow
7+
- Templates requiring updates:
8+
- ✅ .specify/templates/plan-template.md (existing Constitution Check supports these gates)
9+
- ✅ .specify/templates/spec-template.md (scope and measurable acceptance sections already present)
10+
- ✅ .specify/templates/tasks-template.md (test-first and path-specific tasks already supported)
11+
- Follow-up TODOs: none
12+
-->
13+
# Clawith Constitution
14+
15+
## Core Principles
16+
17+
### I. Evidence Before Claims
18+
Current behavior MUST be established from source code, migrations, tests, or runtime evidence before
19+
changes are designed. Provider facts, Runtime facts, Model output, and hypotheses MUST remain
20+
separate. Point-in-time facts such as branches, versions, ports, commits, and deployment state MUST
21+
be rechecked before they are reported.
22+
23+
### II. Minimal Scoped Changes
24+
Every implementation MUST stay inside the user-approved scope and use the smallest reversible diff
25+
that fixes the demonstrated behavior. Existing utilities and contracts MUST be reused before new
26+
abstractions are introduced. Adjacent refactors, new dependencies, and speculative hardening are
27+
forbidden unless explicitly approved.
28+
29+
### III. Contract and State Ownership
30+
Each fact MUST have one authoritative owner. Provider-specific adapters own mapping external business
31+
states into typed outcomes; Runtime owns Tool receipts, scheduling, waiting, settlement, and resume;
32+
the Model owns intent and user-facing content. Consumers MUST use the structured contract rather than
33+
re-deriving state from summaries or prose.
34+
35+
### IV. Tests Prove Behavior
36+
Bug fixes MUST include regression coverage for the failing path and its terminal outcomes. Tests MUST
37+
prove both the desired result and prohibited side effects, such as duplicate external writes. Scoped
38+
tests and relevant static checks MUST pass before completion is claimed; live verification MUST be
39+
reported separately from local automated evidence.
40+
41+
### V. Preserve Existing Work
42+
Unrelated dirty-worktree changes belong to the user and MUST NOT be reverted, overwritten, or folded
43+
into the feature. Files ignored by Git MUST be verified through direct filesystem inspection. Agents
44+
MUST avoid destructive commands and MUST report unavoidable ownership conflicts before proceeding.
45+
46+
## Project Constraints
47+
48+
- Backend Runtime work uses the existing Python, FastAPI, SQLAlchemy, LangGraph, and pytest stack.
49+
- No dependency may be added without explicit user approval.
50+
- Documentation may describe historical intent, but implementation claims MUST be checked against
51+
current source.
52+
- Public Tool behavior and internal Runtime behavior MUST not be broadened merely to simplify one fix.
53+
- External writes MUST remain exactly-once where the existing Tool policy requires it.
54+
55+
## Development Workflow
56+
57+
1. Define the observed failure, authoritative fact, consumer, and approved boundary.
58+
2. Write a testable specification and identify prohibited changes.
59+
3. Add or update scoped regression tests before the implementation when practical.
60+
4. Implement the smallest contract-preserving change.
61+
5. Run scoped pytest and Ruff checks, then inspect the final diff for unrelated changes.
62+
6. Report changed files, verification evidence, and remaining risks without overstating live status.
63+
64+
## Governance
65+
66+
This constitution governs Spec Kit artifacts for Clawith and is subordinate only to explicit user
67+
instructions and the repository `AGENTS.md`. Amendments require a documented rationale, semantic
68+
version update, date update, and consistency review of dependent Spec Kit templates. Every feature
69+
plan MUST evaluate these principles before design and again before implementation. Any exception MUST
70+
be explicit in the plan's Complexity Tracking section and approved before code changes begin.
71+
72+
**Version**: 1.0.0 | **Ratified**: 2026-08-05 | **Last Amended**: 2026-08-05
Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
#!/usr/bin/env bash
2+
3+
# Consolidated prerequisite checking script
4+
#
5+
# This script provides unified prerequisite checking for Spec-Driven Development workflow.
6+
# It replaces the functionality previously spread across multiple scripts.
7+
#
8+
# Usage: ./check-prerequisites.sh [OPTIONS]
9+
#
10+
# OPTIONS:
11+
# --json Output in JSON format
12+
# --require-tasks Require tasks.md to exist (for implementation phase)
13+
# --include-tasks Include tasks.md in AVAILABLE_DOCS list
14+
# --paths-only Only output path variables (no validation)
15+
# --help, -h Show help message
16+
#
17+
# OUTPUTS:
18+
# JSON mode: {"FEATURE_DIR":"...", "AVAILABLE_DOCS":["..."]}
19+
# Text mode: FEATURE_DIR:... \n AVAILABLE_DOCS: \n ✓/✗ file.md
20+
# Paths only: REPO_ROOT: ... \n BRANCH: ... \n FEATURE_DIR: ... etc.
21+
22+
set -e
23+
24+
# Parse command line arguments
25+
JSON_MODE=false
26+
REQUIRE_TASKS=false
27+
INCLUDE_TASKS=false
28+
PATHS_ONLY=false
29+
30+
for arg in "$@"; do
31+
case "$arg" in
32+
--json)
33+
JSON_MODE=true
34+
;;
35+
--require-tasks)
36+
REQUIRE_TASKS=true
37+
;;
38+
--include-tasks)
39+
INCLUDE_TASKS=true
40+
;;
41+
--paths-only)
42+
PATHS_ONLY=true
43+
;;
44+
--help|-h)
45+
cat << 'EOF'
46+
Usage: check-prerequisites.sh [OPTIONS]
47+
48+
Consolidated prerequisite checking for Spec-Driven Development workflow.
49+
50+
OPTIONS:
51+
--json Output in JSON format
52+
--require-tasks Require tasks.md to exist (for implementation phase)
53+
--include-tasks Include tasks.md in AVAILABLE_DOCS list
54+
--paths-only Only output path variables (no prerequisite validation)
55+
--help, -h Show this help message
56+
57+
EXAMPLES:
58+
# Check task prerequisites (plan.md required)
59+
./check-prerequisites.sh --json
60+
61+
# Check implementation prerequisites (plan.md + tasks.md required)
62+
./check-prerequisites.sh --json --require-tasks --include-tasks
63+
64+
# Get feature paths only (no validation)
65+
./check-prerequisites.sh --paths-only
66+
67+
EOF
68+
exit 0
69+
;;
70+
*)
71+
echo "ERROR: Unknown option '$arg'. Use --help for usage information." >&2
72+
exit 1
73+
;;
74+
esac
75+
done
76+
77+
# Source common functions
78+
SCRIPT_DIR="$(CDPATH="" cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
79+
source "$SCRIPT_DIR/common.sh"
80+
81+
# Get feature paths and validate branch
82+
_paths_output=$(get_feature_paths) || { echo "ERROR: Failed to resolve feature paths" >&2; exit 1; }
83+
eval "$_paths_output"
84+
unset _paths_output
85+
check_feature_branch "$CURRENT_BRANCH" "$HAS_GIT" || exit 1
86+
87+
# If paths-only mode, output paths and exit (support JSON + paths-only combined)
88+
if $PATHS_ONLY; then
89+
if $JSON_MODE; then
90+
# Minimal JSON paths payload (no validation performed)
91+
if has_jq; then
92+
jq -cn \
93+
--arg repo_root "$REPO_ROOT" \
94+
--arg branch "$CURRENT_BRANCH" \
95+
--arg feature_dir "$FEATURE_DIR" \
96+
--arg feature_spec "$FEATURE_SPEC" \
97+
--arg impl_plan "$IMPL_PLAN" \
98+
--arg tasks "$TASKS" \
99+
'{REPO_ROOT:$repo_root,BRANCH:$branch,FEATURE_DIR:$feature_dir,FEATURE_SPEC:$feature_spec,IMPL_PLAN:$impl_plan,TASKS:$tasks}'
100+
else
101+
printf '{"REPO_ROOT":"%s","BRANCH":"%s","FEATURE_DIR":"%s","FEATURE_SPEC":"%s","IMPL_PLAN":"%s","TASKS":"%s"}\n' \
102+
"$(json_escape "$REPO_ROOT")" "$(json_escape "$CURRENT_BRANCH")" "$(json_escape "$FEATURE_DIR")" "$(json_escape "$FEATURE_SPEC")" "$(json_escape "$IMPL_PLAN")" "$(json_escape "$TASKS")"
103+
fi
104+
else
105+
echo "REPO_ROOT: $REPO_ROOT"
106+
echo "BRANCH: $CURRENT_BRANCH"
107+
echo "FEATURE_DIR: $FEATURE_DIR"
108+
echo "FEATURE_SPEC: $FEATURE_SPEC"
109+
echo "IMPL_PLAN: $IMPL_PLAN"
110+
echo "TASKS: $TASKS"
111+
fi
112+
exit 0
113+
fi
114+
115+
# Validate required directories and files
116+
if [[ ! -d "$FEATURE_DIR" ]]; then
117+
echo "ERROR: Feature directory not found: $FEATURE_DIR" >&2
118+
echo "Run /speckit.specify first to create the feature structure." >&2
119+
exit 1
120+
fi
121+
122+
if [[ ! -f "$IMPL_PLAN" ]]; then
123+
echo "ERROR: plan.md not found in $FEATURE_DIR" >&2
124+
echo "Run /speckit.plan first to create the implementation plan." >&2
125+
exit 1
126+
fi
127+
128+
# Check for tasks.md if required
129+
if $REQUIRE_TASKS && [[ ! -f "$TASKS" ]]; then
130+
echo "ERROR: tasks.md not found in $FEATURE_DIR" >&2
131+
echo "Run /speckit.tasks first to create the task list." >&2
132+
exit 1
133+
fi
134+
135+
# Build list of available documents
136+
docs=()
137+
138+
# Always check these optional docs
139+
[[ -f "$RESEARCH" ]] && docs+=("research.md")
140+
[[ -f "$DATA_MODEL" ]] && docs+=("data-model.md")
141+
142+
# Check contracts directory (only if it exists and has files)
143+
if [[ -d "$CONTRACTS_DIR" ]] && [[ -n "$(ls -A "$CONTRACTS_DIR" 2>/dev/null)" ]]; then
144+
docs+=("contracts/")
145+
fi
146+
147+
[[ -f "$QUICKSTART" ]] && docs+=("quickstart.md")
148+
149+
# Include tasks.md if requested and it exists
150+
if $INCLUDE_TASKS && [[ -f "$TASKS" ]]; then
151+
docs+=("tasks.md")
152+
fi
153+
154+
# Output results
155+
if $JSON_MODE; then
156+
# Build JSON array of documents
157+
if has_jq; then
158+
if [[ ${#docs[@]} -eq 0 ]]; then
159+
json_docs="[]"
160+
else
161+
json_docs=$(printf '%s\n' "${docs[@]}" | jq -R . | jq -s .)
162+
fi
163+
jq -cn \
164+
--arg feature_dir "$FEATURE_DIR" \
165+
--argjson docs "$json_docs" \
166+
'{FEATURE_DIR:$feature_dir,AVAILABLE_DOCS:$docs}'
167+
else
168+
if [[ ${#docs[@]} -eq 0 ]]; then
169+
json_docs="[]"
170+
else
171+
json_docs=$(for d in "${docs[@]}"; do printf '"%s",' "$(json_escape "$d")"; done)
172+
json_docs="[${json_docs%,}]"
173+
fi
174+
printf '{"FEATURE_DIR":"%s","AVAILABLE_DOCS":%s}\n' "$(json_escape "$FEATURE_DIR")" "$json_docs"
175+
fi
176+
else
177+
# Text output
178+
echo "FEATURE_DIR:$FEATURE_DIR"
179+
echo "AVAILABLE_DOCS:"
180+
181+
# Show status of each potential document
182+
check_file "$RESEARCH" "research.md"
183+
check_file "$DATA_MODEL" "data-model.md"
184+
check_dir "$CONTRACTS_DIR" "contracts/"
185+
check_file "$QUICKSTART" "quickstart.md"
186+
187+
if $INCLUDE_TASKS; then
188+
check_file "$TASKS" "tasks.md"
189+
fi
190+
fi

0 commit comments

Comments
 (0)