Historical field note
This record preserves prior investigation or planning evidence. It is not a current operating contract; use the numbered book and current runbooks for instructions.
Investigation: dream finding with a generic skill affected label — placeholder area bucket, not a defect location¶
Parent task: task_89a497ca1b1a46ef96bf13258660b9e0
(repair-prerequisite task_repair_8c81157ac9eb538d6fddf16a). Working tree clean
at investigation time, so ground truth is re-established here.
Scope: the low-confidence dream-cycle finding whose only affected label is a
bare skill (no concrete skill/tool/provider/repo_area), traced end-to-end
through src/mac/dream_scanner.py, src/mac/nap_consolidator.py,
src/mac/dream_cycle_classifier.py, and src/mac/dream_repair_tasks.py.
Investigated by: fleet worker (read-only analysis; no production code, skill,
or tool changed).
Verdict: NOT a concrete defect location — generic placeholder area bucket¶
The generic skill affected label is a placeholder area bucket, not a
concrete defect location. It names the literal word "skill", produced by a
bare \bskill[s]?\b word-match in the classifier's area table — there is no
concrete skill, tool, provider, or repo_area target behind it. The finding's
low confidence is a heuristic artifact of a single self-referential evidence
record (support < 2), not evidence of a reproducible defect. All six required
suites pass on the current tree; nothing in the skill/tool/dream subsystem
misbehaves.
Exact modules / functions that produce kind, scope, confidence, and label¶
Traced and live-reproduced against the bootstrapped .venv.
1. Kind and confidence — src/mac/nap_consolidator.py¶
_dream_kind(records)returnsfailure_patternwhenever the joined record text containsfailure/failed/error. The sole evidence record is a prior repair failed memory, so its text trivially matches and the artifact is bucketedfailure_pattern(scopeproject, because a project is present)._confidence_for_records(records)returns("low", 0.35)forsupport < 2. With exactly one supporting record the artifact is necessarily low confidence. Reproduced:_confidence_for_records([one_record]) == ('low', 0.35).
2. Generic skill area — src/mac/dream_cycle_classifier.py¶
classify_candidate()builds match text via_combined_text()fromsummary,kind,scope,observations,record_type_countskeys, andretrieval.query_terms— it does not readsignatureordimensions.skills.- The area table
_SKILL_PATTERNSopens with(r"\bskill[s]?\b", "skill"). The consolidated summary contains the plain word "skill" (e.g. "...low-confidence skill finding..."), so this bare pattern fires and emits an area witharea_type="skill",area_name="skill"— the canonical bucket name, not a discovered skill name. CONFIDENCE_THRESHOLDSmapslow -> 0.35. With one evidence record and one signal,_confidence_for()returnslow, sooverall_confidence == "low"(0.35). Reproduced:classify_candidate(...)["areas"] == [{area_type:"skill", area_name:"skill", confidence:"low", ...}],overall_confidence == "low".
3. Affected label and gate — src/mac/dream_repair_tasks.py¶
_affected_labels()copies the classifier'sskillarea intoaffected["skills"] == ["skill"]. (It also recovers concrete names from asignatureskill:prefix ordimensions.skills, but this candidate carries neither, so the only label is the literal word "skill".)file_low_confidence_repair_tasks()gates onoverall_confidence == "low"andany(affected.values()). Becauseaffected["skills"] == ["skill"]is non-empty, the gate passes and a follow-up task is minted even though nothing concrete is named._is_inventory_only_candidate()does not suppress this candidate:DREAM_INVENTORY_ONLY_KINDS == {"tool_or_skill_name"}, but this candidate's kind isfailure_pattern, so the inventory-only skip does not apply.repair_fingerprint()hashes normalized{kind, scope, project, signature, summary, affected}; theaffectedmap with the genericskilllabel is part of the dedupe key. The fingerprint is a dedupe key for a dream candidate, not a pointer into any skill module._task_description()prints the affected labels, summary, and evidence, then a generic acceptance criterion ("Confirm whether the finding is actionable from the attached evidence") — which, with only a name-mention signal, resolves to not actionable.
Root signal¶
A single self-referential memory record — a prior "repair failed for a low-confidence skill finding" learning — is the entire evidentiary basis. That one record:
- makes
_dream_kindpickfailure_pattern(its text says "failed"), - makes
_confidence_for_recordsreturnlow(support = 1, < 2), - puts the plain word "skill" into the summary, which the classifier's bare
\bskill[s]?\bpattern turns into a genericskillarea bucket, which_affected_labelssurfaces asaffected["skills"] == ["skill"].
So both the low confidence and the generic skill label are heuristic
artifacts of one self-referential record, not signals of a reproducible skill,
tool, or repo defect. src/mac/skill_auto_repair.py is not involved: it only
engages at overall_confidence == "high" and never sees a low-confidence
finding.
Verification¶
Bootstrapped the task-owned worktree with python3 scripts/bootstrap-project.py
(python3 3.12.13; git/gh present; pytest/coverage installed into .venv).
All sources were read, none modified.
.venv/bin/pytest tests/test_dream_repair_tasks.py tests/test_dream_cycle_classifier.py \
tests/test_nap_consolidator.py tests/test_skill_auto_repair.py \
tests/test_fleet_skills.py tests/test_hermes_skills_dedup.py -q
# => 142 passed, 0 failed
Live reproduction (read-only) confirmed the exact chain:
nap_consolidator._dream_kind([repair-failed record]) == "failure_pattern".nap_consolidator._confidence_for_records([one record]) == ("low", 0.35).dream_cycle_classifier.classify_candidate(...)→overall_confidence == "low"(0.35);areas == [{"area_type": "skill", "area_name": "skill", "signals": ["\\bskill[s]?\\b"], ...}].dream_repair_tasks._affected_labels(...)→{"skills": ["skill"], "tools": [], "providers": [], "repo_areas": []};any(affected.values()) == True.dream_repair_tasks._is_inventory_only_candidate(...) == False(kindfailure_patternis not inDREAM_INVENTORY_ONLY_KINDS).repair_fingerprint(...)produced a stabledreamrepair:key from the normalized candidate + genericskillaffected map.
Determination¶
- Is the
skilllabel a concrete defect location? No. It is a generic placeholder area bucket (the literal word "skill" matched by\bskill[s]?\b), carrying no concrete skill/tool/provider/repo_area. - Is the low confidence a heuristic artifact of a single self-referential record (support < 2)? Yes. One record drives kind, confidence, and label.
- Reproducible defect? None. 142/142 required tests pass; the subsystem behaves as specified.
- Recommended remediation (plan-only; out of scope for this read-only note):
a filing-gate refinement in
file_low_confidence_repair_tasks()/_affected_labels()so a generic single-token bucket (e.g.affectedwhose only label equals the area-type word such as"skill") does not satisfy thelow + affectedgate — mirroring the existingDREAM_INVENTORY_ONLY_KINDSguard. No skill-module orskill_auto_repair.pychange is warranted.