Skip to content

Skills v1 history

Historical observations and execution evidence are kept here, separate from the active procedures. Commands and quoted output in the original delivery sections describe the layout at that time, not current validation instructions.

Original index context

Read the pinned skill files supplied with the frozen execution contract. These are repository instructions; registration/pinning is a separate Orgchart task. Do not interpret this index as evidence that the live catalog has been updated.

Use the frozen task for scope, named methods and output schema. In particular, Bridge executions use task_result, not interactive claim/status mutations. Universal skills cite source labels on each numbered step and on commands/tables. Read reference definitions at the end of each file to resolve those labels. An instruction label maps to a source section, not a claim of live deployment.

Initial delivery evidence: task 35bef904 v2

This index also holds the committed evidence for the six-file documentation task. Repository: h8v6/heyaira; assigned branch: heyaira/35bef904. Source and starting HEAD: 2dc993a8b3ee4bbdee375e480971f874085bdf7d. Execution: 491efeec-3762-4fc3-9e4a-d69578f0e4f8; date: 2026-10-10. The containing commit identifies the candidate; its full SHA is saved in RESULT.

Source reads and limitations

  • Read assigned task through task_get at exact version 2 before changing files.
  • Matched resource, project and instance through server_identity; runtime reported 3142bcccaf2ac768eb4041ecbed1e04076a9f881.
  • Read this repository's AGENTS.md, README.md, ARCHITECTURE.md, all four docs/agents/*.md, K0 work contract/roles and task-version execution.
  • Bridge's separate AGENTS.md read at /Users/jablonskib/HeyAira-agents/heyaira-bridge/AGENTS.md was denied: Operation not permitted.
  • Execution tools expose no continuity_context or task-status mutation; K0's opening Bridge exception covers this.
  • The three requested task prefixes are not UUIDs: task_get rejected each with uuid_parsing.
  • Resolved full IDs for a73430a7 and bdfa9cef from already committed Git evidence, then tried their v2 task reads; both returned execution_task_version_mismatch.
  • No prefix listing tool is available; no 23ae3ab7 RESULT matched project-memory search. Its receipt was not inspected.
  • Read RESULT memory 08a80c24-e66a-439e-afbd-f5f0c5063133 for bdfa9cef v2 and its committed evidence at 76dedc473e79ad85344ddb07e245e66fb44b8e5d.
  • Read RESULT memory 35025870-3d78-4bbe-b044-56c1716902c9 for a73430a7 v2 and its committed evidence at 37f4561115582b51c3e4263794b5c3a2283fedb9.
  • Read supplemental knowledge RESULT 5cdde945-2835-4d39-adb4-aa60d1ad00f5; used procedure observations, not copied memory contents.
  • Use K0/AGENTS/execution sources and explicitly cited available RESULTs for rules; do not invent observations from inaccessible receipts or Bridge files.

Reproduction and checks

This adds documentation; no runtime defect, behavioral regression test or production change is claimed. On the base, git ls-tree -r --name-only <source> docs/agents/skills returned no files (exit 0). Run the six-file check with the standard-library command below; no dependency install is needed.

python3 -c '
from pathlib import Path
import re
root = Path("docs/agents/skills")
names = ["deliver-bridge-task", "verify-bridge-task", "report-blocker",
         "security-review-checklist", "how-it-works-standard"]
assert {p.name for p in root.iterdir()} == {n + ".md" for n in names} | {"README.md"}
originals = [Path("AGENTS.md").read_text(), Path("docs/specs/org-v1/K0-roles.md").read_text()]
paragraphs = [p.strip() for text in originals for p in text.split("\n\n") if len(p.strip()) >= 100]
for name in names:
    text = (root / (name + ".md")).read_text()
    count = len(text.splitlines())
    assert 60 <= count <= 120, (name, count)
    assert "```" in text and "## Sources" in text, name
    assert not any(p in text for p in paragraphs), name
    if name in names[:3]:
        steps = [s for s in text.splitlines() if re.match(r"^\d+\. ", s)]
        assert steps and all(re.search(r"\[[A-Z]-[a-z]+\]", s) for s in steps), name
    print(f"{name}.md: {count} lines; format, sources, copied-paragraph check PASS")
