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_getat exact version 2 before changing files. - Matched resource, project and instance through
server_identity; runtime reported3142bcccaf2ac768eb4041ecbed1e04076a9f881. - 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.mdwas denied:Operation not permitted. - Execution tools expose no
continuity_contextor task-status mutation; K0's opening Bridge exception covers this. - The three requested task prefixes are not UUIDs:
task_getrejected each withuuid_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-f5f0c5063133for bdfa9cef v2 and its committed evidence at76dedc473e79ad85344ddb07e245e66fb44b8e5d. - Read RESULT memory
35025870-3d78-4bbe-b044-56c1716902c9for a73430a7 v2 and its committed evidence at37f4561115582b51c3e4263794b5c3a2283fedb9. - 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_getfor RESULT35025870-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_getfor RESULT5cdde945-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 |
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.