Eisenhower Matrix — pendency queue (AAA)
Thin classifier + sorter + alias. Reuses
work-compassaggregation SSOT (Jira/GH/PRs/worktrees/branches/stashes/sessions), adds only Eisenhower Q1→Q4 (urgent × importantDo/Schedule/Delegate/Eliminate) with AAA rigor (Accuracy·Auditability·Accountability). Composes — reimplements nothing. v0.2.0 EXECUTABLE: the classifier now RUNS —bin/work-compass-aggregate.py --sort=Eisenhower --pendency-scope=… --include=pending(92 stdlib tests, dogfooded live). Supersedes the doc-only draft PR #368 (see Changelog). Cross-link slug:[[eisenhower-matrix]]· DNA-geracional: §0 BEING>Rules ·scope-discipline6Q ·anti-theater8Q ·rule-quality-tests6 · DUED sunset (inherits forge+anima).
§0 — BEING > Rules
| Check | Verdict |
|---|---|
| Helps operator? | HELPS — turns scattered pending into ONE ordered queue so operator decides Do/Schedule/Delegate/Eliminate without hunting 4 systems. |
| Harm / slavery risk? | LOW — read-only by default; every write/transition is operator-gated (prints command, never executes). |
| Hierarchy | Operator SER (1) > this skill (2) > producers it composes (3). |
HUMAN_DOMAIN defer: jira transition, gh pr merge, git push --delete, cross-org, cost, secrets/PII → print twg/gh dry-run, never auto-act. If a gate obstructs value NOW, log Skipped <gate> — BEING > Rules and proceed.
When to use / not use
Use: --scope=[current|session|repo|vault|all] --sort=[Eisenhower|…] to get unresolved pendencies ordered Q1→Q4 with triple-A evidence.
Not use: single-shot edit, read-only Q&A, ONE goal decompose (→ auto-pilot), session quiescence (→ quiesce), harness-agnostic loop (→ gap-loop), destructive ops.
Parameters (skill surface → CLI mapping)
| Param (skill) | Default | CLI (work-compass-aggregate.py) | Meaning |
|---|---|---|---|
| --scope | current | --pendency-scope current\|session\|repo\|vault\|all | WHERE pendencies live: current (= session+repo surfaces) · session (host session state: sessions/jobs/plans) · repo (branches/worktrees/PRs/issues/stashes) · vault (eko-engram inbox — no collector yet → reported unavailable, never fabricated) · all (everything incl. jira:*). |
| --sort | Eisenhower | --sort Eisenhower\|created\|updated\|urgent\|important | Eisenhower (Q1→Q4) · created (id-order, deterministic) · updated (last_ts desc) · urgent · important. Alias --sort=default → Eisenhower. Case-insensitive. |
| --json | off | --json | Emit the quadrants envelope for agent-to-agent (AAIF) instead of the ASCII queue. |
| --include | all | --include pending\|all | pending (unresolved only — done/archived suppressed) · all (audit view). Skill default invocation passes pending. |
Bare pendencias / eisenhower with no flags → --scope=current --sort=Eisenhower --include=pending.
Flag-name collision (resolved v0.2.0): the CLI keeps --scope for the CPT §9.5
Compass verbs (current|down|sideways|up|forward — apply_scope) and exposes pendency
scoping as the orthogonal --pendency-scope (id-prefix filter — in_pendency_scope).
Anima inline naming note: --pendency-scope — machine register, says exactly what it
filters, zero collision; rejected --pscope (opaque), reusing --scope (collision),
--where (vague).
Eisenhower classifier — 4 quadrants (SSOT for this skill)
Derived from Eisenhower / Covey best practice. Signals are DERIVED (flags set by
work-compass detect(), age from last_ts, domain) — never self-declared (anti-gaming).
| Q | Urgent | Important | Label | Action | Implemented signal |
|---|---|---|---|---|---|
| Q1 | yes | yes | Faça agora | Do | urgency ≥1 ∧ importance ≥1: worktree-dirty-wip (loss-risk NOW), job-orphan (live claim), open PR touched ≤2d (active convergence) × delivery surfaces |
| Q2 | no | yes | Agende | Schedule | importance without urgency: branch-no-PR, PR-no-ticket, ticket-no-session, session-orphan, plan-orphan, stash-forgotten, stale PR (>2d), open tickets. v0.3.2 carve-out: session-orphan on a session whose transcript opened on an automated review-queue bookkeeping record (refs.first_record_type == "queue-operation") does NOT count — its vanished branch is expected post-cleanup, not a loss signal (dogfooded: 1679/2143 real transcripts are such jobs; Q2 413→308, session-orphan-in-Q2 259→154). |
| Q3 | yes | no | Delegue | Delegate | urgency without importance: live loss-risk/claim on a non-delivery domain — ⚠️ signal-starved today (v0.3.0 red-team, honest): every current urgency signal lands on an important domain (worktree/process), so Q3 is wired but structurally unreachable in production. The v0.1.0-spec Q3 signals (rate-limited/quota-external CI checks, e.g. CodeRabbit 72/7d) require a CI-check collector — deferred (YAGNI), not fabricated. The branch is forward-compatible (synthetic unit-test proof in test_q3_forward_compat). |
| Q4 | no | no | Elimine/Arquive | Eliminate/Archive | quiet items: unflagged sessions/plans past staleness → archive. v0.3.0: the Eliminate loop is now wired — --route session:<id> on a stale quiet session prints bin/reap-sessions.sh --repo-dir . (dry-run preview; --apply only after operator review — WIP + main always preserved), closing the detect-but-never-reap gap. |
Ranks (transparent, in code): urgency_rank 2 = urgent-flag (loss-risk/live claim) · 1 = PR active-convergence window (≤2d) · 0 = none. importance_rank 2 = governance/loss flag · 1 = delivery-surface domain (ticket/process/worktree) · 0 = none.
AAA rigor (triple-A) — the 3 commitments × the 4 lenses
| A | Meaning | How honored |
|---|---|---|
| Accuracy | Every row backed by a verifiable probe | rows come only from work-compass collectors (gh pr list · git worktree list · inventory-sessions.py · …) — no invented pendency. |
| Auditability | Traceable to evidence | row carries source (producer) + flags + age_d; CLI --json emits the full row. |
| Accountability | Clear disposition | row carries quadrant + disposition (Do/Schedule/Delegate/Eliminate); writes stay operator-gated (--route prints, never executes). |
Triple-AAA lens: Governance (this SSOT + gates) × Test (92 stdlib tests incl. classifier determinism) × Production (dogfooded live on maos main; read-only contract) × Compliance (HUMAN_DOMAIN defer; no secrets/PII in output).
Topology + composition (DRY / KISS / YAGNI)
intake eisenhower-matrix --scope/--sort → maps to:
bin/work-compass-aggregate.py --sort=Eisenhower --pendency-scope=<scope> --include=pending [--json]
→ aggregate (COLLECTORS registry, capability-detected, stdlib-only)
→ detect() flags (10 transparent heuristics)
→ in_pendency_scope filter → classify_eisenhower (pure fn) → Q1..Q4 buckets
→ render_pendency_ascii | quadrants json envelope
| Reused (composes) | Net-new (v0.2.0, in code) |
|---|---|
| work-compass aggregation + detect() flags + renderer house-style | classify_eisenhower + urgency_rank/importance_rank + in_pendency_scope + build_pendency_view + render_pendency_ascii + --sort/--pendency-scope/--include flags |
| quiesce loose-end sweep (C1–C3), gap-loop derived-score discipline | Q1→Q4 sorter + disposition labels |
Deferred (from superseded PR #368 — YAGNI until real need): --sort=Prisma (D/T/J leaf scoring — needs a measurement-spec per repo; revisit when Prisma value-trees are routine), --format=json-rpc|human + --lang (the ASCII/--json dual surface already serves both), --scope expansion to project|global|jira:*|worktree (scope-explosion; repo/all + --repo targeting cover the cases).
Pipeline (precise logic — 0→6)
- Intake — parse
--scope/--sort/--include; invalid enum → argparse usage error (deterministic, documented). - Probe — parallel, capability-detected — work-compass COLLECTORS; missing provider →
domain:unavailableone-liner, never block (vault→ honest unavailable diag). - Normalize + detect — items + the 10 detector heuristics (existing).
- Filter —
in_pendency_scope(id-prefix) +--include=pending. - Classify —
classify_eisenhowerper item (pure, deterministic). - Gate — anti-theater: rows only from real probes;
HUMAN_DOMAIN→ printed command, never auto-transition; determinism test-enforced. - Render — ASCII quadrant queue (default) or
--jsonquadrants envelope;next_action= first non-empty quadrant head.
Output contract
ASCII (default, house-style):
🧭 work-compass — Eisenhower pendency queue
scope: repo include: pending rows: 49
Q1 Do (2)
├─ pr:ekson73/multi-agent-os#368 feat(eisenhower-matrix): … · PR-no-ticket [0d]
├─ worktree:…/.worktrees/eisenhower-impl eisenhower-impl · worktree-dirty-wip [?]
Q2 Schedule (45) …
next: Q1 pr:…#368 — disposition per row; writes are operator-gated (…)
--json envelope (rows carry quadrant·urgency·importance·disposition·source·flags·age_d):
{"quadrants":{"Q1":[…],"Q2":[…],"Q3":[…],"Q4":[…]},"next_action":"Q1 pr:…#368","meta":{"pendency_scope":"repo","include":"pending","count":49,"unavailable":[…]}}
Invocation
| Surface | Command |
|---|---|
| Command (human) | /eisenhower-matrix --scope=current --sort=Eisenhower |
| Skill (model) | eisenhower-matrix --scope=current --sort=Eisenhower |
| CLI (executable) | bin/work-compass-aggregate.py --sort=Eisenhower --pendency-scope=current --include=pending [--json] |
Governance + lifecycle
- SSOT: this file is SSOT for Eisenhower classification semantics;
work-compassremains SSOT for aggregation (no duplication). - DRY: composes aggregation; never reimplements
git/gh/acliprobes. - KISS/YAGNI: pure-function classifier over existing fields; zero new collectors.
- Boy-scout / house-keeping: surfaces orphan worktrees and dirty-WIP as
Q1(no-loose-endings);Q4flags archive candidates. - Handoff / continuidade / idempotencia: stateless, deterministic, re-runnable.
- Forge lifecycle:
forge → evaluate → train → operate → deprecate; dogfood ≥2 cycles before community promotion (cycle 1 done live in v0.2.0 PR).
Validation
- Self-test:
python3 bin/tests/test_work_compass.py— 92 stdlib tests; classifier block covers quadrants, determinism, scope filter, pending filter, next_action, flag-collision, backward-compat (default N-Tree path unchanged). - Dogfood (gate authority = the structured ledger, NOT prose):
bin/dogfood-tally eisenhower-matrix→ 2 COMPLETE ratified cycles, ELIGIBLE (≥2-cycle gate per dogfooding-mandate R1). Cycle 1 (001): live run in PR #369 (repo scope, 49 rows, Q1 = open PRs + dirty worktrees). Cycle 2 (002): post-merge run--sort=Eisenhower --pendency-scope=current --include=pending(2428 rows; Q1=0 session-clean; surfaced the sibling WIP branch). Evidence rows in~/.claude/audit/dogfood-cycles.jsonl(seeskills/dogfood-ledger— a prose ledger section here would DUPLICATE that SSOT).
Anima naming note (sovereign)
eisenhower-matrix— 12/12 correctness (exact 4Q semantics, canonical anchor, matches Q1→Q4), token 2, zero collision, familywork-visibility— KEPT at v0.2.0 (rename pressure: none; passing name survives).--pendency-scope(CLI flag, machine register) — collision-free, self-explanatory; rejected--pscope,--where, overloading--scope.
See also
work-compass(aggregation SSOT this composes — v1.3.0 carries the executable)quiesce(session quiescence predicate C1–C3)gap-loop(harness-agnostic convergence loop, derived score)morning-briefing(7-section SitRep, cold-start capable)
Changelog
| Version | Date | Change |
|---|---|---|
| 0.3.2 | 2026-08-18 | PATCH — Q2 signal quality: automated queue-job carve-out. session-orphan no longer counts as importance for a session whose transcript's first record was an automated review-queue worker's queue-operation bookkeeping entry (its vanished branch is expected post-cleanup, not a governance/loss signal) — root-caused live: 1679/2143 real transcripts. Implemented in work-compass v1.3.2 (importance_rank()); this SSOT's Q2 row updated to document the carve-out. No new quadrant/flag/API — pure disposition refinement of an existing important-flag. 103 stdlib tests (composes work-compass's +6). |
| 0.3.1 | 2026-08-18 | PATCH — lifecycle-stage: forge → operate (the last promotion degrau). agentic-tool-evaluator pass: PASS (flags noted) — examples/EVAL-REPORT-2026-08-18.md: 6/6 smoke-set cases RAN for real (canonical ask → envelope · scope mapping · case-insensitive contract · Q4 reap-route dry-run gated · vault honest-degrade · backward-compat N-Tree), scores 5×5 except Efficiency 4 (sequential collector fan-out — trainer-handoff, optional). All promotion inputs now met: dogfood ≥2 ratified cycles (ledger: 3/ELIGIBLE) · behavioral eval PASS · 97 stdlib tests · read-only contract. |
| 0.3.0 | 2026-08-18 | MINOR — red-team honesty + the Eliminate loop closed. (1) Q3 signal-starvation documented: a self red-team proved Q3 is structurally unreachable with today's collectors (every urgency signal lands on an important domain — urgency_rank 2 flags are worktree/process, rank-1 PR-window is domain process; all → important ⇒ Q1/Q2 only). The 4-quadrant matrix is honestly 3-quadrant in production; the v0.1.0-spec Q3 signals (external quota / rate-limited CI checks) need a CI-check collector — deferred (YAGNI), stated, never faked; the branch is wired + forward-compatible (test_q3_forward_compat synthetic proof). (2) Q4 Eliminate loop wired (work-compass v1.3.1 route()): stale quiet session → prints bin/reap-sessions.sh --repo-dir . dry-run preview (reaper built exactly for this gap: "work-compass DETECTS stale/orphan but nothing REAPS"); active sessions still route to resume. Read-only contract intact (prints; --apply is operator-only). 96 stdlib tests (+4: reap routing dry-run/gate/active-resume · Q3 forward-compat). (3) Evaluator-pass enqueued: lifecycle-stage stays forge until agentic-tool-evaluator runs (no overclaim; dogfood gate ≥2 cycles already ELIGIBLE via the structured ledger). |
| 0.2.1 | 2026-08-18 | PATCH — dogfood gate closed via the structured ledger + sibling-branch disposition. Cycles 1+2 marked complete ratified in bin/dogfood-mark (evidence: PR #369 + live cycle-2 run) → dogfood-tally eisenhower-matrix = 2 COMPLETE / ELIGIBLE; dogfood_status → dogfooded-2-cycles (now TRUE, structured-auditable). Rejected the superseded branch's prose "§Dogfood Ledger" section (would duplicate skills/dogfood-ledger SSOT — its own spec calls changelog-prose counting "unmeasurable = theater"); Validation now cites the tally as gate authority. Disposition recorded: origin/feat/eisenhower-matrix-v02 (v0.3.0/v0.4.0 + prose-ledger commits, 12:08–12:18, pre-#369) = superseded by #369+v0.2.1; its defensible deltas now all absorbed (Triple-AAA framing [v0.2.0] · ledger [this], structured) or deferred w/ rationale; branch + /tmp/wt-eisenhower worktree left in place (others' WIP = reported per quiesce C1, never reaped). |
| 0.2.0 | 2026-08-18 | EXECUTABLE. Classifier implemented in bin/work-compass-aggregate.py (v1.3.0): classify_eisenhower + urgency_rank/importance_rank (transparent derived signals) + in_pendency_scope + build_pendency_view + render_pendency_ascii + flags --sort/--pendency-scope/--include (case-insensitive, honoring the Eisenhower capitalized contract). Fixes: frontmatter version drift (was 0.1.0 under a v0.1.1 commit), anima_parent self-reference (→ anima), CLI --scope flag-name collision (CPT §9.5 verbs vs pendency scoping → orthogonal --pendency-scope). 92 stdlib tests (16 new: classifier quadrants/determinism/scope/pending/next_action/collision/backcompat). Dogfood cycle 1 live (real repo: 49 rows, Q1 = open PRs + dirty worktrees). Supersedes doc-only PR #368 (its --sort=Prisma, --format, --lang, 9-value --scope expansion deferred with rationale — YAGNI; its internal 0.4.0-vs-0.2.0 version contradiction and dogfooded-2-cycles claim over non-existent code are exactly the anti-theater class this v0.2.0 closes). |
| 0.1.1 | 2026-08-18 | Harmonized alias: work-compass --sort=Eisenhower as SSOT implementation, this skill = discoverable alias + classifier SSOT (spec-only; superseded by 0.2.0 executable). |
| 0.1.0 | 2026-08-18 | Bootstrap: Eisenhower-ordered pendency queue --scope/--sort triple-A spec (PR #367). |