print("six-file check PASS")
'
git diff --check
git diff 2dc993a8b3ee4bbdee375e480971f874085bdf7d --stat

The paragraph check detects exact source paragraphs; manual reading also checks imperative steps, concrete commands and traceability, rather than treating the scan as a full review.

Actual output and source spot-checks

The standard-library check above exited 0 with this output:

deliver-bridge-task.md: 94 lines; format, sources, copied-paragraph check PASS
verify-bridge-task.md: 92 lines; format, sources, copied-paragraph check PASS
report-blocker.md: 95 lines; format, sources, copied-paragraph check PASS
security-review-checklist.md: 88 lines; format, sources, copied-paragraph check PASS
how-it-works-standard.md: 93 lines; format, sources, copied-paragraph check PASS
six-file check PASS

Manual checks paired five concrete rules with their source text:

Skill rule Source checked at the base Observation
Deliver step 7: no interactive status mutation docs/specs/org-v1/K0-work-contract.md:7 Opening exception assigns Bridge workers task reads/RESULT only
Deliver step 12: append above carried candidate docs/concepts/task-version-execution.md:478 Resume instructions forbid amend, rebase and reset
Verify step 7: isolated clone without hardlinks docs/concepts/task-version-execution.md:172 Disposable no-hardlinks clone protects the worker candidate
Verify severity table: P1/P2 block, P3 follow-up AGENTS.md:80 Reachable wrong behavior blocks; lower-impact follow-up remains separate
Blocker three-part format docs/specs/org-v1/K0-work-contract.md:65 Contract requires obstruction, next actor and needed action

Read all five files manually: each supplies ordered imperative steps plus shell commands or exact evidence tables/formats; none copies a role/AGENTS paragraph. All numbered universal steps carry source labels; their definitions point to the named contract, AGENTS, execution document or the available bdfa9cef RESULT. The security and knowledge instructions also cite role boundaries and observed receipts.

Initial heredoc checks failed before Python started: can't create temp file for here document: operation not permitted (exit 1). The delivered python3 -c command avoids that operation and passed. Apple's Python shim emitted denied xcrun_db cache diagnostics before the successful run; no packages were installed. The source-label/local-link check exited 0: source-label/local-link check PASS; resolved_labels=43; files=6. It resolved every universal source label and checked all local source/index destinations exist. It then ran the exact README shell snippet and reproduced the six-file output above.

git diff --check and git diff --cached --check exited 0 without output. git diff 2dc993a8b3ee4bbdee375e480971f874085bdf7d --stat showed only the six files listed in the index; git diff --cached --name-only confirmed those same paths. No existing file was modified. Git emitted denied user-ignore-file warnings; staging with -c core.excludesFile=/dev/null succeeded without widening permissions. The final RESULT receipt records commit/parent and clean-worktree read-back. At the initial receipt, independent verification, acceptance, catalog registration and publication were pending.

CI correction evidence: task 35bef904 v2

Execution: 508ad00b-9d6f-4817-93a9-ccbcb28f1f93; date: 2026-10-10. Starting candidate: 8a806f522f42e42e05f71686f68f6660c48b68fa, accepted and published by Bridge before the dispatcher reported the failing Documentation run. Read the same frozen task version 2 again; preserve all original criterion IDs.

Reproduction and repair

The direct CI log read (gh run view 38059309569 --repo h8v6/heyaira --log-failed) exited 1 because sandbox access to the GitHub CLI configuration was denied. The diagnosis below comes from the local reproduction, not a retrieved CI log.

Using the already installed documentation toolchain, run the CI build method:

python3 -m mkdocs build --strict --site-dir .skill-ci-check/site-docs

On the unchanged starting candidate it exited 1 with:

