8000 Mission layer M9.4 ethics and M9.7 principles by adeelahmad · Pull Request #72 · adeelahmad/aloop · GitHub
[go: up one dir, main page]

Skip to content

Mission layer M9.4 ethics and M9.7 principles - #72

Merged
adeelahmad merged 7 commits into
masterfrom
claude/m9-ethics-principles-goals-a6hfmm
Oct 20, 2026
Merged

adeelahmad merged 7 commits into
masterfrom
claude/m9-ethics-principles-goals-a6hfmm

Conversation

@adeelahmad
@adeelahmad adeelahmad commented Oct 20, 2026 •
Copy link
Copy Markdown
Owner

Requested by Adeel · project thread

Before: the mission layer (ROADMAP §4.12) had its core only. Ethics and the standing principles from the "Missionary Aladdin Genie" spec existed as rows marked open.

After: aloop mission ethics gates the mission and every goal in the spec's three tiers, and aloop mission principles renders the standing principles for either mode, hashed so a goal can carry exactly the block it was derived under.

Ethics (M9.4). new --subject mission|<goal_id> writes a review skeleton bound to the subject's ref, id and sha256, with the topics a fixed screen matched. record FILE checks and seals it (emits ethics.reviewed, plus ethics.blocked on a hard line). check exits 0 on clear, 3 on gray until the human consents, and 2 on a hard line or a missing, edited or invalid review; --json names a state (none, broken, pending, hard, ok) the loop acts on. consent --by NAME --reason TEXT binds one consent per gray review to the content's sha256 and that review's own sha256, stored in the goal, so it never carries over. A hard line is never unlocked: consent is refused, a later softer review, an edit, a deleted review file or the same words under a new goal id don't help, the goal is retired (blocked), and the gaps its hard findings name stay held for any later goal. events emit refuses human approvals and ethics verdicts.

Principles (M9.7). plugin/mission/principles.md holds ten principles (the IBM autonomic loop first, as the engine) with an autonomous and a spoon-fed variant each, plus the four tension pairs mapped onto principle ids. show --mode, hash --mode, check, and stamp() / verify() / stale() for goals (an older block is provenance, not a defect).

How: two discovered area modules (plugin/mission/{ethics,principles}.py), schemas/ethics.json, two tests under the Makefile's mission-*.test.py glob, and GATE_OWNED in plugin/bin/events. An adversarial review (5 lenses, each finding re-verified by a second agent) found 20+ issues; every verified one is fixed with a test that failed first. Two open items it raised are recorded in ROADMAP: M9.18 (screen precision on defensive wording) and M9.19 (core: draft status, UTF-8 load).

Evidence: mission-ethics.test.py (11 checks), mission-principles.test.py (7 checks). make pycheck test-hosts, check-tracking.py and claude plugin validate ./plugin --strict pass locally after merging master (#77).

🤖 Generated with Claude Code

https://claude.ai/code/session_012rsDo9GYzNx8tXucywZHnA

M9.4: `aloop mission ethics new / record / check / consent / screen`. A review of
the mission or a goal is bound to the subject's sha256; a fixed screen names the
topics it must address (a screened hard-line topic is gray at least); gray needs
the human's consent for exactly that content and review, stored in the goal and
never carried over; a hard line blocks for good, and a later or edited review
never lowers the tier of the same content.

M9.7: plugin/mission/principles.md holds the standing principles in two variants
(autonomous, spoon-fed), the IBM loop as the engine, and four tension pairs;
`mission principles show / hash / check`, plus stamp()/verify() for goals.

Tests: mission-ethics.test.py (9 checks), mission-principles.test.py (7 checks).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012rsDo9GYzNx8tXucywZHnA
@adeelahmad adeelahmad self-assigned this Oct 20, 2026
Ethics: a hard finding is sticky across edits, new ids and the same text
under another ref; a re-record never lowers a review's tier; a consent
binds to each gray review and its sha; only a human consent with by and
reason counts; the recorded review must match its event (sha, tier);
subjects resolve without symlinks and with matching harness ids; the
screen normalizes text (NFKC, invisible chars, whitespace) and reads
nested keys. `events emit` refuses the gate-owned ethics and approval
events.

Principles: control or invisible characters and wrapped lines inside a
section are refused; the stamp carries and verifies the principle ids;
an unreadable draft and an empty --file/--mode are reported, not raised.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012rsDo9GYzNx8tXucywZHnA
A hard line now also follows a goal's statement and each gap's summary,
so a goal derived again from the same gap (new id, refs, sizes or eval)
stays blocked, and the hard-lined goal is retired (status blocked). The
screen reads the mechanics a planner would write ("hide the unsubscribe
link", "hack into", "secretly"), modifiers ("fake 5-star reviews"),
possessives and typographic apostrophes. `check --json` names a state
(none, broken, pending, hard, ok) so the loop can tell "review it" from
"restore the review" from "ask the human".

Principles: verify(stamp, stale_ok=True) and stale() let a goal keep the
stamp it was derived under; re-stamping would void its ethics review.

ROADMAP: M9.18 (screen precision) and M9.19 (core draft status, UTF-8
load) recorded as open items from the review.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012rsDo9GYzNx8tXucywZHnA
A hard line's words digest no longer depends on JSON key order;
created_at is screened unless it is a timestamp; the goal stores one
consent per gray review (with its reason) instead of the last one.
Tests now cover a real edit of a hard-lined goal, a re-id'd goal's
message, and four principles parse rules (second variant, engine first,
duplicate tension, bad heading).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012rsDo9GYzNx8tXucywZHnA
…he standing set

Verified review findings: a benign gap bundled with a hard-lined one was
blocked for good. A hard finding in a goal of several gaps now names the
gaps it is about, and only their summaries are held. The screen also
catches hyphenated compounds ("cancel-subscription button hard to
find"). A stale principles stamp must still carry the standing set,
engine first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012rsDo9GYzNx8tXucywZHnA
…les branch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012rsDo9GYzNx8tXucywZHnA
@adeelahmad
adeelahmad marked this pull request as ready for review October 20, 2026 03:06
events emit now refuses telemetry.consent like every approval, so the
telemetry test's forged consent is refused and then appended directly;
it is still ignored as non-human.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012rsDo9GYzNx8tXucywZHnA
@adeelahmad
adeelahmad merged commit 03e1d8b into master Oct 20, 2026
5 checks passed
adeelahmad pushed a commit that referenced this pull request Oct 20, 2026
…ates to its areas

- An area's check runs once per artifact with its id or subject (roles.json `area_checks`):
  `mission ethics check` needs `--subject`, so every Ethics Reviewer stop failed with exit 64.
  An ethics hard line (exit 2, state hard) is the reviewer's finding, a note, not a defect.
- A status change an event of the run explains is not another role's write: a human's step, or
  the role's own command (M9.8's tick hands `baseline apply` to the State Assessor, which freezes
  the researcher's journeys; a hard line blocks the planner's goal). Anything else still blocks.
- No dispatched agent hand-emits a mission-layer event (mission.*, artifact.*, the areas').
- ROADMAP: my gap rows move to M9.26 and M9.27 (master took M9.18/M9.19, #75 takes M9.20–25).

Test: mission-roles.test.py (32 checks; the new one runs the real ethics, baseline apply and
journeys retire), mission-scope-bash.test.py (202 rows); make ci and conformance 78/78 pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0197nSutKR1QAAqgJhFZ8fPj
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

0