Skip to content

v1.7.0

Choose a tag to compare

@github-actions github-actions released this 27 Jul 01:31

Changed

  • The persona layer and the sub-agent layer now have a stated contract. Auditing
    skills/persona-router/SKILL.md against the 15 charters in skills/agents/*/SKILL.md
    found five boundaries that were never written down. None was a runtime bug; each let a
    reader draw a wrong conclusion with no gate to catch it.
    • The Capability Packet gains an optional persona field, declared identically in
      all three of its definitions (skills/AGENTS.md, references/agent-orchestration.md,
      references/subagent-design.md). It carries the cataloged persona id only, never
      the persona prompt, as advisory framing that never overrides an agent's charter
      Restrictions, scope, or permissions. Absent is the valid default — no workflow emits
      it yet.
    • All 15 charters gain two adjacent Restrictions lines: a supplied persona shapes
      emphasis only and the charter's Restrictions win on conflict; and the self-routing ban
      now covers persona-router and reading a personas/ prompt file, not just the
      massa-ai router. Together they mean an agent may receive a persona and may never
      select or expand one — the second half closes a path by which an agent handed a
      bare id could have opened a persona prompt claiming implementation ownership.
    • persona-router Stop Conditions are scoped. The clause forbidding subagents and
      subprocess orchestration was written unscoped and could be read as disabling the whole
      16-agent dispatch layer during a persona session. It now bounds the routing step only
      and says workflow-mandated dispatch is unaffected.
    • A new Persona And Sub-Agents section states that a persona grants no tool access,
      no write scope, and no permission, never authorizes inline implementation in place of
      a dispatch, and never widens a builder's disjoint write set — and that a persona route
      is not a specialist consultation, naming the four persona↔agent pairs that overlap
      (senior-mobile-engineermobile-specialist,
      senior-mobile-qa-automation-engineertest-engineer,
      context-skill-harness-engineer-architectarchitecture-specialist,
      product-managerrequirements-analyst).
    • Nine discriminating tests land as defect class 7 in
      scripts/__tests__/skills-harness-integrity.test.ts. Charter cases enumerate
      skills/agents/*/ from disk and are scoped to the ## Restrictions span, so a charter
      added later cannot skip the rules and a line landing in the wrong section still fails.
      Two cases assert absence (the superseded charter sentence, the unscoped
      persona-router clause), because presence alone would pass if the old text were
      re-added alongside the new.
    • Charter bodies feed two generators — generate-skill-artifacts.ts (raw copy into
      apps/*/skills/agents/) and generate-subagent-artifacts.ts, which embeds the body
      verbatim into apps/*/agents/massa-ai-*.{md,toml}. Both mirrors are regenerated and
      both --check gates are clean.
  • Workflows now emit the persona field the Capability Packet defines. The prior entry
    defined the field but deferred populating it; all 24 Dispatch: massa-ai-* blocks across
    the 16 workflow files carry it now, uniformly — no allowlist. The field stays optional
    (absent is valid), carries the cataloged persona id only, never the persona prompt,
    and never overrides the receiving charter's Restrictions.
    • The persona-router boundary's three presence-only assertions for persona-router prose
      (Stop Conditions scoping; grants-no-authority; not-a-specialist-consultation) are now
      section-scoped to the exact heading each rule lives under.
    • All five presence-only assertions are closed, and the detection method changed to
      close them.
      A phrase list (persona may grant, grant authority to the persona)
      killed the two mutations it was written against and nothing else — a persona is permitted to write and personas hold write access both passed it. Enumeration
      cannot win, since the ways to write "persona has power" are unbounded, and each
      pattern added to chase them raises false-failure risk. The scan now inverts the test:
      every sentence mentioning a persona alongside an authority term must carry a negator.
      Real rules already do ("grants no tool access", "never overrides"), so correct
      prose passes while an affirmative grant fails however it is phrased. Coverage extends
      beyond persona-router/SKILL.md to all three packet definitions — the worst place for
      a contradicting sentence, and previously unguarded.
    • A new discriminating test enumerates every Dispatch: block on disk (no hardcoded
      roster) and fails if any one lacks the persona line; the existing packet-definition
      uniqueness test is scoped to definitions only so dispatch-block uses of the same
      canonical clause no longer collide with it.