WARNING - Doc file 'agents/skills/deliver-bridge-task.md' contains a link '../../../AGENTS.md#start-of-every-work-session', but the target '../AGENTS.md' is not found among documentation files.
Aborted with 33 warnings in strict mode!

The same missing-document warning occurred across all five skills. Replace root AGENTS and excluded docs/specs/org-v1/ links with GitHub file URLs pinned to the original source SHA 2dc993a8b3ee4bbdee375e480971f874085bdf7d. Preserve source sections, procedure text and line counts. Keep links to published documentation relative. Do not weaken strict mode or change MkDocs configuration outside task scope.

Actual correction checks

  • python3 scripts/check_docs_contract.py: exit 0; documentation contract passed: 46 MCP tools covered.
  • python3 scripts/export_mcp_contract.py --check: exit 0; MCP contract is up to date.
  • Strict MkDocs build after the link repair: exit 0; Documentation built in 2.35 seconds; zero strict-mode warnings.
  • test -s .skill-ci-check/site-docs/index.html && test -s .skill-ci-check/site-docs/404.html: exit 0.
  • Six-file length/format/copied-paragraph check: exit 0; skill counts remain 94, 92, 95, 88 and 93; six-file check PASS.
  • Source/rendered-link check: exit 0; 43 source labels resolved, 30 pinned targets exist in the source commit, all 30 appear in rendered HTML.
  • Compared each skill against the starting candidate after substituting source URLs: procedure_text_unchanged=5.
  • No remote GitHub availability claim is made; final scope and commit read-back are recorded in the correction RESULT receipt.

Only the five skills' source links and this README evidence change. Remove the generated .skill-ci-check/ output before committing. Add a new commit above the starting candidate; do not amend, rebase or reset published history. Bridge owns renewed independent verification and publication; this worker does not push.

deliver-bridge-task

Archived execution reference from the original procedure; this is historical evidence, not a current task assignment.

verify-bridge-task

Archived execution reference from the original procedure; this is historical evidence, not a current task assignment.

report-blocker

Archived execution reference from the original procedure; this is historical evidence, not a current task assignment.

security-review-checklist

Archived execution reference from the original procedure; this is historical evidence, not a current task assignment.

  • Consult memory_get for RESULT 35025870-3d78-4bbe-b044-56c1716902c9 (task a73430a7 v2, 2026-10-10).
  • Treat that receipt's unknown custody/dates and proposed intervals as limitations, not deployed facts.

how-it-works-standard

Archived execution reference from the original procedure; this is historical evidence, not a current task assignment.

  • Consult memory_get for RESULT 5cdde945-2835-4d39-adb4-aa60d1ad00f5 (decision documentation, 2026-10-10).
  • Use its paired drift evidence and explicit live/device limitations as a worked reporting pattern.

SKILL.md migration evidence: task 8b0e6482 v3

Date: 2026-10-11; execution: 29edad45-b53c-47f0-8ad9-6b01404b0e9f. Repository: h8v6/heyaira; branch: heyaira/8b0e6482. Source and starting HEAD: 5f2eb52f25e0f4f4002d6267cc691cb0057de946 (clean worktree). Working directory: /Users/jablonskib/HeyAira-agents/.heyaira-worktrees/heyaira/8b0e6482-worker. The containing commit is the candidate; RESULT and its receipt record the full result SHA.

Cause, scope and confidence

The original layout mixed the procedure index with execution history and lacked machine-readable skill metadata. Five procedures were moved with git mv; no sixth procedure was added. Metadata and the index describe existing use, not a deployed registry or loader. Only this report, AGENTS.md and the skill files change. This is documentation-only; runtime tests and deployment are outside this task. No subagents were used; independent verification is pending.

All numbered steps, shell examples, decision tables and output contracts are preserved. Relative destinations follow the extra directory level. Concrete RESULT references are archived under each skill above; the universal R-db labels link there. The security/knowledge source notes retain their general limitations without binding current executions to specific historical receipts. Confidence is high for this document migration based on the checks below.

