-
Notifications
You must be signed in to change notification settings - Fork 0
chore(agileplus): bootstrap .agileplus/specs, .phenotype, scorecard, FUNDING #522
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
83a6f18
d9141c3
85b45c2
69832f4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| { | ||
| "feature_id": "001-core-setup", | ||
| "created": "2026-08-19", | ||
| "status": "active", | ||
| "priority": "P1", | ||
| "repo": "SessionLedger", | ||
| "language": "Rust", | ||
| "owner": "KooshaPari" | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| # Feature Specification: SessionLedger - Core Setup & Compliance | ||
|
|
||
| **Feature ID**: 001-core-setup | ||
| **Created**: 2026-08-19 | ||
| **Status**: Active | ||
| **Priority**: P1 | ||
|
|
||
| ## Overview | ||
|
|
||
| Core setup and compliance tracking for SessionLedger -- the session/event tracking daemon with Dioxus desktop viewer. | ||
|
|
||
| ## Compliance Goals | ||
|
|
||
| - [x] PR Template - GitHub PR template with quality gates | ||
| - [x] CODEOWNERS - Ownership file for code review routing | ||
| - [x] Dependabot - Automated dependency updates | ||
| - [x] Issue Template - Structured issue creation | ||
| - [ ] Sentry Integration - Error tracking and monitoring | ||
| - [ ] Product Analytics - User behavior instrumentation | ||
| - [ ] Documentation - Complete API reference | ||
|
|
||
| ## Audit Trail | ||
|
|
||
| - 2026-08-19: Created spec, migrated from legacy seed bootstrap | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| # Tasks: 001-core-setup (SessionLedger) | ||
|
|
||
| ## Completed | ||
| - [x] Create PR template | ||
|
Comment on lines
+3
to
+4
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win Add blank lines after the section headings. markdownlint MD022 flags Also applies to: 11-12, 16-17 🧰 Tools🪛 markdownlint-cli2 (0.23.2)[warning] 3-3: Headings should be surrounded by blank lines (MD022, blanks-around-headings) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||
| - [x] Add CODEOWNERS file | ||
| - [x] Add dependabot.yml for Cargo + GitHub Actions | ||
| - [x] Add issue templates | ||
| - [x] Setup 15+ CI workflows (a11y, alloc-profile, bench-gate, branch-protection, ci, commit-signing, cross-platform-build, cross-platform-smoke, daemon-graph, envelope-crypto, eval-compression, feedback-budgets, fuzz-blocking, fuzz-cadence, hermetic-builder) | ||
| - [x] Document FR catalog (15 FRs, all status: done) | ||
|
|
||
| ## In Progress | ||
| - [ ] Migrate legacy agileplus/ seed to .agileplus/specs | ||
| - [ ] Integrate Sentry SDK for Rust panic capture | ||
| - [ ] Complete API reference documentation | ||
|
|
||
| ## Pending | ||
| - [ ] Product analytics instrumentation | ||
| - [ ] Publish scorecard to OpenSSF Badge API | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| github: [] | ||
| patreon: # Replace with a single Patreon username | ||
| open_collective: # Replace with a single Open Collective username | ||
| ko_fi: # Replace with a single Ko-fi username | ||
| tidelift: # Replace with a single Tidelift package-name e.g. npm/[email protected] | ||
| community_bridge: # Replace with a single Community Bridge project slug-id | ||
| liberapay: # Replace with a single Liberapay username | ||
| issuehunt: # Replace with a single IssueHunt username | ||
| otechie: # Replace with a single Otechie username | ||
| lfx_crowdfunding: # Replace with a single LFX Crowdfunding project slug e.g. project-name | ||
| custom: # Replace with up to 3 custom sponsorship URLs e.g. ['https://example.com/donate'] | ||
|
Comment on lines
+1
to
+11
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win Populate the funding targets before merge.
Add the intended sponsorship identifiers, or remove providers that are not used. The current file will not expose actionable funding links. 🤖 Prompt for AI Agents |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,46 @@ | ||
| # gitleaks.yml — Secret scanning for SessionLedger | ||
| # Runs gitleaks to detect hardcoded secrets in git history | ||
| # Docs: https://github.com/gitleaks/gitleaks | ||
|
|
||
| name: Gitleaks Secret Scan | ||
|
|
||
| on: | ||
| push: | ||
| branches: [main] | ||
| paths: | ||
| - '**' | ||
| - '!**/*.md' | ||
| - '!docs/**' | ||
| pull_request: | ||
| branches: [main] | ||
| paths: | ||
| - '**' | ||
| - '!**/*.md' | ||
| - '!docs/**' | ||
|
|
||
| permissions: | ||
| contents: read | ||
| security-events: write | ||
|
|
||
| jobs: | ||
| gitleaks: | ||
| name: Gitleaks Scan | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: Checkout repository | ||
| uses: actions/checkout@v4 | ||
|
Comment on lines
+30
to
+31
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
for action in \
actions/checkout@v4 \
gitleaks/gitleaks-action@v2 \
github/codeql-action@v3
do
repository="${action%@*}"
tag="${action#*@}"
printf '%s: ' "$action"
gh api "repos/${repository}/commits/${tag}" --jq '.sha'
doneRepository: KooshaPari/SessionLedger Length of output: 360 🏁 Script executed: set -euo pipefail
printf '%s\n' '--- workflow ---'
cat -n .github/workflows/gitleaks.yml
printf '%s\n' '--- action references ---'
rg -n '^[[:space:]]*uses:' .github/workflows/gitleaks.yml
resolve_tag() {
local repo="$1" tag="$2" ref object_type object_sha
ref="$(gh api "repos/${repo}/git/ref/tags/${tag}")"
object_type="$(jq -r '.object.type' <<<"$ref")"
object_sha="$(jq -r '.object.sha' <<<"$ref")"
if [[ "$object_type" == "tag" ]]; then
object_sha="$(gh api "repos/${repo}/git/tags/${object_sha}" --jq '.object.sha')"
fi
gh api "repos/${repo}/commits/${object_sha}" --jq '.sha'
}
for spec in \
'actions/checkout v4' \
'gitleaks/gitleaks-action v2' \
'github/codeql-action v3'
do
read -r repo tag <<<"$spec"
printf '%s@%s resolves to ' "$repo" "$tag"
resolve_tag "$repo" "$tag"
doneRepository: KooshaPari/SessionLedger Length of output: 1930 Pin every action to a full commit SHA. Pin the actions at lines 31, 36, and 43 to reviewed full commit SHAs. Retain each release version in a comment. 🧰 Tools🪛 zizmor (1.29.0)[warning] 30-33: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false (artipacked) [error] 31-31: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy) (unpinned-uses) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||
| with: | ||
| fetch-depth: 0 # Full history for secret scanning | ||
|
|
||
| - name: Run Gitleaks | ||
| uses: gitleaks/gitleaks-action@v2 | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| GITLEAKS_CONFIG: gitleaks.toml | ||
|
|
||
| - name: Upload results to GitHub Security | ||
| if: always() | ||
| uses: github/codeql-action/upload-sarif@v3 | ||
| with: | ||
| sarif_file: results.sarif | ||
| continue-on-error: true | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,52 @@ | ||
| --- | ||
| project: SessionLedger | ||
| language: Rust | ||
| generated: "2026-08-19" | ||
|
|
||
| driver: | ||
| system: Phenotype AI-Driven Development | ||
| purpose: Link AI agent work to feature requirements | ||
|
|
||
| agents: | ||
| - name: forge | ||
| role: implementation | ||
| scope: "File operations, git, build, test" | ||
| - name: muse | ||
| role: planning | ||
| scope: "Analysis, strategy, architecture review" | ||
|
|
||
| linkages: | ||
| - agent: forge | ||
| fr: FR-001 | ||
| activity: "JSONL ingest pipeline" | ||
| status: completed | ||
| - agent: forge | ||
| fr: FR-002 | ||
| activity: "OKF bundle validation" | ||
| status: completed | ||
| - agent: forge | ||
| fr: FR-003 | ||
| activity: "Bundle list and search" | ||
| status: completed | ||
| - agent: forge | ||
| fr: FR-004 | ||
| activity: "SSE replay" | ||
| status: completed | ||
| - agent: forge | ||
| fr: FR-011 | ||
| activity: "Crash recovery surfaces" | ||
| status: completed | ||
| - agent: forge | ||
| fr: FR-014 | ||
| activity: "Daemon liveness and ops" | ||
| status: completed | ||
| - agent: forge | ||
| fr: FR-015 | ||
| activity: "Observability (OTLP, Prometheus)" | ||
| status: completed | ||
| - agent: muse | ||
| fr: FR-005 | ||
| activity: "Metrics aggregation design" | ||
| status: completed | ||
|
|
||
| last_updated: "2026-08-19" |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,80 @@ | ||||||||||||||||||
| --- | ||||||||||||||||||
| project: SessionLedger | ||||||||||||||||||
| language: Rust | ||||||||||||||||||
| generated: "2026-08-19" | ||||||||||||||||||
|
|
||||||||||||||||||
| attribution: | ||||||||||||||||||
| system: Phenotype Traceability | ||||||||||||||||||
| purpose: Feature Requirement (FR) tracking | ||||||||||||||||||
|
|
||||||||||||||||||
| traceability: | ||||||||||||||||||
| cli: AgilePlus/bin/ptrace | ||||||||||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
if test -e AgilePlus/bin/ptrace; then
echo "Configured CLI path exists"
else
echo "Configured CLI path is missing: AgilePlus/bin/ptrace"
fi
git ls-files | rg -n '(^|/)(AgilePlus|agileplus)/.*ptrace$' || trueRepository: KooshaPari/SessionLedger Length of output: 215 🏁 Script executed: #!/bin/bash
set -euo pipefail
printf '%s\n' 'Configured entry:'
sed -n '1,20p' .phenotype/ai-traceability.yaml
printf '%s\n' 'Matching tracked paths:'
git ls-files | rg -n -i '(^|/)(agileplus|ptrace)(/|$)' || true
printf '%s\n' 'Matching filesystem paths:'
find . -type f \( -path '*/ptrace' -o -iname 'ptrace' \) -print 2>/dev/null || trueRepository: KooshaPari/SessionLedger Length of output: 804 Correct the traceability CLI path. No 🤖 Prompt for AI Agents |
||||||||||||||||||
| ci_cd: .github/workflows/ci.yml | ||||||||||||||||||
|
|
||||||||||||||||||
| fr_requirements: | ||||||||||||||||||
| - id: FR-001 | ||||||||||||||||||
| title: "JSONL / corpus ingest into normalized Session" | ||||||||||||||||||
| status: done | ||||||||||||||||||
| acceptance: "crates/sl-daemon ETL (etl.rs, watcher.rs); tests/skeleton.rs; crates/sl-daemon/tests/pipeline.rs" | ||||||||||||||||||
| - id: FR-002 | ||||||||||||||||||
| title: "OKF bundle schema validation on ingest" | ||||||||||||||||||
| status: done | ||||||||||||||||||
| acceptance: "POST /api/ingest; crates/sl-daemon/src/validation.rs; sl validate CLI" | ||||||||||||||||||
| - id: FR-003 | ||||||||||||||||||
| title: "Bundle list + search/filter" | ||||||||||||||||||
| status: done | ||||||||||||||||||
| acceptance: "GET /api/bundles, GET /api/search; filter.rs, tag.rs" | ||||||||||||||||||
| - id: FR-004 | ||||||||||||||||||
| title: "Session replay via SSE" | ||||||||||||||||||
| status: done | ||||||||||||||||||
| acceptance: "GET /api/replay/:id; crates/sl-daemon/tests/sse_bridge.rs; sl replay" | ||||||||||||||||||
| - id: FR-005 | ||||||||||||||||||
| title: "Aggregated session metrics" | ||||||||||||||||||
| status: done | ||||||||||||||||||
| acceptance: "GET /api/metrics; crates/sl-daemon/src/metrics.rs" | ||||||||||||||||||
| - id: FR-006 | ||||||||||||||||||
| title: "Archive / restore (gzip)" | ||||||||||||||||||
| status: done | ||||||||||||||||||
| acceptance: "sl archive / sl restore; crates/sl-daemon/src/archive.rs" | ||||||||||||||||||
| - id: FR-007 | ||||||||||||||||||
| title: "Viewer Timeline" | ||||||||||||||||||
| status: done | ||||||||||||||||||
| acceptance: "crates/sl-viewer/src/timeline.rs" | ||||||||||||||||||
| - id: FR-008 | ||||||||||||||||||
| title: "Viewer Search" | ||||||||||||||||||
| status: done | ||||||||||||||||||
| acceptance: "crates/sl-viewer/src/search_view.rs" | ||||||||||||||||||
| - id: FR-009 | ||||||||||||||||||
| title: "Viewer Replay" | ||||||||||||||||||
| status: done | ||||||||||||||||||
| acceptance: "crates/sl-viewer/src/replay_view.rs" | ||||||||||||||||||
| - id: FR-010 | ||||||||||||||||||
| title: "Viewer LiveFeed" | ||||||||||||||||||
| status: done | ||||||||||||||||||
| acceptance: "crates/sl-viewer/src/live_feed.rs" | ||||||||||||||||||
| - id: FR-011 | ||||||||||||||||||
| title: "Crash recovery / unfinished work surface" | ||||||||||||||||||
| status: done | ||||||||||||||||||
| acceptance: "DESIGN 5.1; T-024 detector; T-036 unfinished viewer tab" | ||||||||||||||||||
| - id: FR-012 | ||||||||||||||||||
| title: "ContinuationBundle compile + inject gate" | ||||||||||||||||||
| status: done | ||||||||||||||||||
| acceptance: "src/domain/bundle.rs; src/distill; Acceptance slice gate" | ||||||||||||||||||
| - id: FR-013 | ||||||||||||||||||
| title: "OKF roundtrip smoke" | ||||||||||||||||||
| status: done | ||||||||||||||||||
| acceptance: "tests/okf_roundtrip.rs; docs/OKF-ROUNDTRIP.md" | ||||||||||||||||||
| - id: FR-014 | ||||||||||||||||||
| title: "Daemon liveness + local ops stack" | ||||||||||||||||||
| status: done | ||||||||||||||||||
| acceptance: "GET /healthz + GET /readyz; process-compose.yaml; make dev" | ||||||||||||||||||
| - id: FR-015 | ||||||||||||||||||
| title: "Observability surfaces (metrics, OTLP, dashboards)" | ||||||||||||||||||
| status: done | ||||||||||||||||||
| acceptance: "/healthz, /readyz, /api/metrics, Prometheus /metrics" | ||||||||||||||||||
|
Comment on lines
+71
to
+74
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win Include all FR-015 acceptance references.
Proposed correction- acceptance: "/healthz, /readyz, /api/metrics, Prometheus /metrics"
+ acceptance: "/healthz, /readyz, /api/metrics, Prometheus /metrics; crates/sl-daemon/src/otel.rs; docs/ops/dashboards/sessionledger-red.json"📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||
|
|
||||||||||||||||||
| coverage: | ||||||||||||||||||
| status: complete | ||||||||||||||||||
| note: "All 15 FRs status: done. Legacy agileplus/ seed not FR-mapped." | ||||||||||||||||||
|
|
||||||||||||||||||
| last_updated: "2026-08-19" | ||||||||||||||||||
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,57 @@ | ||||||||
| # CLAUDE.md — SessionLedger | ||||||||
|
|
||||||||
| Claude Code agent entrypoint. Read before editing. | ||||||||
|
|
||||||||
| ## Working directory | ||||||||
|
|
||||||||
| Cargo workspace. Feature work in a git worktree, never on `main`: | ||||||||
|
|
||||||||
| ``` | ||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win Add a language identifier to the shell fence. Use 🧰 Tools🪛 markdownlint-cli2 (0.23.2)[warning] 9-9: Fenced code blocks should have a language specified (MD040, fenced-code-language) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||||||||
| git worktree add -b <type>/<topic> .claude/worktrees/<topic> origin/main | ||||||||
| ``` | ||||||||
|
|
||||||||
| `<type>` ∈ `feat|fix|chore|ci|docs`. Worktrees under `.claude/worktrees/` only. | ||||||||
|
|
||||||||
| ## Build / test / lint | ||||||||
|
|
||||||||
| ```bash | ||||||||
| cargo build --all-targets --locked # build | ||||||||
| cargo test --all-features --locked # run the suite (86+ tests) | ||||||||
|
Comment on lines
+18
to
+19
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy lift 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -eu
printf '%s\n' '--- relevant files ---'
git ls-files 'CLAUDE.md' 'Cargo.toml' 'crates/sl-daemon/Cargo.toml' 'rust-toolchain.toml'
printf '%s\n' '--- CLAUDE.md lines 1-65 ---'
cat -n CLAUDE.md | sed -n '1,65p'
printf '%s\n' '--- root Cargo workspace ---'
sed -n '1,180p' Cargo.toml
printf '%s\n' '--- daemon Cargo manifest ---'
cat -n crates/sl-daemon/Cargo.toml | sed -n '1,180p'
printf '%s\n' '--- workspace manifests ---'
find . -name Cargo.toml -not -path './target/*' -print | sortRepository: KooshaPari/SessionLedger Length of output: 11285 🏁 Script executed: #!/bin/bash
set -eu
python3 - <<'PY'
from pathlib import Path
import tomllib
root = tomllib.loads(Path("Cargo.toml").read_text())
daemon = tomllib.loads(Path("crates/sl-daemon/Cargo.toml").read_text())
root_ws = root.get("workspace", {})
daemon_ws = daemon.get("workspace", {})
print("root workspace members:", root_ws.get("members"))
print("root workspace exclude:", root_ws.get("exclude"))
print("daemon has workspace table:", bool(daemon_ws))
print("daemon package name:", daemon.get("package", {}).get("name"))
print("daemon manifest path exists:", Path("crates/sl-daemon/Cargo.toml").is_file())
PY
printf '%s\n' '--- documented Cargo commands ---'
rg -n -C 3 'cargo (build|test|clippy|fmt)|sl-daemon|manifest-path|workspace' CLAUDE.mdRepository: KooshaPari/SessionLedger Length of output: 282 🏁 Script executed: #!/bin/bash
set -eu
printf '%s\n' '--- lockfiles ---'
git ls-files '*Cargo.lock' | sort
printf '%s\n' '--- daemon-related validation references ---'
rg -n -C 2 'sl-daemon|manifest-path.*sl-daemon|cargo (build|test|clippy|fmt)' \
.github CLAUDE.md README.md llms.txt docs 2>/dev/null || true
printf '%s\n' '--- Cargo availability ---'
command -v cargo || true
cargo --version 2>/dev/null || true
printf '%s\n' '--- root workspace metadata ---'
cargo metadata --no-deps --format-version 1 --manifest-path Cargo.toml 2>/dev/null \
| python3 -c '
import json, sys
d=json.load(sys.stdin)
print("workspace_root:", d["workspace_root"])
print("workspace_members:", d["workspace_members"])
for p in d["packages"]:
print("package:", p["name"], "manifest:", p["manifest_path"])
' || true
printf '%s\n' '--- daemon workspace metadata ---'
cargo metadata --no-deps --format-version 1 \
--manifest-path crates/sl-daemon/Cargo.toml 2>/dev/null \
| python3 -c '
import json, sys
d=json.load(sys.stdin)
print("workspace_root:", d["workspace_root"])
print("workspace_members:", d["workspace_members"])
for p in d["packages"]:
print("package:", p["name"], "manifest:", p["manifest_path"])
' || trueRepository: KooshaPari/SessionLedger Length of output: 50383 Include the excluded daemon workspace in validation. Because 🤖 Prompt for AI Agents |
||||||||
| cargo clippy --all-targets --all-features # lint | ||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win Use the lockfile for Clippy. The build and test commands use 🤖 Prompt for AI Agents |
||||||||
| cargo fmt --all --check # format check | ||||||||
| ``` | ||||||||
|
|
||||||||
| sl-viewer (Dioxus 0.6 desktop) needs the Dioxus CLI: `cargo install dioxus-cli`, then `dx serve` / `dx bundle` from `crates/sl-viewer`. | ||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win Pin the Dioxus CLI version. If no separate pin exists, Pin the CLI to the supported version and use 🤖 Prompt for AI Agents |
||||||||
|
|
||||||||
| Fast inner loop: `cargo test --manifest-path crates/sl-daemon/Cargo.toml` / | ||||||||
| `cargo check -p sl-viewer`. Measured budgets: [`docs/ops/feedback-budgets.md`](docs/ops/feedback-budgets.md). | ||||||||
|
|
||||||||
| ## Key files | ||||||||
|
|
||||||||
| | Path | What | | ||||||||
| |------|------| | ||||||||
| | `crates/sl-daemon` | watch → compile session bundles (the compiler daemon) | | ||||||||
| | `crates/sl-viewer` | Dioxus 0.6 desktop viewer (bundle/history/memory tabs) | | ||||||||
| | `docs/functional_requirements.md` | FR-NNN catalog + acceptance refs | | ||||||||
| | `docs/USER_JOURNEYS.md` | Named user journeys mapped to FRs and existing tests | | ||||||||
| | `PLAN.md` / `WORK_DAG.md` | claimable tasks + dependency graph | | ||||||||
| | `llms.txt` | LLM-friendly repo map + build/test commands | | ||||||||
| | `docs/ops/runbook.md` | `make dev`, healthz :8080, common failures | | ||||||||
| | `docs/ops/feedback-budgets.md` | measured check/test/`make lint` loop budgets + nextest | | ||||||||
| | `README.md` | overview + Releases link | `.github/workflows/release.yml` | per-OS viewer build | | ||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win Split the malformed The table defines two columns, but this row contains four cells. Markdown tooling will misrender the -| `README.md` | overview + Releases link | `.github/workflows/release.yml` | per-OS viewer build |
+| `README.md` | overview + Releases link |
+| `.github/workflows/release.yml` | per-OS viewer build |📝 Committable suggestion
Suggested change
🧰 Tools🪛 LanguageTool[uncategorized] ~41-~41: The official name of this software platform is spelled with a capital “H”. (GITHUB) 🪛 markdownlint-cli2 (0.23.2)[warning] 41-41: Table column count (MD056, table-column-count) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||||||||
| | `docs/adr/0006-no-mcp-server.md` | Explicit N/A: not an MCP host/server; no MCP pin list (C06 L57) | | ||||||||
|
|
||||||||
| ## Forbidden | ||||||||
|
|
||||||||
| - No direct commits to `main` (protected — PR only). | ||||||||
| - No `git reset --hard`, `git stash`, `git clean` in worktrees. | ||||||||
| - No `--no-verify` / hook bypass without operator approval. | ||||||||
| - No AI attribution in commit/PR metadata. | ||||||||
| - Do not work a branch/worktree another actor is on. | ||||||||
|
|
||||||||
| ## Gotchas | ||||||||
|
|
||||||||
| - Exact rustc is pinned in `rust-toolchain.toml` (see `docs/ops/rustc-toolchain-pin.md`); workspace MSRV is `rust-version = "1.85"`. | ||||||||
| - clippy warnings — fix, don't `#[allow]` without a tracking-issue comment. | ||||||||
| - sl-viewer is Dioxus 0.6 — `dx` toolchain required for desktop bundling (see electrobun/dioxus codesign notes when packaging macOS). | ||||||||
| - CI uses `--locked` — keep `Cargo.lock` committed and current. | ||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win Add one final newline. Ensure 🧰 Tools🪛 markdownlint-cli2 (0.23.2)[warning] 57-57: Files should end with a single newline character (MD047, single-trailing-newline) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||||||||
Uh oh!
There was an error while loading. Please reload this page.