26b4a5be60
Task 2-3-01: create(learner_id, task_id) — telemetry sandboxes run a persistent
helper/inner namespace topology (offline inner ns; agent joins mount ns only and stays
online to reach the loopback ingest). Capture agent copied into the workspace (visible
in-ns at the bind), launched via sh -c with in-ns absolute paths (host cwd invalid after
the nsenter mount swap), stdin=DEVNULL daemonizes the agent (lifecycle tied to sandbox:
destroy reaps agent -> inner -> helper). Wire contract: frames strip URL-owned identity
(ingest extra=forbid anti-spoofing); spool keeps full events.
E2E test (real uvicorn on ephemeral port): exec in a live namespace sandbox -> events
arrive at WS ingest -> SQLite, ordered, sandbox-scoped. Pure-shell path (task_id=None)
asserts no capture agent. Full suite 216 green; ruff clean.
---ci---
phase: 2
milestone: v0.3
status: execute
requirements: {covered: [REQ-3-003], partial: []}
---/ci---
61 lines
714 B
Plaintext
61 lines
714 B
Plaintext
# Environment files — never commit credentials
|
|
.env
|
|
.env.secrets
|
|
.env.*
|
|
!.env.example
|
|
|
|
# CIAgent secrets
|
|
.ciagent/.env.secrets
|
|
|
|
# Dependencies
|
|
node_modules/
|
|
__pycache__/
|
|
*.pyc
|
|
.venv/
|
|
venv/
|
|
|
|
# Build artifacts
|
|
dist/
|
|
/build/
|
|
.next/
|
|
.turbo/
|
|
*.tsbuildinfo
|
|
|
|
# Storybook
|
|
storybook-static/
|
|
|
|
# OS files
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# IDE
|
|
.idea/
|
|
.vscode/
|
|
*.swp
|
|
*.swo
|
|
|
|
# Logs
|
|
*.log
|
|
npm-debug.log*
|
|
yarn-debug.log*
|
|
yarn-error.log*
|
|
|
|
# Test coverage
|
|
coverage/
|
|
.nyc_output/
|
|
|
|
# Python tooling caches
|
|
.pytest_cache/
|
|
.ruff_cache/
|
|
*.egg-info/
|
|
.ciagent/bin/
|
|
|
|
# v0.3 engine runtime data (SQLite + sandboxes)
|
|
apps/ai-service/ai_service/data/
|
|
apps/ai-service/**/sandboxes/
|
|
*.db
|
|
*.db-journal
|
|
|
|
# in-sandbox capture agent runtime spool
|
|
.nc-agent/
|