Frozen acceptance checklist

criterion_id Frozen method Worker outcome
layout git diff --name-status <base>..HEAD -M shows renames (R) for the five procedure files; ls docs/agents/skills lists only README.md and directories. pass
frontmatter Parse each SKILL.md frontmatter with python yaml/regex and check all seven keys, name==dirname and len(description)<=200. pass
no-history Diff old vs new body per skill: removed lines appear in docs/reports/skills-v1-history.md; spot-check three procedure steps are preserved verbatim or equivalently. pass
index-and-links Read README.md; git grep -n -E 'docs/agents/skills/[a-z-]+\\.md' returns nothing except README links to /SKILL.md. pass
scope git diff --stat <base>..HEAD. pass

Reproducible migration check

Save the following checker to a disposable file in the worktree and run it with the existing Python environment containing PyYAML. The worktree check compares against the source SHA; after committing, the same source-to-HEAD diff covers the candidate. It tolerates only the explicitly listed relocation/history edits and compares the remainder of every procedure, not only three sampled steps.

Command executed: /Users/jablonskib/.local/share/mise/installs/python/3.12.7/bin/python3.12 .skill-migration-check/validate.py. Exit: 0; actual output:

warning: unable to access '/Users/jablonskib/.config/git/ignore': Operation not permitted
layout: PASS; README.md and five skill directories only
frontmatter: deliver-bridge-task PASS; seven keys; description=99 chars
no-history: deliver-bridge-task PASS; normalized procedure unchanged; 1 historical lines archived
frontmatter: verify-bridge-task PASS; seven keys; description=78 chars
no-history: verify-bridge-task PASS; normalized procedure unchanged; 1 historical lines archived
frontmatter: report-blocker PASS; seven keys; description=72 chars
no-history: report-blocker PASS; normalized procedure unchanged; 1 historical lines archived
frontmatter: security-review-checklist PASS; seven keys; description=77 chars
no-history: security-review-checklist PASS; normalized procedure unchanged; 2 historical lines archived
frontmatter: how-it-works-standard PASS; seven keys; description=93 chars
no-history: how-it-works-standard PASS; normalized procedure unchanged; 2 historical lines archived
no-history: original README execution history preserved verbatim
spot-check: deliver-bridge-task step 7 preserved verbatim: 7. Do not call `task_update`, claim, release, dispatch or approve with an execution token. [W-bridge]
spot-check: verify-bridge-task step 7 preserved verbatim: 7. Use Bridge's disposable verification clone; avoid hardlinks to the worker repository. [E-isolate]
spot-check: report-blocker step 11 preserved verbatim: 11. Route scope, sequencing and reassignment questions to the coordinator. [W-owner]
index-and-links: PASS; five metadata-matched index rows; 29 local links; stale-path grep exit 1, no matches
scope: PASS; only authorized documentation paths changed
all five criteria: PASS

Checker used:

from pathlib import Path
import re
import subprocess
import yaml

BASE = "5f2eb52f25e0f4f4002d6267cc691cb0057de946"
GIT = "/Applications/Xcode.app/Contents/Developer/usr/bin/git"
ROOT = Path("docs/agents/skills")
NAMES = ("deliver-bridge-task", "verify-bridge-task", "report-blocker",
         "security-review-checklist", "how-it-works-standard")
HISTORY = Path("docs/reports/skills-v1-history.md").read_text()


def old(path):
    return subprocess.check_output([GIT, "show", f"{BASE}:{path}"], text=True)


def normalize_body(text):
    # Only relocation and replacement of concrete historical references are allowed.
    text = text.replace("../../../concepts/", "../../concepts/")
    text = text.replace("../../session-handoff.md", "../session-handoff.md")
    for name in NAMES:
        text = text.replace(f"[{name}](../{name}/SKILL.md)", f"`{name}.md`")
    text = text.replace("Treat that receipt's unknown custody/dates", "Treat unknown custody/dates")
    text = text.replace("Use its paired drift evidence", "Use paired drift evidence")
    return "\n".join(line for line in text.splitlines()
                     if not line.startswith("[R-db]:")
                     and not line.startswith("- Consult `memory_get`"))


