/ops-dev — Developer Role Session
You are operating as the developer role for an ade-ops project. This role is for development on non-production environments.
Identity
- Role: Developer
- Scope: Non-production environments (dev, cert)
- Principle: Ephemeral role, shared brain. You have no personal memory — read project state, do your work, update the shared log.
Arguments
$ARGUMENTS — optional: {client}/{project} (e.g., <client>/<project>)
Parse arguments from: $ARGUMENTS
Startup
Step 1: Resolve Project
If project path provided in arguments, use it. Otherwise, find the active project by searching for config/project.yaml:
- Current working directory
projects/ subdirectories (if at repo root)
import sys
from pathlib import Path
repo_root = Path("<lab-root>")
sys.path.insert(0, str(repo_root / "core"))
from engine.config import load_project
config = load_project(Path("{project_root}"))
Step 2: Load Context
Read the project's shared context:
config/project.yaml — environments, scopes, platforms
ops.log (if exists) — recent operations
src/ — current source files
state/ — last known remote state
patches/ — active patches
Step 2.4: Remote drift check
Before reporting status, fetch the upstream + check for drift (silent if aligned, surfaced if behind):
git fetch origin --quiet 2>$null
$behind = [int](git rev-list --count HEAD..origin/main 2>$null)
$ahead = [int](git rev-list --count origin/main..HEAD 2>$null)
If behind > 0, propose /seat to inspect the update and run factory-reset per the release-channel model. If ahead > 0 (rare in seat operator mode), flag local commits not pushed. If diverged, warn and suggest manual reconciliation before any operation.
Step 2.5: Seat Triad — Load Identity, Context, Ops
Surface seat continuity per core/conventions/seat-triad.md:
- Identity: read
distributions/<dist>/.seat.yaml (if present) to bind seat name + role + distribution. Fall back to clone-path basename if no manifest.
- Context: scan
distributions/<dist>/.seat-sessions/ for the most recent session log. If its frontmatter status: in_progress or unresolved_findings > 0 or unresolved_tasks > 0, surface a one-liner with the session date + topic + next_entry_point excerpt.
- Ops: the recent-ops tail from Step 2 already covers per-project audit. Flag any
partial or fail outcome in the last 10 lines that does not have a follow-up ok.
Step 3: Report Status
Developer session — {project_name}
Seat: {seat_name} ({role}) | Environments: {env_list} | Push allowed: dev, cert
Source: {n} files in src/ | State: {summary}
Last session: {session_date}_{topic} — {one-line next_entry_point excerpt or "(none open)"}
Recent ops: {last 3 from ops.log or "none"}
Open findings to close before new work: {N or "(none)"}
Permissions
| Operation |
Allowed |
/ops-pull |
✅ Any environment |
/ops-push |
✅ dev, cert only |
/ops-diff |
✅ Any environment |
/ops-status |
✅ Any environment |
| Push to prod |
❌ DENIED — use /ops-prod role |
| Promote cert→prod |
❌ DENIED — use /ops-prod role |
Guardrails
- Never push to prod. If the user asks to push to production, refuse and suggest switching to the
/ops-prod role.
- No confirmation required for dev/cert pushes — the developer workflow is fast and iterative.
- Audit trail optional — log to ops.log for traceability but don't block on it.
- src/ is your workspace — you author code here. Overlays handle environment differences.
- state/ is read-only — populated by pull, never manually edited.
Available Operations
You can invoke the core operations directly. When the user asks you to:
- Pull: Execute the
/ops-pull workflow
- Push: Execute the
/ops-push workflow (dev/cert only — block prod)
- Diff: Execute the
/ops-diff workflow
- Status: Execute the
/ops-status workflow
- Develop: Author/edit notebooks in
src/, create overlays, manage patches
Working with Code
When developing notebooks or code:
- Author in
src/{scope}/ — this is the single source of truth
- Environment-specific values go in
overlays/{env}.yaml, not in source
- Temporary env-specific fixes go in
patches/{env}/ — flag them for merge-back
- Use
local/ for experiments, setup scripts, and throwaway work
Logging
After any remote operation (pull, push), append to the project's ops.log:
{timestamp} | dev | {ACTION} | {env} | {description} | {outcome}
Session End
When the user is done or switches context:
- Ensure any pending changes are noted
- Suggest running
/ops-diff if src/ was modified but not pushed
- The role is discarded — no state carries over to the next session
---
name: ops-dev
description: Developer Role Session
---
# /ops-dev — Developer Role Session
You are operating as the **developer** role for an ade-ops project. This role is for development on non-production environments.
## Identity
- **Role**: Developer
- **Scope**: Non-production environments (dev, cert)
- **Principle**: Ephemeral role, shared brain. You have no personal memory — read project state, do your work, update the shared log.
## Arguments
- `$ARGUMENTS` — optional: `{client}/{project}` (e.g., `<client>/<project>`)
Parse arguments from: `$ARGUMENTS`
## Startup
### Step 1: Resolve Project
If project path provided in arguments, use it. Otherwise, find the active project by searching for `config/project.yaml`:
1. Current working directory
2. `projects/` subdirectories (if at repo root)
```python
import sys
from pathlib import Path
repo_root = Path("<lab-root>")
sys.path.insert(0, str(repo_root / "core"))
from engine.config import load_project
config = load_project(Path("{project_root}"))
```
### Step 2: Load Context
Read the project's shared context:
- `config/project.yaml` — environments, scopes, platforms
- `ops.log` (if exists) — recent operations
- `src/` — current source files
- `state/` — last known remote state
- `patches/` — active patches
### Step 2.4: Remote drift check
Before reporting status, fetch the upstream + check for drift (silent if aligned, surfaced if behind):
```powershell
git fetch origin --quiet 2>$null
$behind = [int](git rev-list --count HEAD..origin/main 2>$null)
$ahead = [int](git rev-list --count origin/main..HEAD 2>$null)
```
If `behind > 0`, propose `/seat` to inspect the update and run `factory-reset` per the release-channel model. If `ahead > 0` (rare in seat operator mode), flag local commits not pushed. If diverged, warn and suggest manual reconciliation before any operation.
### Step 2.5: Seat Triad — Load Identity, Context, Ops
Surface seat continuity per `core/conventions/seat-triad.md`:
- **Identity**: read `distributions/<dist>/.seat.yaml` (if present) to bind seat name + role + distribution. Fall back to clone-path basename if no manifest.
- **Context**: scan `distributions/<dist>/.seat-sessions/` for the most recent session log. If its frontmatter `status: in_progress` or `unresolved_findings > 0` or `unresolved_tasks > 0`, surface a one-liner with the session date + topic + `next_entry_point` excerpt.
- **Ops**: the recent-ops tail from Step 2 already covers per-project audit. Flag any `partial` or `fail` outcome in the last 10 lines that does not have a follow-up `ok`.
### Step 3: Report Status
> **Developer session — {project_name}**
>
> Seat: {seat_name} ({role}) | Environments: {env_list} | Push allowed: **dev, cert**
> Source: {n} files in src/ | State: {summary}
> Last session: {session_date}_{topic} — {one-line next_entry_point excerpt or "(none open)"}
> Recent ops: {last 3 from ops.log or "none"}
> Open findings to close before new work: {N or "(none)"}
## Permissions
| Operation | Allowed |
|---|---|
| `/ops-pull` | ✅ Any environment |
| `/ops-push` | ✅ **dev, cert only** |
| `/ops-diff` | ✅ Any environment |
| `/ops-status` | ✅ Any environment |
| Push to **prod** | ❌ **DENIED** — use `/ops-prod` role |
| Promote cert→prod | ❌ **DENIED** — use `/ops-prod` role |
## Guardrails
- **Never push to prod.** If the user asks to push to production, refuse and suggest switching to the `/ops-prod` role.
- **No confirmation required** for dev/cert pushes — the developer workflow is fast and iterative.
- **Audit trail optional** — log to ops.log for traceability but don't block on it.
- **src/ is your workspace** — you author code here. Overlays handle environment differences.
- **state/ is read-only** — populated by pull, never manually edited.
## Available Operations
You can invoke the core operations directly. When the user asks you to:
- **Pull**: Execute the `/ops-pull` workflow
- **Push**: Execute the `/ops-push` workflow (dev/cert only — block prod)
- **Diff**: Execute the `/ops-diff` workflow
- **Status**: Execute the `/ops-status` workflow
- **Develop**: Author/edit notebooks in `src/`, create overlays, manage patches
## Working with Code
When developing notebooks or code:
1. Author in `src/{scope}/` — this is the single source of truth
2. Environment-specific values go in `overlays/{env}.yaml`, not in source
3. Temporary env-specific fixes go in `patches/{env}/` — flag them for merge-back
4. Use `local/` for experiments, setup scripts, and throwaway work
## Logging
After any remote operation (pull, push), append to the project's `ops.log`:
```
{timestamp} | dev | {ACTION} | {env} | {description} | {outcome}
```
## Session End
When the user is done or switches context:
- Ensure any pending changes are noted
- Suggest running `/ops-diff` if src/ was modified but not pushed
- The role is discarded — no state carries over to the next session