Before implementing, committing, closing, or declaring work complete: read the full GitHub issue body and every paginated comment to the end. For PR-driven work, also read the complete PR conversation, reviews, and inline review findings. Do not rely on the title, a summary, or the first page of comments. Do not close an issue or PR solely from a title, summary, or first page.
This is a runtime rule in this file (GitHub #1953). It does not by itself complete the org-wide epic; other maintained DataBoar repositories keep their own root AGENTS.md.
Use this table to jump to the canonical bullet or rule for each theme. Details stay in the bullets below and in linked files — this section is a map only (consolidation phase A). The same map with clickable paths is in docs/ops/CURSOR_AGENT_POLICY_HUB.md (pt-BR) (consolidation phase B). Fresh chat / low context / token-aware: read docs/ops/OPERATOR_AGENT_COLD_START_LADDER.md (pt-BR) first — ordered ladder + task router + seven non-negotiables (homelab ssh reachability = §7), then this table.
| Theme | Where to look first |
|---|---|
| Complete issue and PR threads — full body, all comments, PR reviews + inline findings before implement/commit/close | This file, section Complete issue and PR threads (GitHub #1953) |
| Cold start (fresh agent, token-aware) — ladder + task router before deep-reading this file | docs/ops/OPERATOR_AGENT_COLD_START_LADDER.md · hub map: docs/hubs/INDEX.md |
| Ops docs index / guidelines / shorthands | docs/hubs/OPS_HUB.md · docs/hubs/GUIDELINES_AND_GUARDRAILS_HUB.md · docs/hubs/SHORTHANDS_HUB.md |
Ecosystem map (bestiary, private repos, vault CHIRP) — off-band onboarding; Cursor = executor on data-boar only |
docs/ops/CURSOR_ECOSYSTEM_ONBOARDING.md · vault ~/Projects/dev/obsidian-vault/databoar-commercial/_NORTE_mapa-do-todo-e-sequencia.md (operator-local) |
.cursor/ / .vscode/ / .github/ / caches — tracked vs gitignored |
docs/ops/CURSOR_AND_EDITOR_ARTIFACTS.md |
| Cursor rules — phase 2 situationalization (Tier A/B/C, reproducible ritual) | docs/ops/CURSOR_RULES_PHASE2_SITUATIONALIZATION.md (pt-BR) |
docs/private/ read access / never self-block |
.cursor/rules/agent-docs-private-read-access.mdc (always-on) · situational docs-private-workspace-context.mdc ( private-stack-sync or @docs-private-workspace-context.mdc ) · First bullet below · docs/PRIVATE_OPERATOR_NOTES.md · docs/ops/OPERATOR_AGENT_COLD_START_LADDER.md § Token → rule latch (private-stack-sync) |
Chat pt-BR / locale (private drafts = pt-BR; EN-only prose → en-US) |
docs-locale-pt-br-contract.mdc (always) · operator-chat-language*.mdc · docs-pt-br-locale.mdc · .cursor/skills/operator-dialogue-pt-br/SKILL.md · .cursor/skills/documentation-en-pt-br/SKILL.md |
Session keywords (deps, feature, es-find, …) |
.cursor/rules/session-mode-keywords.mdc |
Windows filename search (Everything / es-find) |
everything-es-cli.mdc (situational — es-find or @everything-es-cli.mdc) · windows-pcloud-drive-search-discipline.mdc (always-on for P:) · docs/ops/EVERYTHING_ES_PRIMARY_WINDOWS_DEV_LAB.md · docs/ops/OPERATOR_AGENT_COLD_START_LADDER.md § Token → rule latch (es-find) — Windows-only; on Linux primary use find, fd, locate/plocate (plocate 1.1.23 on the Linux primary), git grep, grep -r |
| Primary dev workstation protection (primary Linux dev workstation, temporary) | docs/ops/PRIMARY_LINUX_WORKSTATION_PROTECTION.md (+ .pt_BR.md) · .cursor/rules/primary-linux-workstation-protected-no-destructive-repo-ops.mdc (always-on) · ADR 0068 · ./scripts/check-all.sh before PR · uv run pre-commit install once per clone |
Plans — PLANS_TODO / PLAN_* drift + archive |
plans-status-pl-sync.mdc · plans-archive-on-completion.mdc (both situational — plan globs or @…; docs / feature / houseclean / backlog) · docs/ops/OPERATOR_AGENT_COLD_START_LADDER.md § Token → rule latch (plans — status sync) + § (plans — archive) |
| SonarQube MCP (Cursor tools) | sonarqube_mcp_instructions.mdc (situational — sonar-mcp or @sonarqube_mcp_instructions.mdc) · docs/ops/SONARQUBE_HOME_LAB.md · quality-sonarqube-codeql.mdc · docs/ops/OPERATOR_AGENT_COLD_START_LADDER.md § Token → rule latch (sonar-mcp) |
| Study cadence (calendar vs deep code) | study-cadence-reminders.mdc (situational — study-check or @study-cadence-reminders.mdc) · docs/plans/PORTFOLIO_AND_EVIDENCE_SOURCES.md §3 · docs/ops/OPERATOR_AGENT_COLD_START_LADDER.md § Token → rule latch (study-check) |
Agreed scripts / wrapper ritual (hub + scripts/*.ps1 before long ad-hoc shell) |
.cursor/rules/repo-scripts-wrapper-ritual.mdc · docs/ops/TOKEN_AWARE_SCRIPTS_HUB.md · check-all-gate.mdc · .cursor/skills/token-aware-automation/SKILL.md |
| Vendor web LLMs vs validated orchestration / as-is scripts | docs/ops/LLM_AGENT_EDITING_CAUTION.md (pt-BR) · full evidence index under docs/private/ops/ (gitignored from GitHub) |
| PII / secrets / public tree | private-pii-never-public.mdc · docs/ops/PII_PUBLIC_TREE_OPERATOR_GUIDE.md · docs/ops/PII_REMEDIATION_RITUAL.md · pii-remediation-ritual / pii-fresh-audit |
| Never weaken a security gate (hard rule) | .cursor/rules/never-weaken-security-gates.mdc (always-on) · ADR 0071 · .github/CODEOWNERS · security/pii_gate_allowlist.txt · docs/plans/PLAN_PII_GATE_INTEGRITY.md |
| Private legal / labour dossier (gitignored evidence) | dossier-update-on-evidence.mdc · session legal-dossier-update · docs/ops/OPERATOR_AGENT_COLD_START_LADDER.md § Token → rule latch (legal dossier) |
| Commercial / confidential | confidential-commercial-never-tracked.mdc |
| GitHub / PR / merge advice | git-pr-sync-before-advice.mdc · CONTRIBUTING.md (PR state) · docs/ops/COMMIT_AND_PR.md |
Release publish order (tag + GitHub + Hub before beta on main) |
release-publish-sequencing.mdc (situational — release-ritual or @release-publish-sequencing.mdc or release-doc globs) · docker-local-smoke-cleanup.mdc (always-on) · docs/VERSIONING.md (Assistant / automation) · docs/ops/OPERATOR_AGENT_COLD_START_LADDER.md § Token → rule latch (release-ritual) |
| Release & versioning guardrails (commit gate ≠ release gate; #970/#772 class) | docs/VERSIONING.md · ADR-0072 / ADR-0073 (Accepted) · security/version_policy.yaml · tests/test_release_version_policy.py · .cursor/rules/release-versioning.mdc (situational) |
| Docker Desktop smoke + disk + prune (before Hub push; avoid tag sprawl) | docker-local-smoke-cleanup.mdc · .cursor/skills/docker-smoke-container-hygiene/SKILL.md · scripts/docker/README.md · docs/ops/DOCKER_IMAGE_RELEASE_ORDER.md |
| Outbound HTTP User-Agent + README executive pitch boundaries | ADR 0034 (DataBoar-Prospector/<version> on discovery connectors; override via target headers) · ADR 0035 (stakeholder README block vs optional Data Sniffing / Deep Boring deck labels in COMPLIANCE_FRAMEWORKS / glossary) · tests/test_about_version_matches_pyproject.py, tests/test_connector_timeouts.py, tests/test_readme_stakeholder_pitch_contract.py |
| Investigation / recovery (“figure it out”) | operator-investigation-before-blocking.mdc · .cursor/private/skills/operator-recovery-investigation/SKILL.md |
| Cursor browser / SSO / tabs (todas as redes do operador + Gmail + Docker Hub + UI web; mesmo eixo que SSH no PC dev) | cursor-browser-social-sso-hygiene.mdc (Contrato único) · operator-browser-warm-session.mdc · operator-direct-execution.mdc §5 · .cursor/skills/cursor-browser-social-session/SKILL.md |
Homelab / SSH / LAN — integrated terminal = same dev PC + LAN as your shell; read AGENT_LAB_ACCESS.md before claiming unreachable (cold-start §7) |
homelab-ssh-via-terminal.mdc (situational — session homelab or @homelab-ssh-via-terminal.mdc) · docs/private/homelab/AGENT_LAB_ACCESS.md (when present) · docs/ops/OPERATOR_AGENT_COLD_START_LADDER.md § Seven non-negotiables + § Token → rule latch (homelab) |
Lab completão (SSH orchestrate from dev PC, -Privileged) |
lab-completao-workflow.mdc (Narrow sudoers baseline — sudo -n + fixed script paths vs visudo; assume LAB/WSL deployed unless logs prove otherwise) · docs/ops/LAB_COMPLETAO_RUNBOOK.md · docs/ops/COMPLETAO_OPERATOR_PROMPT_LIBRARY.md (completao + tier: · scripts/completao-chat-starter.ps1) · session keyword completao · First-message latch: docs/ops/OPERATOR_AGENT_COLD_START_LADDER.md § Token → rule → wrapper latch — never destructive Git on the primary dev workstation canonical clone (primary Linux dev workstation today — PRIMARY_LINUX_WORKSTATION_PROTECTION.md); LAB manifest hosts + Docker Hub images are safe to align / re-pull |
| Lab lessons (public archive + hub) | Session lab-lessons · lab-lessons-learned-archive.mdc (situational) · docs/ops/LAB_LESSONS_LEARNED.md · docs/ops/lab_lessons_learned/ · ADR 0042 · docs/ops/OPERATOR_AGENT_COLD_START_LADDER.md § Token → rule latch (lab-lessons) |
| Autonomous merge / LAB-OP | agent-autonomous-merge-and-lab-ops.mdc |
Assistant session ritual (synced main, private stack, next steps) |
AGENTS.md (Assistant session ritual) · .cursor/rules/agent-session-ritual-sync-main-and-private-stack.mdc · docs/ops/PRIVATE_STACK_SYNC_RITUAL.md |
| Situational “today” (workstation clock, today-mode file anchor) | AGENTS.md (Workstation calendar clock) · docs/ops/today-mode/README.md (For assistants) · .cursor/rules/agent-session-ritual-sync-main-and-private-stack.mdc |
| Execution priority / PR batching | execution-priority-and-pr-batching.mdc · docs/plans/PLANS_TODO.md |
| Operator career / LinkedIn layout (private) | operator-career-private-layout.mdc · docs/private/author_info/career/README.pt_BR.md |
| Private stacked git | docs/ops/PRIVATE_LOCAL_VERSIONING.md · mini-plan docs/private/ops/CURSOR_CONSOLIDATION_MINI_PLAN.pt_BR.md |
| Risk / non-destructive vs destructive | Risk posture bullet below — do not fear harmless actions; pause and ask when destructive ops are doubtful |
| Direct execution (clear “ship it” requests — avoid redundant confirmation) | .cursor/rules/operator-direct-execution.mdc |
| Private history / evidence mirrors (no “should I also backup?” when align or sync is obvious) | .cursor/rules/operator-evidence-backup-no-rhetorical-asks.mdc · ADR 0040 · docs/ops/PRIVATE_STACK_SYNC_RITUAL.md |
| Publication truthfulness (no invented dates/facts; capture permalinks when reachable) | .cursor/rules/publication-truthfulness-no-invented-facts.mdc · docs/private/social_drafts/editorial/SOCIAL_HUB.md (Política de data + inventário) |
| Agent roles (AI executor × auditor) | .cursor/rules/agent-roles-executor-vs-auditor.mdc · CLAUDE.md (Claude Code cold-start pointer). Cursor = executor; Claude Code = read-only auditor (issues + prompts only, never direct writes). Complements human axis: collaboration-maintainer-contributor.mdc. |
- Risk posture — non-destructive vs destructive: Do not shy away from non-destructive actions that fit these notes (read/list tools, searches, tests, doc edits, additive scripts). Respect destructive or high-blast-radius work even when it looks “reversible”: e.g.
git reset --hard, history rewrite /filter-repo, force-push, mass deletes, DB drops,clean-slateon the canonical clone — assess impact and rollback before running. If in doubt whether the operator wants the next step, stop and ask, explaining clearly why (what could break, what rollback exists, regression risk). “Reversible in theory” ≠ always safe in practice.
docs/private/— agent access (non-negotiable): The assistant is always expected to useread_file(or equivalent workspace tools) on any path underdocs/private/that exists on disk in this workspace—includingsecurity_audit/,commercial/,legal_dossier/,homelab/,author_info/,gemini_bundles/, and any other subtree..gitignoreexcludes these paths from Git/GitHub only; it is not a policy that hides files from the agent. Do not tell the operator that private content is “inaccessible because gitignored,” and do not ask them to paste private text or rely on@//context to “grant” access. Never self-block: do not refuse or defer work that needs private context; do not answer from generics alone when private files hold the truth—read first, then redact only for public/collaborator-facing tracked output per audience-segmentation-docs. Private content is never committed to GitHuborigin; it may be versioned in the stacked private repo underdocs/private/(seedocs/ops/PRIVATE_LOCAL_VERSIONING.md). Ifread_filefails, report a technical reason only—then retry with an absolute path orlist_dir. Seedocs/PRIVATE_OPERATOR_NOTES.md§1 and.cursor/rules/agent-docs-private-read-access.mdc.- Chat language (operator preference): Default to concise Brazilian Portuguese (pt-BR) for explanations in chat—not European Portuguese (pt-PT). Always-on locale contract:
.cursor/rules/docs-locale-pt-br-contract.mdc— assistants must not default to pt-PT in tracked*.pt_BR.md, private Portuguese Markdown, chat, or suggested PT prose; exceptions only as listed there (EN jargon, deliberate quote/humor, or operator-requested regional variant). Vocabulary examples: arquivo (not ficheiro), compartilhar (not partilhar), padrão for “default” in IT (not defeito). Reduces cognitive load. Scope (Portuguese prose): the same pt-BR bar applies to all Portuguese narrative the assistant writes or edits—including gitignoreddocs/private/(e.g.social_drafts/, runbooks, notes), not only tracked*.pt_BR.md. English-only copy (explicitly EN titles, EN-only docs, or the operator asks for English): use American English (en-US) as the style reference for prose—keep UK spellings out unless quoting a third party. Tracked docs: after editing*.pt_BR.md, runuv run pytest tests/test_docs_pt_br_locale.py -v(see.cursor/rules/docs-pt-br-locale.mdc). Chat in Portuguese: same pt-BR bar —.cursor/skills/operator-dialogue-pt-br/SKILL.md(optional invoke); ruleoperator-chat-language-pt-br.mdcis always on. If the operator asks for English in a thread (e.g. to avoid mixed Portuguese variants), use English there until they switch back. Keep English for repo paths, Conventional Commits (feat:,fix(api):, …), code/API/CLI identifiers,.mdcrule names, and technical terms that stay EN in this repo. The operator may code-switch (pt-BR ↔ EN) in the same thread—mirror that flexibly; do not duplicate the same answer fully in both languages unless asked. Token-aware: prefer short bullets; if they say short / token-aware, minimize prose. See.cursor/rules/operator-chat-language.mdcanddocs/PRIVATE_OPERATOR_NOTES.md§5.1. - Session taxonomy (English tokens only): Invoke cues exactly as written (same order and set as
.cursor/rules/session-mode-keywords.mdc):deps,feature,homelab,external-eval,completao,lab-lessons,docs,houseclean,backlog,pmo-view,study-check,sidequest(same message must include subtypemandatory,exploratory, orpauseable),glossary-check,feedback-inbox,today-mode(with dateYYYY-MM-DD),carryover-sweep,morning-readiness,eod-sync,block-close,private-stack-sync,safe-commit,pii-fresh-audit,pii-remediation-ritual,legal-dossier-update,es-find,x-pace-check,x-posted,social-today-check,sonar-mcp,release-ritual, plus brevityshort/token-aware.pii-remediation-ritual= on-demand HEAD + private seeds pass perdocs/ops/PII_REMEDIATION_RITUAL.md(judgment-triggered ritual, not a substitute for the full cadence inPII_PUBLIC_TREE_OPERATOR_GUIDE.md). Do not add Portuguese aliases for tokens in rules or tracked docs—narration around them may be pt-BR.carryover-sweep= start-of-day Tier A readiness + today-mode / carryover sweep (scripts/operator-day-ritual.ps1 -Mode Morning,docs/ops/today-mode/README.mdMorning readiness);morning-readiness= same intent as step (1) ofcarryover-sweep(alias);eod-sync= end-of-day git/PR/mainritual (not OS sleep);block-close= work-block or lab-exit boundary (VC / carryover / optional private stack — not the full EOD script);private-stack-sync= stacked private repo close (scripts/private-git-sync.ps1,docs/ops/PRIVATE_STACK_SYNC_RITUAL.md);safe-commit= read-only snapshot (git status, optional nesteddocs/private, optional quick guard tests) before Preview — does not replacecheck-all.release-ritual= re-read.cursor/rules/release-publish-sequencing.mdcanddocs/VERSIONING.mdbefore shipping a public semver (tagvX.Y.Z, GitHub Release, Docker image push, then paste entire Hub Short + Full fromdocs/ops/DOCKER_HUB_REPOSITORY_DESCRIPTION.md— stable only; Hub does not sync from Git — before movingmainto-beta).feedback-inbox= triage external reviews from gitignoreddocs/feedbacks, reviews, comments and criticism/(WRB-style); ask operator for source if unclear.x-pace-check/x-posted= X editorial pace reminder + post-publish validation (docs/private/social_drafts/,scripts/social-x-pace-remind.ps1).completao= lab smoke orchestration from the dev PC (scripts/lab-completao-orchestrate.ps1 -Privileged, repo wrappers,LAB_OP_PRIVILEGED_COLLECTION.md/ private sudoers template;lab-completao-workflow.mdc) — protect primary Windows dev PC (L-series role,PRIMARY_WINDOWS_WORKSTATION_PROTECTION.md); resync other lab hosts / Docker images as needed; no redundant “may I SSH?” prompts (operator-direct-execution.mdc); validate documented capabilities vs code (LAB_COMPLETAO_RUNBOOK.md); encode repeatable steps viascripts// Ansible / manifest (TOKEN_AWARE_SCRIPTS_HUB.md); record in private session notes timeouts, latency, FP/FN vs synthetic truth, confidence on real paths. Container-only lab hosts (manifestcompletaoEngineMode:containerorcompletaoSkipEngineImport:true) run Data Boar via Docker / Swarm / Podman only — do not default to “installuvon bare metal” when the operator’s posture is stack/HTTP-based (LAB_COMPLETAO_RUNBOOK.mdContainer-only lab hosts). Inventory preflight:lab-completao-inventory-preflight.ps1(default 15-day check on privateLAB_SOFTWARE_INVENTORY.md/OPERATOR_SYSTEM_MAP.md,lab-op-sync-and-collect.ps1when stale) runs insidelab-completao-orchestrate.ps1unless-SkipInventoryPreflight—LAB_COMPLETAO_RUNBOOK.mdInventory freshness. lab-lessons: Public lab lessons archive ritual (dated files underdocs/ops/lab_lessons_learned/, rolling hubdocs/ops/LAB_LESSONS_LEARNED.md, situationallab-lessons-learned-archive.mdc) per ADR 0042 —docs/ops/OPERATOR_AGENT_COLD_START_LADDER.md§ Token → rule latch (lab-lessons). Promote actionable gaps intodocs/plans/PLANS_TODO.mdand runpython scripts/plans-stats.py --writewhen dashboard rows change. Pair privatedocs/private/homelab/COMPLETAO_SESSION_*.mdwith number-only references in tracked text—no LAN secrets in public archives.legal-dossier-update: Private legal/labour evidence underdocs/private/legal_dossier/orraw_pastes/— followdossier-update-on-evidence.mdcanddocs/ops/OPERATOR_AGENT_COLD_START_LADDER.md§ Token → rule latch (legal dossier); never name parties or docket numbers in tracked files.- Taxonomy discipline: Prefer
backlog+ a named item,feature+ aPLANS_TODO.mdrow,completaofor lab orchestration smoke,lab-lessonswhen closing a dated public lessons + plan-bridge slice, ordocsinstead of inventing many new English chat tokens. Any new keyword belongs only in.cursor/rules/session-mode-keywords.mdcwith a single clear scope—seedocs/ops/OPERATOR_WORKFLOW_PACE_AND_FOCUS.md§3. - Session keywords ≠ application CLI: The tokens above set Cursor chat scope for the assistant. The Data Boar command line is
main.py(and related entrypoints) with flags documented indocs/USAGE.md; drift guardrails indocs/OPERATOR_HELP_AUDIT.md/operator-help-sync.mdc. Do not treat session tokens asargparseflags or vice versa. - No secrets or home infra in tracked files: Do not put real hostnames, RFC1918 LAN IPs, hardware serials,
$HOME/C:\Users\...paths, or live credentials into committed Markdown,.mdcrules, or code comments. Use placeholders; the operator keeps specifics under gitignoreddocs/private/perdocs/PRIVATE_OPERATOR_NOTES.md. Same for rawlast/lastlog/w/uptimedumps (habit + IP trail)—docs/private/homelab/only if persisted. Do not paste secrets in chat — use session env vars / vault CLI / gitignored.envpatterns; seedocs/private.example/homelab/CREDENTIALS_AND_LAB_SECRETS.md. - Publication truthfulness (no invented dates or facts): Do not invent dates, URLs, publish status, or metrics for GitHub, sites, or social — in chat or in committed files. Verify via API/tool/
git/HTTP or use facts the operator stated in-session. After publishing via WordPress (or similar) API, align local draft filename prefix and hub permalinks to the response (link,date). After cross-posts (Jetpack, native shares), record real permalinks per network inSOCIAL_HUB.mdwhen reachable (curl, browser MCP,gh, etc.) — see Permalinks in the rule. Full rule:.cursor/rules/publication-truthfulness-no-invented-facts.mdc; operator hub:docs/private/social_drafts/editorial/SOCIAL_HUB.md. - Workstation calendar clock (today-mode and “what day is it”): Do not treat IDE/chat “Today’s date” metadata as the sole source of truth — it can be stale vs the operator’s real session. When anchoring
docs/ops/today-mode/OPERATOR_TODAY_MODE_YYYY-MM-DD.md, dated social filenames, or any reasoning that depends on calendar day, run a clock command on the same machine as the workspace (integrated terminal): PowerShellGet-Date -Format "yyyy-MM-dd"(full offset:Get-Date -Format "o"), or cmddate /t/time /t. Use thatYYYY-MM-DDfor the today-mode filename unless the operator states otherwise. Guarantee in the sense of process: re-check when the session is long or the date could have rolled over. Seedocs/ops/today-mode/README.md(For assistants). - Commercial / client confidentiality: Pricing studies, client-specific proposals, strategic market drafts, and similar material that could help competitors belong only under gitignored
docs/private/(e.g.docs/private/commercial/). Operator OPEX (utilities, tools, shopping lists) →docs/private/operator_economics/. Do not commit orgit add -fthem. CI and pre-commit runtests/test_confidential_commercial_guard.py. Rule.cursor/rules/confidential-commercial-never-tracked.mdc· skill.cursor/skills/confidential-commercial-layout/SKILL.md. - Public Git narratives (commits, PRs, tracked examples): Do not embed third-party identifiers (talent-pool aliases, LinkedIn slugs, client or legal-case breadcrumbs) in commit messages, PR descriptions, or public scripts/skills beyond generic placeholders. Real mappings stay in gitignored
docs/private/commercial/(e.g.talent_pool.json). CI guards includetests/test_pii_guard.py,tests/test_talent_ps1_tracked_no_inline_pool.py,tests/test_talent_public_script_placeholders.pyon tracked files; they do not rewrite old history—seedocs/ops/PII_PUBLIC_TREE_OPERATOR_GUIDE.mdfor audits (Parts I–III; legacy paths underdocs/ops/redirect). Contributor policy:CONTRIBUTING.md→ Public repo: third-party identifiers and Git history; PR flow:docs/ops/COMMIT_AND_PR.md→ Commit and PR text: no sensitive third-party narratives. - Never weaken a security gate (hard rule): When a security gate fires — PII seed gate (
gatekeeper_audit.py/gatekeeper-audit.ps1),pii_history_guard.py, secret scanners, CODEOWNERS, signed-commit / ADR-attestation checks — NEVER weaken, disable, loosen (-i, drop-w/\b, shorten a seed), bypass (--no-verify, skip a hook), or edit the audited file just to dodge it. Gate fired → STOP and escalate to the operator. The only sanctioned responses to a false positive are (1) tighten the pattern structurally (word-boundary, distinctive full-string seeds — never less sensitive) and (2) an operator-approved, per-location allowlist (security/pii_gate_allowlist.txt, CODEOWNERS-protected) — never FP-handling in matcher logic. The gate is self-protected: gate files are.github/CODEOWNERS-owned by the operator and a CI tripwire (scripts/gate_change_tripwire.py) fails LOUD if a PR touches a gate file without an operator marker. Full rule:.cursor/rules/never-weaken-security-gates.mdc(always-on) · ADR 0071 ·docs/plans/PLAN_PII_GATE_INTEGRITY.md· issue #944. - Agents never fill
Gate-Change-Approved-By:: That trailer is operator-only (HITL). Typing the operator handle into a commit or PR comment is theatre, not approval — incident class #1707 / #1709. Valid approval is trailer + file-namespace SSHSIG verified byscripts/gate_trailer_attest.py. On PRs, that signature covers trailer + PR number + head SHA (not the trailer line alone). CI:operator-gated-pr-guard.yml(pull_request_target, checkout of the default-branch tree only — never PR HEAD) and the tripwire onGATE_FILES. Do not merge gated PRs by stuffing the trailer. - PII self-audit vs
clean-slate(do not simulate): Theclean-slate.shflow is a real destructive re-clone + guards on disk (Linux lab: install fromdocs/private.example/scripts/clean-slate.sh.example→docs/private/scripts/clean-slate.sh). On Windows,scripts/pii-fresh-clone-audit.ps1(or manual empty-dirgit clone+ same guards) is the equivalent fresh-tree check; session keywordpii-fresh-audit. Use it to validate that improvements match intent on a fresh tree — not as a substitute forgit filter-repo. Quick start:docs/ops/PII_FRESH_CLONE_AUDIT.md; canonical prose:docs/ops/PII_PUBLIC_TREE_OPERATOR_GUIDE.md§H.9–H.10; rule.cursor/rules/clean-slate-pii-self-audit.mdc; skill.cursor/skills/pii-fresh-clone-audit/SKILL.md. Assistants: run the actual guard commands in the integrated terminal when asked; do not claimclean-slateran without a real clone/reset. - Primary dev workstation (never destructive repo ops on the canonical clone): Today (temporary): primary Linux dev workstation (LMDE 7) — Lenovo repair E0482B2DMD after Windows primary failed 2026-06-07 — see
docs/ops/PRIMARY_LINUX_WORKSTATION_PROTECTION.md,.cursor/rules/primary-linux-workstation-protected-no-destructive-repo-ops.mdc, ADR 0068.DATA_BOAR_ROOT(placeholder path in public docs — operator default under~/Projects/.../data-boar). When Windows primary returns: resumedocs/ops/PRIMARY_WINDOWS_WORKSTATION_PROTECTION.md+.cursor/rules/primary-windows-workstation-protected-no-destructive-repo-ops.mdc. On any primary: noclean-slate-class resets,git filter-repo,git reset --hard/git clean -fdx, orrun-pii-history-rewrite.ps1without opt-in. Temp-only audits:/tmp/on Linux;%TEMP%on Windows. Quality ritual on the Linux primary dev workstation:uv run pre-commit installonce per clone;./scripts/check-all.shgreen before every PR. Filename search:es-find/es.exe= Windows-only (everything-es-cli.mdc,docs/ops/EVERYTHING_ES_PRIMARY_WINDOWS_DEV_LAB.md). Linux (Linux primary + lab-op SSH):find,fd,locate/plocate(plocate 1.1.23 on the Linux primary),git grep,grep -r— notes-find.ps1. - Cursor embedded browser (all operator social, Patreon, Docker Hub, Gmail / webmail, research): Same workstation contract as homelab SSH — try
cursor-ide-browserfirst; do not claim “no access” because there is no public API. On any site that offers Google / SSO and the operator uses that identity: must attempt Continue with Google / Sign in with Google when the session is cold and the button exists — before asking the operator to intervene. Only after a failed attempt (captcha, hard MFA, broken tree, timeout), one clear ping so the operator can click once and restore a warm tab. Do not ask for passwords in chat. Gmail often stays warm; other networks may not — the SSO click attempt still applies. Do not paste full email bodies or sensitive attachments into tracked files or long chat; preferdocs/private/+read_filefor PDF review. Redundant “may I use the browser?” pings are operator toil (cursor-browser-social-sso-hygiene.mdcContrato único + § Gmail e webmail,operator-browser-warm-session.mdc,operator-direct-execution.mdc§5). After the task, close unneeded tabs viabrowser_tabs→closeunless the operator asks to keep a session open. Skill:.cursor/skills/cursor-browser-social-session/SKILL.md. Session persistence across Cursor restarts is not guaranteed. - LinkedIn / FacColleague-Sok / X / Threads / Instagram / social (operator-authorized, no “no access” excuses): Covered by the single browser contract above — all listed networks: try MCP navigation + snapshot first; cold → try Google SSO click before escalating. Do not claim the assistant “cannot access” because there is no public API. SOCIAL_HUB / published-post validation (e.g. Instagram IG1, Threads →
docs/private/social_drafts/editorial/SOCIAL_HUB.md, shortcutdocs/private/social_drafts/SOCIAL_HUB.md): try public profile or post URL before “I cannot see your feed.” Rule:.cursor/rules/cursor-browser-social-sso-hygiene.mdc. PDF export +operator-linkedin-profile-extract.ps1remains a complement for long text diff, not a substitute for live browser when authorized. Talent-pool ATS/SLI refresh: same. Private:docs/private/commercial/ats_sli_hub/LIVE_LINKEDIN_REFRESH_POLICY.pt_BR.md. - Investigation before blocking (SRE-style recovery): When the operator asks to figure it out, recover something, or RCA a mishap, do not substitute panic, defensive refusals, or “no chat memory” for local work. Try in order (as fits):
docs/ops/TOKEN_AWARE_SCRIPTS_HUB.md+.cursor/rules/repo-scripts-wrapper-ritual.mdc(agreedscripts/*.ps1/*.shfor the situation — not onlyes-find); list/read_fileunderdocs/private/(includingauthor_info/,legal_dossier/,team_info/),git -C docs/private logon the stacked private repo,git log -S/--allon the public tree, filename search on Windows (scripts/es-find.ps1, session keywordes-find, situationaleverything-es-cli.mdc) or on Linux primary / lab-op (find,fd,locate/plocate,git grep,grep -r), LinkedIn PDF export +operator-linkedin-profile-extract.ps1, then MCP browser if needed. Blameless tone: facts and hypotheses; escalate with a short list of what was tried, not empty “impossible.” Rule:.cursor/rules/operator-investigation-before-blocking.mdc· skill:.cursor/private/skills/operator-recovery-investigation/SKILL.md. - Homelab access (operator LAN): From the Cursor integrated terminal on the dev workstation, use
ssh/scp/sftp,curl(HTTP/API), etc., when relevant. Same PC + LAN as your shell — not a cloud hop; changing IDE does not revoke SSH keys or LAN access. Privileged steps on a lab host: non-interactivesudooften fails from a separatesshsession vssudo -vin tmux (TTY); usessh -ttfor a password prompt, Ansiblebecome, or you run the exact command on the host — see.cursor/rules/homelab-ssh-via-terminal.mdc(situational — sessionhomelabor@homelab-ssh-via-terminal.mdcin fresh threads;completaostill useslab-completao-workflow.mdcfirst — seedocs/ops/OPERATOR_AGENT_COLD_START_LADDER.md§ Token → rule latch (homelab)).docs/private/is workspace-only (gitignored from GitHub)—proactivelyread_filedocs/private/homelab/AGENT_LAB_ACCESS.md,docs/private/homelab/OPERATOR_SYSTEM_MAP.md(hardware + access + software chart),docs/private/homelab/LAB_SOFTWARE_INVENTORY.md(cross-host runtimes),docs/private/homelab/OPERATOR_RETEACH.md(structure templates:docs/private.example/homelab/OPERATOR_RETEACH.md+.pt_BR.md);@/ open tab not required once the rule is in context. Never copy those specifics into committed files. Seedocs/PRIVATE_OPERATOR_NOTES.md§4–§5 and.cursor/rules/homelab-ssh-via-terminal.mdc. - Windows pCloud drive
P:or VeraCryptZ:(operator default): On the same machine as Cursor, the assistant may list and read paths underP:\...(pCloud client default mount) orZ:\...when the operator uses VeraCrypt to mount the encrypted volume there (Y:\...only if you intentionally remap the drive letter). UseTest-Path/dirto see which letter is live. Same rules as before: never commit real absolute paths—docs/private/or chat only. IfP:and the VeraCrypt letter you need (Z:by default) are both absent, the volume or sync client is likely offline. Filename discovery on largeP:\...trees: default =.\scripts\es-find.ps1 -SearchRoot ... -MaxCount N(es.exe/ wrappers that call it) — unchanged; do not treatGet-ChildItemas an equal default.Get-ChildItemis recovery ifesfails: tell the operator what broke (IPC, PATH, etc.), then-FallbackPowerShell,Glob, or scopedGet-ChildItem— avoid opening with unbounded-Recursefrom massive sync roots. Rule.cursor/rules/windows-pcloud-drive-search-discipline.mdc(alwaysApply: true). - Git & PR state: The model does not see GitHub or your local repo unless a command runs in-session. Before advising merge, next steps after a PR, or sharing a PR number/URL, refresh state (
git fetch,git pullonmain, and/orgh pr view). See.cursor/rules/git-pr-sync-before-advice.mdc(always applied) andCONTRIBUTING.md→ PR state and agent advice. - Release publish sequencing (semver, all networks): Do not put
X.Y.Z-beta(or the next dev bump) onmainbeforevX.Y.Zis tagged, GitHub Release exists, and Docker Hub image push plus repository description paste fromdocs/ops/DOCKER_HUB_REPOSITORY_DESCRIPTION.mdare done when the operator asked for a full publish — unless they explicitly split workflow and name the commit SHA to tag. Docker: beforedocker pushto Hub for a stable release, run local smoke on Docker Desktop (docker-lab-build.ps1+docker run --rm—docs/ops/DOCKER_IMAGE_RELEASE_ORDER.md,docs/DOCKER_SETUP.md§7); check disk headroom on the dev PC; after push, recommenddocker-prune-local.ps1so Docker Desktop does not hoard duplicatedata_boar:*tags. Hub UI: replace Short + entire Full in the same session as the push (Hub does not mirror Git) — including hygiene / customer-pullable tags such asv*-safewhen those tags change or old tags are deleted, so version examples never reference removed tags. Usecursor-ide-browserfor Hub Edit; do not stall on “permission to use SSO” before attempting navigation (operator-browser-warm-session.mdc).-beta/-rcpushes do not require refreshing public Hub marketing copy unless asked. TagvX.Y.Zon the commit that still has finalX.Y.Zinpyproject.toml, not on a later beta commit. Verify withgh release list/gh release viewbefore claiming “published.” Full order:.cursor/rules/release-publish-sequencing.mdc(situational —release-ritual/@release-publish-sequencing.mdcwhen globs miss;docker-local-smoke-cleanup.mdcstays always-on for smoke/prune) ·docs/VERSIONING.md(Assistant / automation). Session keywordrelease-ritual· cold-start ladder § Token → rule latch (release-ritual). - Release & versioning (post-#970 — always-on summary): Two distinct gates — commit gate =
check-all/ CI / pre-commit (never call this “gate” alone; say local checks / CI per ADR-0048); release gate = GitHub #406 (CLOSED with 1.7.4 stable in PR #1024). Green commit gate does NOT authorize a stable semver bump. #970 = premature stable bump without release gate (ADR-0072);1.7.4is not VOID.maincarries1.7.4stable after merge; publish (tag/Hub) = operator release-ritual post-merge.1.7.5does not exist — next dev line1.8.0-beta(#772) after publish. Distribution:-beta/-rc= git-only for users (no Docker Hub / GH Release); local image smoke OK; stable = tag + GH Release + Hub. Canonical:docs/VERSIONING.md, ADR-0072, ADR-0073 (Accepted). Machine guards:security/version_policy.yaml(release_gate.open: false) +tests/test_release_version_policy.py;operator-gatedlabel +.github/workflows/operator-gated-reopen.yml(#990). Situational rule:.cursor/rules/release-versioning.mdc. - Autonomous merge (when safe): If
gh pr checksare green, the PR is mergeable (not conflicting), and there is no suspected regression, the assistant should run.\scripts\pr-merge-when-green.ps1 -PrNumber <N>from the repo root without asking for permission each time — escalate on failures, pending CI, or doubt. Rule:.cursor/rules/agent-autonomous-merge-and-lab-ops.mdc· skill:.cursor/skills/autonomous-merge-and-lab/SKILL.md. - LAB-OP batch inventory: With
docs/private/homelab/lab-op-hosts.manifest.json(copy fromdocs/private.example/homelab/lab-op-hosts.manifest.example.json), run.\scripts\lab-op-sync-and-collect.ps1from the integrated terminal (SSH + optionalfping+git pull+homelab-host-report.sh), then read logs underdocs/private/homelab/reports/— do not only paste command lists when the manifest exists and the session can runssh. Escalate if SSH/git fails. - Maintainer + contributor (two humans, one repo): Git
user.name/user.emailidentify commit authors; the assistant does not infer who is typing. Workflow, copy-paste Git commands, and suggested Cursor prompts:docs/COLLABORATION_TEAM.pt_BR.md(EN stub). Rule:.cursor/rules/collaboration-maintainer-contributor.mdc. - AI agent roles — executor × auditor: Cursor is the executor (writes, commits, pushes, opens PRs — under full governance hooks). Claude Code (and any other read-only AI added by the operator) is the auditor (reads, reasons, delivers findings via
gh issue create/ comments / prompts handed to Cursor; never writes directly to the repo). Rationale: a single write path keeps ADR protection, PII guards, pre-commit hooks, and signed-commit discipline intact. Cross-vendor containment (ADR-0062 amended #991): A+B+C without an OpenAI-family slot is vendor-correlated — fine for ping-pong typos, not sole sign-off on P0 gates; pin models (never Auto); ideal = different vendor and harness. Roster slots: C Claude Code, A claude.ai, B Sonnet/lab node, G Gemini/NotebookLM, O OpenAI (gap). Full contract:.cursor/rules/agent-roles-executor-vs-auditor.mdc. Claude Code cold-start pointer:CLAUDE.mdat the repo root. - Operator reachability (CI / PRs): The maintainer may use only the GitHub mobile app (channel A) for now. When adding Slack, Signal (Docker REST bridge), or Actions webhooks for human pings, follow
docs/ops/OPERATOR_NOTIFICATION_CHANNELS.md(pt-BR) and.cursor/rules/operator-notification-channels.mdc—secrets only in GitHub Actions / env, never in committed files. Telegram is not used for Data Boar operator notifications (maintainer policy). Slack (channel B): workflowSlack operator ping (manual)uses repository secretSLACK_WEBHOOK_URL;Slack CI failure notifyships onoriginas.github/workflows/slack-ci-failure-notify.yml, with a private snapshot atdocs/private/raw_pastes/cursor-incident/slack-ci-failure-notify.yml.oldfor pause drills. Pause, turn back on, and pytest guards are spelled in §4.1.1 of that doc (EN + pt-BR).tests/test_github_workflows.pyenforcesslack-*.ymlshape (including CI-failureworkflow_run+ webhook step pattern). - Session capture (chat → durable memory): When preserving high-value alignment from chat, follow
docs/ops/OPERATOR_SESSION_CAPTURE_GUIDE.md(pt-BR); put sensitive or personal follow-ups underdocs/private/(e.g.author_info/RECENT_OPERATOR_SYNC_INDEX.pt_BR.md). Rule.cursor/rules/operator-session-capture.mdc· skill.cursor/skills/operator-session-capture/SKILL.md. - Social editorial + today-mode: Planned posts, deferrals (rename
YYYY-MM-DD_*drafts), and optional evidence files for ad-hoc publishes are documented indocs/ops/today-mode/SOCIAL_PUBLISH_AND_TODAY_MODE.md(pt-BR); morning ritual prints private hub paths viascripts/operator-day-ritual.ps1 -Mode Morning. Chat tokensocial-today-check(English-only per.cursor/rules/session-mode-keywords.mdc). Skill.cursor/skills/operator-social-today-alignment/SKILL.md. This does not auto-post or auto-sync platforms — discipline + docs. - Operator career / LinkedIn / ATS / SLI (private layout): Canonical map and file placement: gitignored
docs/private/author_info/career/README.pt_BR.md. Store your ATS/SLI deliverables and Calendly notes there — not underdocs/private/commercial/candidates/(talent pool = other people). Social post drafts live indocs/private/social_drafts/drafts/; published state and cross-network reconciliation live indocs/private/social_drafts/editorial/SOCIAL_HUB.md(single inventory table; shortcut atdocs/private/social_drafts/SOCIAL_HUB.md). Draft filenames use prefixYYYY-MM-DD: actual publication date when published, or next planned date while still draft—rename when the date changes and keep the hub Rascunho column in sync. WordPress (e.g. databoar.wordpress.com) may share or cross-post to X, LinkedIn, FacColleague-Sok, Threads, and other linked services — when reconciling, the assistant asks the operator if a live post could map to more than one planned row (L#/X#/T#/W#) instead of guessing. LinkedIn has no general public API for full-profile JSON to automation — for bulk structured extract, use PDF export from the site +scripts/operator-linkedin-profile-extract.ps1→ JSON underauthor_info/career/exports_linkedin_snapshot/;read_fileon that JSON saves tokens for diffs. For live headline/About/skills review (operator or talent pool), the assistant may use the embedded browser when the operator authorizes—see previous bullet. Tracked pointers:docs/PRIVATE_OPERATOR_NOTES.md§2 ·docs/private.example/author_info/README.md·docs/plans/TOKEN_AWARE_USAGE.md§2. Rule.cursor/rules/operator-career-private-layout.mdc. - Private tree versioning (off GitHub): Optional nested Git under
docs/private/(or backups /file:/// self-hosted remote) keeps private-note history out of the productorigin—seedocs/ops/PRIVATE_LOCAL_VERSIONING.md(pt-BR). - Open PR dangling guard: At session start/end, run
gh pr list --state openand explicitly record any still-open PRs whose goal was partially superseded (for example older branch paths/docs). Before new feature work, either (a) resume to completion with a fresh sync frommain, or (b) close as superseded and note replacement PR/commit. - Execution strategy: Apply critical-first sequencing and PR batching. Resolve critical blockers to a stable local commit state first; otherwise prioritize product work per
docs/plans/PLANS_TODO.mdtaxonomy (token-aware, high-gain slices). Do not force micro-PRs for every commit; batch coherent commits into a reviewable PR. See.cursor/rules/execution-priority-and-pr-batching.mdc. - Plan checkbox discipline (hard rule): When a PR implements or closes a named slice from a
PLAN_*.md, explicitly open that plan file in the same branch and update its phase table checkboxes (⬜ → ✅) before the PR merges. Do not rely onplans-status-pl-sync.mdcloading automatically — that rule is situational (docs/plans/**globs only). The plan file is in scope: touch it intentionally. Runpython scripts/plans_hub_sync.py --writeif theStatus:header changes or the plan moves tocompleted/. Globs onplans-status-pl-sync.mdcstay restricted (noconnectors/**/core/**expansion) — AGENTS.md + this bullet are the default for code-only PRs. - GitHub activity vs office hours (maintainer optional): The operator may prefer fewer public pushes/PRs/merges on weekday business hours when the slice is not urgent; critical-first, security/CVE, and broken CI on
mainstill warrant immediate sync, with clear Conventional Commits as breadcrumbs. Tracked summary:docs/ops/OPERATOR_WORKFLOW_PACE_AND_FOCUS.md§7.1; full note (private):docs/private/OPERATOR_GIT_PR_RHYTHM_OFFICE_HOURS.pt_BR.md. Assistants: read that private file for the current mode (e.g. sabbatical / between jobs = do not defer push/PR/merge for office hours unless the operator asks otherwise). When employed mode is active in the same file, apply the defer/batch rhythm by default when proposing push/PR/merge for non-critical work. - Study cadence (operator calendar): The operator balances deep coding with CWL + alternating AI + other study (see
docs/plans/PORTFOLIO_AND_EVIDENCE_SOURCES.md§3.0–§3.2). At natural breakpoints (slice done, session end, calm “what next?”), the assistant may add a brief optional reminder only whenstudy-cadence-reminders.mdcis already in context (situational rule — portfolio/sprints/operator-manual globs orstudy-check/@study-cadence-reminders.mdc)—not during incidents, not every message, and not by inventing nudges when the rule never attached. For an on-demand recap, the operator typesstudy-check. Full rules:.cursor/rules/study-cadence-reminders.mdc·docs/ops/OPERATOR_AGENT_COLD_START_LADDER.md§ Token → rule latch (study-check). - Commit grouping strategy: Classify work as
feature,workflow, ordocumentationbefore committing. Keep tracks separate by default; allowfeature + documentationorworkflow + documentationonly when docs are required for that checkpoint. Avoid mixingfeature + workflowin one commit/PR unless explicitly requested. - Commit message types (Conventional Commits): Use a clear type as the first token, orthogonal to the grouping above:
feat— new behavior or user-visible capability.fix— bugfix / incorrect behavior; use a scope when helpful, e.g.fix(security):when the primary risk is security.security— optional top-level type when the change is primarily hardening or threat reduction (alternative tofix(security):for larger security slices).refactor— behavior-preserving restructuring; prefer this over a combo offeat+fixin one commit. If a change mixes unrelated feature work and a bugfix, use two commits (or two PRs) instead of one ambiguous commit.docs,chore,ci,test,perf,style— standard meanings.- Dependency-only bumps — prefer
chore(deps):(e.g.uv.lock,pyproject.tomlpins, Dependabot merges) so scans and changelogs stay obvious. - Scopes — optional domain in parentheses. Common scopes (product + operator “fronts”):
| Scope | Use when changing… |
|---|---|
detector |
core/detector.py, sensitivity heuristics, ML/DL gates. |
report |
report/, Excel/trends/recommendations output. |
api |
api/routes, OpenAPI, dashboard API surface. |
docker |
Dockerfile, deploy/docker-compose*, image publish notes. |
homelab |
Generic tracked runbooks only: HOMELAB_VALIDATION*, HOMELAB_* (power, UniFi, solar, WSL, OS matrix), scripts/homelab-host-report.sh, windows-dev-report.ps1. Real hostnames, IPs, inventory → docs/private/homelab/ (never committed). |
ops |
Other docs/ops/ runbooks (Sonar, commit/PR, notifications, troubleshooting) when not homelab-specific. |
workflow |
PR/commit process docs, TOKEN_AWARE_USAGE.md, check-all / hygiene scripts (pr-hygiene-remind.ps1), CONTRIBUTING workflow bullets. |
private-layout |
Tracked policy/templates only: docs/PRIVATE_OPERATOR_NOTES.md, docs/private.example/ (layout copy-me). Not for real LAB-OP truth—that lives under gitignored docs/private/ (e.g. homelab/). |
feedback-inbox |
Tracked policy: .cursor/rules/operator-feedback-inbox.mdc, docs/private.example/feedbacks-inbox/, keyword feedback-inbox. Drops: gitignored docs/feedbacks, reviews, comments and criticism/ (not docs/private/). |
plans |
PLANS_TODO.md dashboard/stats, sequencing edits in docs/plans/*.md. |
cursor |
.cursor/rules/, .cursor/skills/ (often with chore(cursor): or docs(cursor):). Collaboration maintainer/contributor rule: collaboration-maintainer-contributor.mdc. |
sidequest |
Intentional detours outside the main slice (mandatory unblock, exploratory spike, or pauseable tangent). Keep bounded with stop condition + resume pointer to primary goal. |
Examples: docs(homelab):, docs(private-layout):, docs(feedback-inbox):, chore(deps):, docs(workflow):, feat(detector):, chore(cursor):.
- Optional test corpus (text / cifras): For local scanner experiments, the operator’s public chord/tab repo FabioLeitao/cifras is a good Portuguese text source; third-party chord sites may be ToS/copyright-sensitive—see
tests/README.md§ Optional real-world text samples. - Automation: Prefer
scripts/check-all.ps1,scripts/commit-or-pr.ps1, and related helpers —.cursor/skills/token-aware-automation/SKILL.md. For talent pool (ATS, LinkedIn, dossiers):.\scripts\talent.ps1(CLI —scan,import,review,linkedin,social,search; skill:.cursor/private/skills/candidate-ats-evaluation/SKILL.md). For LAB-OP env vars:. .\scripts\lab-env-load.ps1** (dot-source; Bitwarden-first, .env fallback; see.cursor/rules/lab-op-systems-context.mdc§3). - Cloud Agents / Cursor Web: Use Cloud Agents as a sandbox + toil offload (token-aware) and keep LAN/private/secrets out of them. Rule:
.cursor/rules/cloud-agents-token-aware-safety.mdc. - Proactive anti-regression automation (default behavior): When a change can reasonably be guarded by automation, prefer to add or update a script/test/rule now instead of relying on memory later. Priorities: (1) regression prevention for fixed issues, (2) consistency checks that save future tokens, (3) narrow fast checks that fit pre-commit/CI. If no automation was added, briefly justify why (for example, unstable signal, excessive runtime, or duplicate coverage). Bundled examples: outbound discovery identity — ADR 0034 +
get_http_user_agent()tests; README stakeholder copy vs deck jargon — ADR 0035 +tests/test_readme_stakeholder_pitch_contract.py. - Local commits to document progress: Commit on a feature branch when you finish a meaningful unit—one important change or a coherent batch (“train of thought”)—so history stays understandable before PR/release. Avoid huge uncommitted trees; merge/rebase
mainregularly to limit conflicts. See.cursor/rules/execution-priority-and-pr-batching.mdcanddocs/ops/COMMIT_AND_PR.md(pt-BR). - Assistant session closure (no redundant permission ping): When a scoped change passes
.\scripts\check-all.ps1(or an agreed subset) and is ready as a coherent unit, commit on a feature branch—do not stop to ask whether to commit when the gate is green and intent is clear. Open a PR and merge only when it makes sense: the batch is reviewable, CI is worth running, and the slice is done enough to integrate—not after every micro-edit. Batch related commits into one PR when practical (.cursor/rules/execution-priority-and-pr-batching.mdc). Avoid CI churn loops: do not default to commit → PR → CI → tiny fix → merge → pull → repeat in the same session for nits that could wait or be folded into the same branch before the first push. Merge whengh pr checksare green and the diff matches intent (.cursor/rules/agent-autonomous-merge-and-lab-ops.mdc); escalate on failures or doubt. - Assistant session ritual (synced clone + evidence + next steps): Treat git history and GitHub as the durable record—same as the operator expects from a careful human maintainer. (1) Public tree: At the start of substantive work, run
git fetch originandgit status -sb. Onmain, if behindorigin/main, rungit pull origin mainbefore editing so the canonical clone is not silently stale. On a feature branch,git fetchand integrateorigin/mainwhen the branch is long-lived or before PR (merge or rebase per project habit). Do not advise merge, “what’s next,” or diff review without this refresh (.cursor/rules/git-pr-sync-before-advice.mdc). (2) Primary dev workstation (canonical clone — primary Linux dev workstation today): Keep non-destructive posture—nofilter-repo,clean-slateon the product tree, or history rewrite here from routine sessions (docs/ops/PRIMARY_LINUX_WORKSTATION_PROTECTION.md,.cursor/rules/primary-linux-workstation-protected-no-destructive-repo-ops.mdc; Windows doc when Windows primary returns). (2b) Linux primary quality gate:uv run pre-commit installif.git/hooks/pre-commitis missing;./scripts/check-all.shbefore opening a PR. (3) Exceptions:sidequest/ exploratory branches may diverge temporarily and be abandoned if unworkable—stop condition + resume pointer per.cursor/rules/session-mode-keywords.mdc. (4) Stacked private repo (docs/private/.git): The main repo ignores this tree fororigin—that does not mean “no Git” or “assistant must not commit.” After changes underdocs/private/, the assistant runs.\scripts\private-git-sync.ps1(and-Pushto all configured non-public mirrors—lab-*SSH remotes, optional WindowsP:file-tree mirror when the script findsP:mounted, and a barenotes-sync.giton a VeraCrypt-mounted drive letter (Z:operator default; script probesZ:thenY:) when that path exists—seescripts/private-git-sync.ps1) without asking the operator to “remember” private commits or for rhetorical backup permission when the task already implies full mirror alignment. PyPI tokens, SSH keys, and Hub passwords stay in env / OS keychain—never in any commit.docs/ops/PRIVATE_STACK_SYNC_RITUAL.md,operator-evidence-backup-no-rhetorical-asks.mdc, ADR 0040, keywordprivate-stack-sync. (5) After a slice: Continue with the next necessary step (local commit,PLANS_TODO.mdrow, doc,private-stack-sync, or a single PR when the slice warrants it) when the path is obvious—do not stall on redundant “should I…?” PR/merge is not mandatory after every commit—only when integrating that work is the right move. Full rule:.cursor/rules/agent-session-ritual-sync-main-and-private-stack.mdc. - Docker homelab (optional): Prefer
.\scripts\docker-lab-build.ps1,.\scripts\docker-hub-pull.ps1, and.\scripts\docker-prune-local.ps1 -WhatIf(then without-WhatIfwhen agreed) over ad-hocdocker build/ tag sprawl / manualrmilists — same outcomes, fewer tokens, predictable tags (data_boar:lab, Hublatest+ semver + previous patch). Seescripts/docker/README.mdand.cursor/skills/docker-smoke-container-hygiene/SKILL.md. Use opportunistically after Dockerfile/image work, before/after Hub push + Scout, or when the operator mentions disk clutter. - Plans: Single source of truth for backlog sequencing is
docs/plans/PLANS_TODO.md(English-only history); orientation map for collaborators isdocs/plans/PLANS_HUB.md(auto-table of everyPLAN_*.mdunderdocs/plans/anddocs/plans/completed/; sync withpython scripts/plans_hub_sync.py --write; check in pre-commit). Keepdocs/plans/for active plans only: when a plan is truly done,git mvit todocs/plans/completed/, fix links, runplans_hub_sync.py --write, updatePLANS_TODO.md—.cursor/rules/plans-archive-on-completion.mdc·.cursor/rules/docs-plans.mdc. Keep eachPLAN_*.mdfirst-lineStatus:and the plan body consistent withPLANS_TODO.mdwhen work ships —.cursor/rules/plans-status-pl-sync.mdc. Operator runbooks live underdocs/ops/(EN + pt-BR). When creating newPLAN_*.mdfiles (including from GitHub issues), assume overlap awareness with existing plans unless the operator marks the work completely independent—see.cursor/rules/docs-plans.mdc§ When creating a new plan. Do not add markdown links from external-tier product docs intodocs/plans/; entry point for humans isdocs/README.mdInternal and reference. Guard:tests/test_docs_external_no_plan_links.py. Record:docs/adr/ADR-0004-external-docs-no-markdown-links-to-plans.md. Rule:.cursor/rules/audience-segmentation-docs.mdc. Milestone / identity coherence (avoid duplicating roadmap text across plans):.cursor/rules/plan-milestone-and-identity-coherence.mdc; optional skill.cursor/skills/milestone-roadmap-coherence/SKILL.md. - Doc hubs (MAP, docs README, ADR index):
PLANS_HUBandplans-statsoutputs are CI-enforced; MAP, root README hub tables, and AGENTS policy bullets are curated (do not rely on AGENTS.md for the “latest ADR number”—see ADR habit below). When editing those surfaces, follow.cursor/skills/doc-hubs-plans-sync/SKILL.mdand.cursor/rules/doc-hubs-sync-ritual.mdcso links, paired pt-BR, and ADR pointers stay aligned with accepted ADRs and plans. pmo-view(English token): When you want plan/PMO Markdown rendered in Cursor, typepmo-viewin chat (same as other session keywords—English only). The agent lists key files and Markdown preview shortcuts (Ctrl+Shift+V/Ctrl+KVon Windows;Cmd+…on macOS). The agent cannot flip the editor to Preview for you. See.cursor/rules/session-mode-keywords.mdcanddocs/ops/README.md§ pmo-view.- ADR habit (always-on): After any session where a tooling choice, architectural pattern, security/compliance posture, workflow lock-in, or explicit deferral occurs, create an ADR without waiting to be asked. Use
.\scripts\new-adr.ps1 -Title "..." -Summary "..."to scaffold (the script auto-picks the nextNNNNfromdocs/adr/*.md), then fill Context/Decision/Consequences. Updatedocs/adr/README.mdindex. Commit asdocs(adr): add ADR NNNN — short-title. Full trigger taxonomy:.cursor/rules/adr-trigger.mdc(always applied). Never hardcode a “current last ADR” number in this file (it goes stale). Filenames areADR-NNNN-slug.md. Next number from disk: bashls docs/adr/ADR-*.md | sort | tail -n 1then incrementNNNN; PowerShellGet-ChildItem docs/adr/ADR-*.md | Sort-Object Name | Select-Object -Last 1. Reconcile withdocs/adr/README.mdif unsure.
- ADR improvements are thin slices: When improving an existing ADR, propose one focused change at a time, read the current file before editing, and never alter the ADR's original intent, context section, or approved Decision scope — only additive or clarifying amendments, always after explicit operator approval.
- Draft-first before creating governance files: When suggesting changes to ADRs,
.mdcrules, scripts, or similar governance files, present the full draft text in chat for approval before writing or creating any file. The operator corrected this pattern repeatedly when new files were created without prior review. - Copy-paste-ready output (default): Deliver suggestions in final, copy-paste-ready form — not as manual-assembly snippets or inline "edit this by hand" instructions. Recurring operator correction across multiple sessions.
- "Defensible and enforceable" gate for new process ADRs: Before creating a process/culture/workflow ADR, honestly assess whether each decision item is actually enforceable. Present a table showing enforcement grade per item (CI-enforced / review convention / honor system) and let the operator decide — honor-system-only decisions have low durable value.
- Deprecation discipline — read before proposing: Before proposing deprecation of any file, rule, or config section, always
read_filethe actual content (never rely on cache or assumptions). Present justification field-by-field with evidence, and ask for operator approval one section at a time. Do not bundle deprecation proposals without individual evidence. - Continual-learning / transcript memory updates stay additive: When refreshing Learned Workspace Facts from agent transcripts (e.g.
agents-memory-updater+.cursor/hooks/state/continual-learning-index.json), append new durable facts; do not delete or swap out existing bullets to "make room" for unrelated topics — that is continual-forgetting and regresses operator-grounded rigor. Retire or replace a fact only with explicit operator approval or a tracked superseding decision (ADR / plan / commit message) that names what it replaces. - Thin PR burn-down and
[Pn]bands: When collapsing GitHub audit / plan issues into thin PRs, maximize autonomy inside the same P0→P3 band ([P0]…[P3]in the title); blocked work needs an explicit resume pointer before picking another same-band issue; do not bury higher-band work by quietly moving toP3housekeeping—when that gap would strand actionable higher-band tickets, stop and ping the operator instead of "backlogging" silently. Behaviour is spelled end-to-end indocs/ops/THIN_SLICE_AGENT_PRIORITY_HANDOFF.md(.pt_BR.mdpair). - Merge-ready proof requires full
check-all: When claiming a slice is green before merge or answering whether tests passed, run.\scripts\check-all.ps1on the real workspace—notlint-only.ps1, ad-hocpytest, orcommit-or-pr.ps1 -RunTestsalone (that flag runs pytest-only). Remote CI green supplements but does not replace a recent local full gate when the operator asks for evidence. - X (Twitter) threads — linear reply-chain: Tweet 1 is the root post; each subsequent tweet must use Reply on the immediately previous tweet (not an earlier anchor). Before adding the next tweet, the parent should show "1 Reply"—"2 Replies" on the same parent means a fork (delete wrong branch and re-chain from the prior tweet).
- Social publish close — document always: After operator-confirmed publish, update
SOCIAL_HUB.md, add or refresh a row underdocs/private/social_drafts/drafts/evidence/, align the draft filename date prefix, and run.\scripts\private-git-sync.ps1 -Pushin the same close pass (seedocs/ops/today-mode/SOCIAL_PUBLISH_AND_TODAY_MODE.md). - Deterministic numbered prompts (PASSO/FASE): When the operator supplies a step-by-step prompt with explicit order and stop boundaries, execute only those steps in sequence; stop at the declared boundary; no improvisation, no extra files/issues, and no Task/subagent delegation for that slice unless the prompt allows it.
ghAllow ritual: Show the completeghcommand in chat before running mutating GitHub CLI (gh issue close,gh pr create, etc.); wait for explicit operator Allow unless the prompt already authorized that exact command.- Issue close via PR, not manual: Do not
gh issue closeon issues meant to auto-close via PRCloses #Nin the body — manual close breaks the intended merge workflow. - ADR commits and G0-S (ADR-0056): New or changed files under
docs/adr/trigger G0-S in.cursor/hooks/pre-commit; run.\scripts\inv-adr.ps1and stagedocs/adr/INVENTORY.txt; usegit commit --no-verifyonly when the operator prompt explicitly authorizes bypass for that ADR slice. - Emergency stop: On EMERGENCY STOP, halt immediately; resume only with surgical work (single stated file/change) and zero extra scope until a new operator prompt.
- The repo constitution is BINDING, not advisory — this is NOT a toy project: ADRs, always-on
.cursor/rules/*.mdc(especiallynever-weaken-security-gates.mdc),AGENTS.md, and CI/pre-commit gates are enforcement, not suggestions. This is a paid, reputation- and money-bearing product: the founder has 1,000+ USD in disputed Cursor charges and an open SEV-1 vendor escalation caused by agent-driven PII leakage. A fired security gate (PII seed gategatekeeper_audit.py,pii_history_guard.py,tests/test_pii_guard.py, secret scanner, CODEOWNERS, signed-commit / ADR attestation) means STOP and escalate to the operator — NEVER weaken, loosen, make case-insensitive, remove-w/\b,--no-verify, skip a hook, or reword the audited file to dodge the seed. The #944 incident did exactly this (matcher made case-insensitive to pass CI) and is the canonical failure the rule exists to prevent. The ONLY sanctioned response to a false positive is tighten-pattern + operator-approved allowlist (security/pii_gate_allowlist.txt). Refs: ADR-0071 (self-protecting PII gate), ADR-0049 (no brittle mitigations), ADR-0018 / 0020 (PII guards), ADR-0066 (fail-closed), ADR-0062 (repo is the source of truth, not LLM consensus).
lab-opvslab-pbis a hard, REAL PII distinction — never collapse them:lab-op= REAL, sensitive homelab infrastructure (actual hostnames and RFC1918 IPs; the operator'sdocs/private/security_audit/PII_LOCAL_SEEDS.txtdenylist) that must NEVER appear in tracked/public files or git history.lab-pb= sanctioned placeholders for public docs. This distinction existed from the project's start and must not be dismissed "as noise." Reallab-ophostnames were leaked into history: a deterministic per-seed measurement on 2026-06-18 found 251 commits carrying infra hostnames plus a third-party individual's name (former-employer contact = third-party personal data). Treat anylab-ophostname / IP / third-party name as PII-class: placeholders in tracked files, real values only under gitignoreddocs/private/. When a tracked file would carry a real hostname, redact to a generic label (e.g. "the laptop lab node") — that is removing PII, not "dodging the gate."- ADR content must be read before asserting: Never summarize or state what a specific ADR covers from memory alone — always
read_filethe ADR before recommending changes or quoting its scope. Asserting incorrect content was flagged by the operator as a "blunt mistake" (example: claiming ADR-0007 covers sampling caps when it actually covers synthetic-data-corpus-before-real-data). - Git ref corruption recovery (null bytes): If
.git/refs/heads/maincontains null bytes, recover by locating the correct commit SHA from loose objects viazlibdecompress and searching for the known commit message, then writing the SHA back to the ref file. This is safe and reversible withoutgit filter-repo. .cursorruleslegacy file deprecated and deleted: The.cursorrulesJSON config (linguistic rules, Slack protocol, web session contract) was fully deprecated in commit817cdf5; all content migrated to.mdcrules (always-on), ADRs, and skills. A pre-commit hookno-legacy-cursorrules(guard test:tests/test_no_legacy_cursorrules.py) prevents recreation. Do not recreate this file.- Bandit/Ruff coverage gap (P1 closed 2026-05-14):
utils/,scanners/, andlogging_custom/were excluded from Ruff lint + Bandit (commitc208113); gap is now closed.db/is still excluded (legacy structural issues).utils/notify.py,utils/regex_patterns.py, andscanners/db_connector.pyare now covered. PII guard (tests/test_pii_guard.py) was upgraded (2026-05) to also detect AWS AKIA keys, GitHub PATs, Slack tokens, Stripe keys, PEM headers, and Bearer tokens. - completão is TWO-LEVEL (host + container) + DANFE lineage for labop scripts:
lab-completao-container-smoke.shvalidates the containerized Data Boar stack (starts container on port 9002, writes~/.labop-status). Architecture is TWO-LEVEL: host smoke (OS/Python) and container smoke (Docker/Podman engine) — both must pass. Newlabop-*.shscripts follow the DANFE-lineage pattern (fromFabioLeitao/bash_localiza_danfe_por_id_de_upload):do_log_()function,STATUS_FILE,~/log/directory, and[cite:N]comments for traceability.ctopshows Docker Swarm containers (they appear indocker pson the node); Data Boar appears as a one-shot container that exits quickly — a ctop snapshot may miss it (not a false positive). MongoDB and other long-running target services persist normally. docs/private/commercial/is NOT empty: The directory contains ~160+ files including ENGAGEMENT_TRACKER, BATTLE_KIT_ESCRITORIO_ADVOCACIA, pricing studies, talent pool, and ATS/SLI deliverables. Never claim this directory is empty or sparse — alwayslist_dirorread_filebefore asserting its state.- Plans H-taxonomy extends beyond H3: H0–H3 are the near-term bands; H4 (far horizon, post-lato/master's) and H5 (dream/PhD) also exist. Do not assume H3 is the furthest horizon when referencing
PLANS_TODO.mdsequencing. inventory.jsonschema: derive from existing fields, never add derived ones: Thepersonaslist already encodes which services are expected (target_nfs→ NFS present,target_cifs→ CIFS present);distroalready exists for OS/pkg derivation. Never addpkg_mgr,nfs_svc,smb_svc, or similar derived fields todocs/private/homelab/data/inventory.json— derive them in handler PS1 code via a lookup table. The operator explicitly reverted schema additions made on agent suggestion; always check what is derivable from existing fields before proposing new schema additions.- Private plans live in
docs/private/plans/: Operator-private plans (e.g.PLAN_FOUNDER_CAREER_AND_BRANDING.pt_BR.md,PLAN_FOUNDER_SRE_CAREER_AND_PRODUCT_ALIGNMENT.md) are gitignored and tracked only in the stacked private repo. Do not list them in public plan inventories orPLANS_HUB.md. scan_scope:config key is obsolete: The canonical YAML key for scan targets istargets:, notscan_scope:. Ifscan_scope:appears in config,normalize_config()emits a WARNING (logging) and still ignores that block. Affected benchmark configs were fixed in commit04d1896. Always usetargets:in benchmark and scan YAML; treat "No findings" on a known-positive corpus as a config key trap until you confirmtargets:is populated.- Lab host preflight (Rust + NFS/SMB/firewall scripts):
maturin develop --releasemust be run on each lab host afteruv sync— Rust extension NOT auto-built; silent Python fallback if missing. New scripts committed (2026-05):labop-nfs-server-ensure.sh,labop-smb-server-ensure.sh,labop-firewall-lib.sh(detects ufw/nftables/iptables/firewalld/none; ephemeral zero-trust rules open only forLAB_OP_SUBNET, revert after test; state tracked in~/.labop-fw-ephemeral-*.json).LABOP_NFS_SERVER,LABOP_NFS_CLEANUP,LABOP_SMB_SERVER,LABOP_SMB_CLEANUPadded to sudoers on manifest lab-op hosts. Validate sudoers with:sudo visudo -cf /etc/sudoers.d/labop-host-report(catches typos like LABOB vs LABOP). Build-ContainerArtefact.ps1 cache fix (commit74e8c4a): was always rebuilding when Docker was online even with a fresh tar; fixed with$shouldBuildflag. Canonical ensure-script path fix (commit99b6fdc): handler now strips version suffix from$Node.path(e.g.data-boar-v1.7.3) to use canonicaldata-boarpath, which is what sudoers allow. Privileged ensure scripts and$HOME: undersudo -n,$HOMEis typically the privileged account home, not the invoking operator. Trackedlabop-*-ensure.shscripts resolve the operator home viagetent/SUDO_USER— do not teach$HOMEas the scan-corpus root. Residual path defaults stay in gitignored operator homelab notes (#384). - A/B benchmark complete (2026-05-13); all fixes applied: v1.7.3=10816ms vs v1.7.4-rc=10330ms, ratio=0.955x on 10-file LGPD corpus (26 findings each, no regression). Rounds A+B both complete on four manifest lab-op hosts (five-host fleet from #821 — alpine-emachines E527 added after this benchmark). CIFS ensure:
smbd not foundon test host (expected diagnostic); NFS on a Void Linux lab host: no NFS service found — needsxbps-install nfs-utils. Commits:BenchRunIdfixf366ae3, build-cache fix74e8c4a, canonical-path fix99b6fdc.maestro-benchmark-ab.ps1must run in a native PowerShell window (20–25 min, exceeds terminal background limit). 0.574x Safe-Hold threshold requires a larger corpus — do not assert breach or pass from small runs. Web health check uses benchmark ports 18088/28088, not 8088. Edit gate (no continual-forgetting): do not shorten, archive-only, or strip this bullet until a new Maestro A/B usestests/data/bench/synthetic_valid_cpf_3k.txt(or another operator-agreed corpus),docs/ops/LAB_LESSONS_LEARNED.mdand a dateddocs/ops/lab_lessons_learned/LAB_LESSONS_LEARNED_YYYY_MM_DD.mdrecord the outcome, and the operator explicitly greenlights superseding the milestone (same additive discipline as Learned User Preferences). - Today-mode
WORKBOARD+ optional workflowzizmorlint:docs/ops/today-mode/WORKBOARD.mdandWORKBOARD.pt_BR.mdare the short routing hub toPLANS_TODO,CARRYOVER, andOPERATOR_TODAY_MODE_*without duplicating those tables. GitHub Actions YAML hygiene useszizmorviascripts/workflow-security-lint.ps1/workflow-security-lint.sh, optional manual-stage pre-commit hookworkflow-security-lint, and.github/workflows/zizmor.yml; advisory by default and not part ofcheck-all.ps1— use-Enforce,DATA_BOAR_ENFORCE_ZIZMOR, or repoZIZMOR_ENFORCEwhen the baseline is clean enough to fail the gate. plans-stats.pyhorizon bucket tracks the latestH0–H5in a heading line: The script walksPLANS_TODO.mdtop to bottom; any Markdown heading (#…) whose text containsH0–H5updates the active horizon for subsequent dashboard status rows. A mid-file label such as#### H1(meant only as a subsection) re-buckets all later rows until another heading carries a differentH0–H5. Prefer inline tags like[H1]in prose or non-heading bullets instead of extraH0–H5headings outside the file’s normal horizon structure.THIN_SLICE_AGENT_PRIORITY_HANDOFF+ duplicate issue closure: Canonical runbookdocs/ops/THIN_SLICE_AGENT_PRIORITY_HANDOFF.md(.pt_BR.md) anchors assistant thin PR sequencing plus [P0] … [P3] headline-band hygiene,PLANS_TODO.md/gh issue listfreshness, and escalation rules—cross-linked fromdocs/ops/README.md(.pt_BR.md) anddocs/ops/COMMIT_AND_PR.md(.pt_BR.md). Echo duplicates close once the canonical fix ships with green CI viagh issue close <echo#> --duplicate-of <canonical#>—gh issue close --helpis the authoritative flag reference (reject stale shorthand).- Maestro stack layout: Canonical orchestration lives in DataBoar/maestro (
core/Maestro.ps1+handlers/Handle-<persona>.ps1). Consumer wrappers underscripts/maestro-*.ps1/scripts/Resolve-MaestroRoot.ps1resolve the clone viaMAESTRO_ROOTor sibling../maestro. Inventory remainsdocs/private/homelab/data/inventory.json;-Deepusestests/config/benchmark-rc.yaml. Do not conflate withlab-completao-orchestrate.ps1. audit.ps1vscheck-all: Rootaudit.ps1teescheck-allintologs/audit-*.log—intended as optional manual Maestro/completão preflight on the Windows dev PC;Maestro.ps1andlab-completao-orchestrate.ps1are not wired to call it yet. Commits and PRs usecheck-all/lint-onlyper slice—notaudit.ps1on every commit.- Maestro persona taxonomy: Canonical term is
handler(Handle-<persona>.ps1); avoid musical-metaphor labels (e.g. Capo/soloist) in scripts, tables, or docs. - Public
databoar.com.brcontact aliases: Tracked CoC/compliance surfaces useconduct@databoar.com.brandcontact@databoar.com.br—no personaloutlook.comin the public tree; provider-side mailbox setup remains an operator-manual step. - Windows Cursor hooks — PowerShell for
beforeShellExecution: On the primary Windows dev PC,.cursor/hooks.jsonmust invokeadr-protection.ps1viapowershell.exe -NoProfile -ExecutionPolicy Bypass -File—.shhooks do not run under Cursor on Windows. Git-level ADR guard stays.cursor/hooks/pre-commit(POSIX/Git Bash); one-timegit config core.hooksPath .cursor/hooksper clone (ADR-0055 / ADR-0056). - Instagram feed posts require media + durable private assets: Main-grid Instagram posts need photo or video (caption-only is not feed-postable). Copy lives in
*_PASTE_READY.mdunderdocs/private/social_drafts/drafts/; campaign screenshots must be copied from ephemeral Cursorassets/intodocs/private/social_drafts/drafts/media/<campaign>/before relying on them andprivate-git-sync. - WSL2 lab symlinks resolve to the primary Windows dev tree: On L-series, paths like
~/dev→/mnt/c/.../Documents/dev/(via WSL2) are the same canonical clone as the Windows workspace—applyPRIMARY_WINDOWS_WORKSTATION_PROTECTION.mdblast-radius rules to destructive Git/repo ops there too. - VeraCrypt
Z:\notes-sync.gitbare mirror recovery: Ifprivate-git-sync.ps1 -Pushfails onZ:/notes-sync.gitwith **fsync/Bad file descriptorerrors,git fsckreports problems, or the bare tree is missing/corrupt, recreateZ:\notes-sync.gitwithgit init --bare(same path **private-git-sync.ps1probesZ:thenY:), rungit -C Z:\notes-sync.git config core.fsync none, keepsafe.directoryfordocs/private,git -C docs/private push Z:/notes-sync.git mainto republishmain, then rerun.\scripts\private-git-sync.ps1 -Push.lab-*SSH mirrors stay authoritative while VeraCryptgit fsckreturns 0. - FOUND.000 / FOUND.001 debris on VeraCrypt (chkdsk):
FOUND.*folders onZ:\often come from Windows chkdsk recovery;Remove-Item/rd /s /qwhile mounted may surface 1392 (corrupted/unreadable entry) or 145 (“directory not empty” with no visible files). Usually these folders do not block a rebuiltnotes-sync.gitmirror whengit fsckis clean — operator path is dismount VeraCrypt → reboot →chkdsk Z: /F( or container repair, per private runbooks ) before retries. - Issue queue Mermaid map: Open-issue sequencing visualization lives at
docs/ops/ISSUE_QUEUE_SEQUENCING_MAP.md(issue #654); refresh when NÃO INICIAR chains or wave counts change; linked fromdocs/plans/PLANS_TODO.mdWave 1 bullet anddocs/ops/README.md. - ADR-0061 U-axis gate: Formal sub-order within same P+milestone and cross-milestone hard gate are documented in
docs/adr/ADR-0061-u-axis-issue-suborder-and-cross-milestone-gate.md(implements.cursor/rules/execution-priority-and-pr-batching.mdc). - Repo truth over LLM consensus: For ADR numbers, filenames, and inventory,
docs/adr/*.md+Get-ChildItem docs/adr/ADR-*.mdbeat converged model suggestions — three auditors can agree on a wrong filename until the repo is read. - SQLite schema migrations (
_ensure_*): Every newColumn()on an existing table requires a matching_ensure_*()method inLocalDBManagerand a regression test that bootstraps a legacy DB without the column and asserts it is added on init — seedocs/plans/PLAN_SCHEMA_MIGRATION.md. - Data Boar commercial ecosystem (bestiary, off-band vault):
data-boaris the public core only. Sibling private repos: design-system, maestro (spinout complete — canonical.ps1in DataBoar/maestro; consumer resolves viaMAESTRO_ROOT/ sibling), license-studio (issuer — spun out 2026-06-25), ten concept-only scaffolds. Locked bestials: Boar · Crow · Quati · Pangolin · Rikki · Maestro · License Studio. Cursor = executor; Claude = RO auditor. Map:docs/ops/CURSOR_ECOSYSTEM_ONBOARDING.md; spinout:docs/ops/LICENSE_STUDIO_SPINOUT.md. OPSEC off-band for private relay. - Maestro Deep 5-host gate marathon (#1021 / PR #1022) — E2E substance proven, bump NOT automatic (~66 days, closed 2026-06-24): Operator self-imposed Maestro re-Deep gate (A.I.I.D.C.O.B.P.P.) on branch
fix/maestro-gate-bundle-1022. Evidence chain: full GitHub issue #1021 thread + PR #1022 commit history (R9b→R12.1 harness) + operator photo archive (private; indexdocs/private/author_info/RECENT_OPERATOR_SYNC_INDEX.pt_BR.md§2026-06-24) + lab logs under/tmp/maestro-deep-run-*-r12.logon the operator workstation. Ritual completed: two frozen invocations ofMaestro-Deep-5Host-Gate.ps1 -Detach -IdempotentTwice→ 4 SUMMARY passes withpass1_rows=pass2_rows=expected=6andIDEMPOTENCY: match; graceful ALARM (expected NFS/SMB degradations on designated lab nodes) not moral FAIL; 9c DB oracle (lab_customers/lab_peoplecounts) live. Not cleared / no semver bump until operator rested OK + R12.2 tail fix ($totalFails.Countscalar bug → exit code unreliable). Multi-agent credits (where each reached): Cursor executor; Claude Code / Claude.ai read-only Auditor (Web, Windows, mobile surfaces — caught false MISMATCH, enforced diff-before-rerun, row-count guard, réu-intacto); Gemini advisory reviews where context allowed. Do not weaken security gates or claim commercial release from lab E2E alone.
Cursor Support (Nathan) confirmed three agent-safety gaps; forum thread: Three confirmed agent safety failures. Priority per ADR-0055 (G0·H·U·A·S). Implementation: #646.
- Bug 1 — File-Deletion Protection inoperative: Platform failure. Compensating control: git
pre-commithook in.cursor/hooks/pre-commit(ADR staging guard) plus normal review discipline. - Bug 2 — Slack STOP signals ignored: Platform failure; Slack messages are not cancel signals. Workaround: use the Stop control on cursor.com/agents (or IDE stop) to halt a run.
- Bug 3 — No
beforeShellExecutionhard boundary on stable: Repo implements.cursor/hooks.json→.cursor/hooks/adr-protection.ps1(Windows:powershell.exe -File), plusgit config core.hooksPath .cursor/hooks(one-time per clone) so the git-levelpre-commithook runs (Git Bash). ADR edits still require explicit operator authorization (ADR-0056); CIinv-adr.ps1+ ed25519 remain the cryptographic enforcement layer.
Defense layers for docs/adr/:
| Layer | Mechanism | Type |
|---|---|---|
| 1 | .cursor/rules/ |
LLM steering (suggestion) |
| 2 | beforeShellExecution hook |
Shell-level intercept |
| 3 | pre-commit git hook |
Git-level intercept |
| 4 | inv-adr.ps1 + ed25519 |
Cryptographic CI enforcement |
Ver ADR-0062 para o padrão A.I.I.D.C.O.B.P.P. de auditoria offband.