**Goal:** On top of the deterministic `workflow.py orient` headline (088-01), a Tier-1 `/jig:orient` skill surveys the project's judgment-bearing artifacts and renders one fixed, readable "where do things stand, what should I pick up?" briefing — entirely read-only (it writes nothing): it renders the briefing to stdout, which a scheduled job or dashboard can capture.
Scanned 9/4/2026
Install to Claude Code
npx -y skills add ramboz/jig --skill 088-project-orientation --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of 088 Project Orientation?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/ramboz-088-project-orientation)More formats (shields.io, HTML) on the badges page.
---
status: DONE
dependencies: []
last_verified: 2026-08-11
arch_review: true
code_health_review: false
---
## Slice 088-02 — the `/jig:orient` judgment skill
**Goal:** On top of the deterministic `workflow.py orient` headline (088-01), a
Tier-1 `/jig:orient` skill surveys the project's judgment-bearing artifacts and
renders one fixed, readable "where do things stand, what should I pick up?"
briefing — entirely read-only (it writes nothing): it renders the briefing to stdout,
which a scheduled job or dashboard can capture.
**Context:** Adopted from a contributed standalone skill (originally `compass`,
`Kyarha/compass`) into jig per review of
[#90](https://github.com/ramboz/jig/pull/90). This slice owns the work and records
the decisions accepted in that review. It layers on — and shares terminology with —
the `workflow.py orient` command shipped by slice 088-01.
**DoR:**
- ✅ The deterministic headline is available via
`workflow.py orient --project-dir .` (088-01, DONE).
- ✅ The Tier-1 registration surface is known (`_TIER_SKILLS`, install/scaffold
contracts, tier tests, routing eval, product prose, host packages).
**Acceptance Criteria:**
1. **Public name `orient`.** The skill ships at `skills/orient/SKILL.md` as
`/jig:orient`, reusing the orientation vocabulary established by 088-01; no
`compass` metaphor remains anywhere in the plugin or its host packages.
2. **Layered, not re-derived.** The skill starts from the `workflow.py orient`
`jig hint:` line for the deterministic headline and layers judgment (Proposed
ADRs, DEFERRED triggers, refinement-todo, release plans, inbox, standalone bugs)
on top, rather than re-implementing a second lifecycle-focus algorithm.
3. **Trigger boundary.** Positive triggers are scoped to explicit project-level
orientation intent (`/jig:orient`, "orient me to this project", "where do things
stand"); a bare conversational "what's next?" inside an active implementation flow
is a negative case (it continues the current slice). `evals/cases/orient.json`
encodes both, and the full routing gate stays green.
4. **Zero-write; entirely read-only.** The skill never transitions lifecycle state,
edits a spec, accepts an ADR, or writes any file (no `docs/` write, no `.jig/`
cache, no history log). It renders the briefing to stdout, which a scheduled job
or dashboard can capture. A machine-readable export / optional persistence
contract is deferred to the dashboard-integration work in
[#91](https://github.com/ramboz/jig/issues/91), not established in this MVP.
5. **Correct handoffs.** The skill routes "implement a ready slice" through
`jig:spec-workflow` (which coordinates the `implementer` subagent), not a
non-invocable `jig:implementer`. Optional handoffs to sibling plugins
(servo / shaper / studio) are retained as best-effort.
6. **Registered as Tier 1.** `orient` is present in every pinned skill-set surface
(`scaffold._TIER_SKILLS`, `scaffold_contract._TIER_SKILLS`,
`install_contract.EXPECTED_SKILLS`, `TierSkillSetTests`, `TierUpgradeTests`),
product-prose counts (13 Tier 1 / 20 total), and both regenerated host packages;
the host drift check passes.
7. **Suite green.** Full `run_tests.py` passes with no regressions; the routing
report exits 0 (60/60 positives within top_k, 0 collision hazards).
**Decisions recorded (from #90 review):**
- **Name:** `orient` (not `compass`) — reuse the 088 / `workflow.py orient`
terminology instead of adding a new metaphor to jig's vocabulary.
- **Helper composition:** layer on `workflow.py orient`; do not duplicate the
lifecycle-focus algorithm.
- **Zero-write MVP:** `/jig:orient` writes nothing; it renders to stdout for a
scheduled job or dashboard to capture. Persistence / a machine-readable status
export is deferred to the dashboard-integration design in
[#91](https://github.com/ramboz/jig/issues/91), not established in this MVP
(maintainer call, #90 review).
- **Sibling-plugin handoffs:** optional / best-effort to servo / shaper / studio.
**DoD:**
- [x] Skill authored; registration surface + host packages updated; full suite green.
- [x] Routing eval authored (positive + route-away cases); routing gate green.
- [x] Architecture review passed (`arch_review: true`) — recorded verdict `pass`, `reviews/slice-02-arch.md` (the #90 review was informal; this is the gated evidence artifact).
- [x] Reconciliation sweep + deviation log produced after review (below).
- [x] `docs/refinement-todo.md` updated if any decisions were deferred (none — no decisions deferred).
**Anti-horizontal-phasing check:** After this slice lands, a user can invoke
`/jig:orient` and immediately receive a grounded, readable project briefing seeded by
the deterministic headline — a complete command-to-guidance behavior, not a partial
layer.
### Deviation log (after reconciliation)
Original ACs preserved above. The slice's deliverable shipped and evolved across
three PRs (#90 adoption, #122 spec 101-01 collaboration survey, #190 bug 031
freshness) but was never formally driven through the review→reconcile→DONE
lifecycle; this close-out produces the missing gated evidence rather than
re-implementing anything.
- **Retrospective close-out (no behaviour change).** All seven ACs were verified
met against the current on-disk deliverable by three fresh, context-isolated
reviewer passes — compliance / craft / arch — all `pass` (`reviews/slice-02-{compliance,craft,arch}.md`).
The arch pass was required because the slice declares `arch_review: true`; the
original DoD noted it as "under review on #90" (informal), and the recorded
`reviews/slice-02-arch.md` verdict is the gated evidence that box now points at.
- **Test coverage widened (compliance finding, applied).** The compliance pass
flagged that AC4 (zero-write) and AC5 (correct handoff) were pinned by no test —
a future edit deleting the "Orient writes nothing" section or the
`jig:spec-workflow` handoff would fail nothing. Added `Orient088CoreContractTests`
(two body-scoped, non-vacuous assertions) to `test_orient_skill_surface.py` and
corrected that file's module docstring, which mislabelled its entire provenance as
slice 101-01 / bug 031 (all three reviewers flagged the mislabel). Surface suite
now 16 tests, green.
- **Craft nit applied.** `SKILL.md` Section 3 example used `__…__` double-underscore
bold inconsistent with the `**…**` idiom the prime directive mandates; changed to
underscore-italic-outer + asterisk-bold-inner (`_**…**_`) to satisfy the idiom
without marker collision inside the italic blockquote.
- **Craft nit NOT applied (deferred, rationale).** The zero-write invariant is stated
three times (dedicated section + judgment bullet + gotcha). Left as-is: it is the
skill's single most load-bearing contract on an always-surfaced skill, and the two
new tests now pin the dedicated-section statement — deleting the repetition would
weaken the guard the compliance pass asked for. Logged, not silently dropped.
- **Primer hygiene (spec 025 compress-on-close).** Spec 088's last live slice (088-02)
closes here, so the `CLAUDE.md` / `AGENTS.md` active-specs line — which still read
"088-02 — `/jig:orient` skill (adopting contributed `compass`; arch review on #90)"
— was compressed to "none in-flight (088 shipped + closed)". This also removes the
last `compass` reference from the primer surface (AC1's intent, beyond its literal
plugin/host-package scope).
- **Host-package drift correction (honesty note).** The sweep first recorded host
packages as a `no-op` on the reasoning "body-only change, frontmatter unchanged" — and
the reconciliation review shared that mental model and passed it. The pre-commit
`build_host_packages.py --check` then **failed**: host packages embed the entire
`SKILL.md`, so the idiom nit did drift both host copies. Regenerated and re-verified in
sync; the sweep's Host-packages disposition above is corrected to `updated`. No
behaviour change — the two host `SKILL.md` copies now match source byte-for-byte.
### Reconciliation sweep
Drift-prone surfaces checked, with dispositions:
- **Review evidence** — `updated`: recorded compliance/craft/arch verdicts under
`docs/specs/088-project-orientation/reviews/slice-02-*.md` (the REVIEWED gate's
evidence set).
- **`CLAUDE.md` / `AGENTS.md` active-specs primer** — `updated`: compressed the closed
088 entry; dropped the stale `compass`/`#90` framing (compress-on-close).
- **`skills/orient/test_orient_skill_surface.py`** — `updated`: added AC4/AC5 coverage;
fixed provenance docstring.
- **`skills/orient/SKILL.md`** — `updated`: bold-idiom nit only; no behaviour change.
- **`docs/refinement-todo.md`** — `no-op`: no decisions were deferred by this close-out.
- **`docs/inbox.md`** — `no-op`: nothing 088-related parked.
- **Lightweight / ADR decisions** — `no-op`: no new load-bearing decision with rejected
alternatives; no module boundary or public contract changed (arch pass confirmed the
layer-on-`workflow.py orient` boundary is preserved). No ADR warranted.
- **`docs/conventions.md`** — `no-op`: no rule introduced or changed.
- **Host packages** — `updated`: the pre-commit host-drift check
(`build_host_packages.py --check`) **corrected an earlier wrong `no-op` claim here**.
The host packages embed the *full* `SKILL.md`, not just its frontmatter, so even a
body-only idiom nit drifts the two copies (`hosts/claude/skills/orient/SKILL.md`,
`hosts/codex/plugins/jig/skills/orient/SKILL.md`). Regenerated via
`python3 scripts/build_host_packages.py`; `--check` now reports in sync. (See the
deviation-log correction below — this is the local-green ≠ CI-green gap the check exists
to close.)
- **Status board Notes** — `deferred`: no load-bearing per-slice invariant to migrate
(orient is a self-describing judgment skill); the board row flips to DONE on regen.
- **Spotted, out of scope (`deferred`)** — `AGENTS.md` records spec 106 as `Proposed`
while `CLAUDE.md` records it `Accepted`/built; a pre-existing primer drift unrelated
to 088, left for a governance-plane reconciliation to resolve.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!