assert {p.name for p in ROOT.iterdir()} == set(NAMES) | {"README.md"}
assert all((ROOT / name).is_dir() for name in NAMES)
print("layout: PASS; README.md and five skill directories only")
readme = (ROOT / "README.md").read_text()
assert readme.startswith("| id | description | scope | owner |\n")
rows = [line for line in readme.splitlines()[2:] if line.startswith("| ")]
assert len(rows) == 5
assert len(readme.split("\n\n")[1].strip().splitlines()) == 3
assert "PR" in readme and "security role" in readme and "YAML frontmatter" in readme
local_links = 0
for name in NAMES:
    path = ROOT / name / "SKILL.md"
    text = path.read_text()
    match = re.match(r"\A---\n(.*?)\n---\n(.*)\Z", text, re.S)
    assert match, name
    front, body = yaml.safe_load(match[1]), match[2]
    assert set(front) == {"name", "description", "trigger", "output", "owner", "scope", "status"}
    assert all(isinstance(v, str) and v.strip() for v in front.values())
    assert front["name"] == name and re.fullmatch(r"[a-z]+(?:-[a-z]+)*", name)
    assert len(front["description"]) <= 200 and front["description"].count(".") == 1
    assert front["description"].endswith(".") and "Use when " in front["description"]
    assert front["owner"] in {"knowledge", "security", "coordinator"}
    assert re.fullmatch(r"common|mode:(bridge-worker|bridge-verifier|local-coordinator)|(?:area|project):[a-z-]+", front["scope"])
    assert front["status"] == "active"
    expected_row = f'| [{name}]({name}/SKILL.md) | {front["description"]} | {front["scope"]} | {front["owner"]} |'
    assert expected_row in rows
    print(f'frontmatter: {name} PASS; seven keys; description={len(front["description"])} chars')
    previous = old(f"docs/agents/skills/{name}.md")
    assert normalize_body(body) == normalize_body(previous), name
    archived = [line for line in previous.splitlines()
                if line.startswith("[R-db]:") or line.startswith("- Consult `memory_get`")
                or line.startswith("- Treat that receipt") or line.startswith("- Use its paired")]
    assert all(line in HISTORY for line in archived), name
    assert f"## {name}\n" in HISTORY
    assert not re.search(r"\b\d{4}-\d{2}-\d{2}\b|\b[0-9a-f]{8}-[0-9a-f-]{27,}\b|task [0-9a-f]{8}", body)
    print(f"no-history: {name} PASS; normalized procedure unchanged; {len(archived)} historical lines archived")
    # Check local reference definitions and inline Markdown destinations.
    refs = dict(re.findall(r"^\[([^\]]+)\]:\s*(\S+)", body, re.M))
    used = set(re.findall(r"\[([A-Z]-[a-z]+)\]", body))
    assert used <= set(refs), (name, used - set(refs))
    destinations = list(refs.values()) + re.findall(r"\]\(([^)]+)\)", body)
    for link in destinations:
        if "://" in link:
            continue
        destination, _, anchor = link.partition("#")
        target = path.parent / destination
        assert target.is_file(), (name, link)
        if target.name == "skills-v1-history.md":
            assert f"## {anchor}\n" in target.read_text(), link
        local_links += 1

old_readme = old("docs/agents/skills/README.md")
assert old_readme[old_readme.index("## Initial delivery evidence"):] in HISTORY
print("no-history: original README execution history preserved verbatim")
for name, step in (("deliver-bridge-task", 7), ("verify-bridge-task", 7), ("report-blocker", 11)):
    line = next(line for line in old(f"docs/agents/skills/{name}.md").splitlines() if line.startswith(f"{step}. "))
    assert line in (ROOT / name / "SKILL.md").read_text()
    print(f"spot-check: {name} step {step} preserved verbatim: {line}")
stale = subprocess.run([GIT, "grep", "-n", "-E", r"docs/agents/skills/[a-z-]+\.md"], capture_output=True, text=True)
assert stale.returncode == 1 and not stale.stdout, stale.stdout + stale.stderr
print(f"index-and-links: PASS; five metadata-matched index rows; {local_links} local links; stale-path grep exit 1, no matches")
paths = subprocess.check_output([GIT, "diff", BASE, "--name-only"], text=True).splitlines()
assert all(p == "AGENTS.md" or p == "docs/reports/skills-v1-history.md"
           or p.startswith("docs/agents/skills/") for p in paths), paths
assert not any(p.startswith(("src/", "tests/")) for p in paths)
print("scope: PASS; only authorized documentation paths changed")
print("all five criteria: PASS")

Documentation CI checks

These commands use existing dependencies; none were installed. All run in the working directory above against the prepared candidate files. Generated output is disposable and excluded from the commit.

Command: PYTHONDONTWRITEBYTECODE=1 /Users/jablonskib/.local/share/mise/installs/python/3.12.7/bin/python3.12 scripts/check_docs_contract.py. Exit: 0; actual stdout:

documentation contract passed: 46 MCP tools covered

Command: PYTHONDONTWRITEBYTECODE=1 /Users/jablonskib/.local/share/mise/installs/python/3.12.7/bin/python3.12 scripts/export_mcp_contract.py --check. Exit: 0; actual stdout:

MCP contract is up to date

Command: TMPDIR="$PWD/.skill-migration-check" PYTHONDONTWRITEBYTECODE=1 /Users/jablonskib/.local/share/mise/installs/python/3.12.7/bin/python3.12 -m mkdocs build --strict --site-dir .skill-migration-check/site-docs. Exit: 0; actual build-output excerpt (informational navigation list and theme notice omitted):

INFO    -  Cleaning site directory
INFO    -  Building documentation to directory: /Users/jablonskib/HeyAira-agents/.heyaira-worktrees/heyaira/8b0e6482-worker/.skill-migration-check/site-docs
INFO    -  Documentation built in 2.52 seconds

The strict build reported no MkDocs warning or error; the theme printed its standard notice about a future MkDocs major version. Existing informational navigation/excluded-document messages remain. Publication and live catalog registration have not been performed.

Git and environment checks

git diff --check and git diff --cached --check: exit 0, no whitespace errors. git grep -n -E 'docs/agents/skills/[a-z-]+\\.md': exit 1, no matches (expected). ls docs/agents/skills: exit 0; README.md plus deliver-bridge-task, how-it-works-standard, report-blocker, security-review-checklist and verify-bridge-task. git diff --name-status 5f2eb52f25e0f4f4002d6267cc691cb0057de946 -M: exit 0; actual status/destination projection (obsolete source names omitted):

M   AGENTS.md
M   docs/agents/skills/README.md
R084    docs/agents/skills/deliver-bridge-task/SKILL.md
R086    docs/agents/skills/how-it-works-standard/SKILL.md
R088    docs/agents/skills/report-blocker/SKILL.md
R085    docs/agents/skills/security-review-checklist/SKILL.md
R087    docs/agents/skills/verify-bridge-task/SKILL.md
A   docs/reports/skills-v1-history.md

The source-to-candidate stat covers those eight logical file changes; nothing under src/ or tests/ changes. Final source-to-HEAD diff, parent, clean worktree and result SHA are read back after the single local commit and saved in RESULT.

The first system Git shim emitted denied xcrun cache diagnostics; subsequent checks used the prepared Xcode Git binary directly. Git also emitted a denied optional user-ignore-file warning; operations succeeded without broader access. The execution MCP has no continuity_context or task_update; the assigned v3 was read with task_get, identity matched, and RESULT uses task_result as required.