CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/speaker-toolkit

Six-skill presentation system: ingest talks into a rhetoric vault, run interactive clarification, generate a speaker profile, create presentations that match your documented patterns, produce the deck illustrations + thumbnail visual layer, and publish talk pages to a Jekyll shownotes site. Includes a 111-entry Presentation Patterns taxonomy (81 observable: 62 patterns + 19 antipatterns; 30 unobservable: 21 patterns + 9 antipatterns) for scoring, brainstorming, and go-live preparation.

Quality

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Low

Low-risk findings worth noting

Overview
Quality
Evals
Security
Files

goal_generation_provenance.pyskills/vault-clarification/scripts/

#!/usr/bin/env python3
"""Gate improvement-goal verification by immutable baseline generation.

Pattern coaching is meaningful only inside one catalog/scoring generation.  This
module owns the mechanical comparability decision; it deliberately does not
interpret a goal metric or decide whether the speaker improved.

Library contract
----------------
``assess_goal_generation(goal, current_pattern_baseline)`` returns a detached
JSON-ready decision with ``comparable``, ``decision``, and stable
``reason_codes``.  Malformed records raise ``GoalGenerationProvenanceError``.

CLI contract
------------
Stdin::

    {
      "goals": [...],
      "current_pattern_baseline": {...} | null
    }

Stdout::

    {"schema_version": 1, "assessments": [...]}

The complete input is validated before stdout is written.  Exit status is 1 and
the diagnostic goes to stderr on malformed JSON or contract violations.
"""

from __future__ import annotations

import json
import pathlib
import sys
from collections.abc import Mapping
from typing import cast


INGRESS_SCRIPTS = (
    pathlib.Path(__file__).resolve().parents[2] / "vault-ingress" / "scripts"
)
if str(INGRESS_SCRIPTS) not in sys.path:
    sys.path.insert(0, str(INGRESS_SCRIPTS))

from adherence_baseline import (  # noqa: E402
    AdherenceBaselineError,
    validate_adherence_baseline,
)


GOAL_SCHEMA_VERSION = 2
ASSESSMENT_SCHEMA_VERSION = 1

PATTERN_LANE = "pattern_scoring"
PACING_LANE = "pacing"
INDEPENDENT_LANE = "independent"

PATTERN_GOAL_KINDS = frozenset({"antipattern", "underuse"})
KNOWN_GOAL_KINDS = PATTERN_GOAL_KINDS | {"pacing", "other"}

COMPARABLE = "comparable"
NEEDS_REBASELINE = "needs_rebaseline"
UNVERIFIABLE = "unverifiable"

LEGACY_PATTERN_GOAL_SCHEMA = "legacy_pattern_goal_schema"
CURRENT_PATTERN_BASELINE_MISSING = "current_pattern_baseline_missing"
CATALOG_FINGERPRINT_MISMATCH = "pattern_catalog_fingerprint_mismatch"
SCORING_SCHEMA_MISMATCH = "pattern_scoring_schema_version_mismatch"


class GoalGenerationProvenanceError(ValueError):
    """A goal or one of its generation snapshots violates the owner contract."""


def _require_mapping(value: object, label: str) -> Mapping[str, object]:
    if not isinstance(value, Mapping):
        raise GoalGenerationProvenanceError(f"{label} must be an object")
    return cast(Mapping[str, object], value)


def _require_nonempty_string(value: object, label: str) -> str:
    if not isinstance(value, str) or not value or value != value.strip():
        raise GoalGenerationProvenanceError(
            f"{label} must be a non-empty string without edge whitespace"
        )
    return value


def _require_schema_version(value: object) -> int:
    if isinstance(value, bool) or not isinstance(value, int):
        raise GoalGenerationProvenanceError(
            f"goal.schema_version must be an integer, got {value!r}"
        )
    if value not in (1, GOAL_SCHEMA_VERSION):
        raise GoalGenerationProvenanceError(
            "goal.schema_version must be one of [1, 2]; unknown schemas are "
            f"read-only, got {value}"
        )
    return value


def _goal_kind(goal: Mapping[str, object]) -> str:
    kind = _require_nonempty_string(goal.get("kind"), "goal.kind")
    if kind not in KNOWN_GOAL_KINDS:
        raise GoalGenerationProvenanceError(
            f"goal.kind must be one of {sorted(KNOWN_GOAL_KINDS)!r}, got {kind!r}"
        )
    return kind


def _expected_lane(kind: str) -> str:
    if kind in PATTERN_GOAL_KINDS:
        return PATTERN_LANE
    if kind == "pacing":
        return PACING_LANE
    return INDEPENDENT_LANE


def _validate_full_pattern_baseline(value: object, label: str) -> dict[str, object]:
    try:
        baseline = validate_adherence_baseline(value)
    except AdherenceBaselineError as exc:
        raise GoalGenerationProvenanceError(f"{label} is invalid: {exc}") from exc
    if baseline["active_batch_excluded"] is not False:
        raise GoalGenerationProvenanceError(
            f"{label}.active_batch_excluded must be false for a post-batch goal "
            "baseline"
        )
    if baseline["excluded_filenames"] != []:
        raise GoalGenerationProvenanceError(
            f"{label}.excluded_filenames must be [] for a full-cohort goal baseline"
        )
    return baseline


def _decision(
    goal_id: str,
    *,
    comparable: bool,
    decision: str,
    reason_codes: list[str],
) -> dict[str, object]:
    return {
        "goal_id": goal_id,
        "comparable": comparable,
        "decision": decision,
        "reason_codes": list(reason_codes),
    }


def assess_goal_generation(
    goal: object,
    current_pattern_baseline: object,
) -> dict[str, object]:
    """Return the generation-comparability decision for one improvement goal.

    Schema-v1 pattern goals have no fixed generation and are intentionally
    unverifiable.  Their pacing/independent siblings remain usable because a
    catalog release does not define those measurements.  Schema-v2 pattern goals
    embed the exact full-cohort snapshot that existed when the speaker accepted
    the goal; only fingerprint and scoring-schema equality are required for a
    later measurement to be comparable.
    """
    record = _require_mapping(goal, "goal")
    goal_id = _require_nonempty_string(record.get("id"), "goal.id")
    schema_version = _require_schema_version(record.get("schema_version"))
    kind = _goal_kind(record)

    if schema_version == 1:
        if kind in PATTERN_GOAL_KINDS:
            return _decision(
                goal_id,
                comparable=False,
                decision=UNVERIFIABLE,
                reason_codes=[LEGACY_PATTERN_GOAL_SCHEMA],
            )
        return _decision(
            goal_id,
            comparable=True,
            decision=COMPARABLE,
            reason_codes=[],
        )

    provenance = _require_mapping(
        record.get("baseline_provenance"), "goal.baseline_provenance"
    )
    allowed_fields = {"lane", "pattern_baseline"}
    unknown_fields = sorted(set(provenance) - allowed_fields)
    if unknown_fields:
        raise GoalGenerationProvenanceError(
            f"goal.baseline_provenance has unknown fields: {unknown_fields!r}"
        )
    lane = _require_nonempty_string(
        provenance.get("lane"), "goal.baseline_provenance.lane"
    )
    expected_lane = _expected_lane(kind)
    if lane != expected_lane:
        raise GoalGenerationProvenanceError(
            f"goal.baseline_provenance.lane must be {expected_lane!r} for "
            f"kind {kind!r}, got {lane!r}"
        )

    if lane != PATTERN_LANE:
        if "pattern_baseline" in provenance:
            raise GoalGenerationProvenanceError(
                "non-pattern goal provenance must not carry pattern_baseline"
            )
        return _decision(
            goal_id,
            comparable=True,
            decision=COMPARABLE,
            reason_codes=[],
        )

    fixed = _validate_full_pattern_baseline(
        provenance.get("pattern_baseline"),
        "goal.baseline_provenance.pattern_baseline",
    )
    if fixed["scored_talk_count"] == 0:
        raise GoalGenerationProvenanceError(
            "goal.baseline_provenance.pattern_baseline.scored_talk_count must "
            "be greater than zero when a pattern goal is set"
        )

    if current_pattern_baseline is None:
        return _decision(
            goal_id,
            comparable=False,
            decision=UNVERIFIABLE,
            reason_codes=[CURRENT_PATTERN_BASELINE_MISSING],
        )
    current = _validate_full_pattern_baseline(
        current_pattern_baseline, "current_pattern_baseline"
    )

    reason_codes = []
    if fixed["pattern_catalog_fingerprint"] != current["pattern_catalog_fingerprint"]:
        reason_codes.append(CATALOG_FINGERPRINT_MISMATCH)
    if (
        fixed["pattern_scoring_schema_version"]
        != current["pattern_scoring_schema_version"]
    ):
        reason_codes.append(SCORING_SCHEMA_MISMATCH)
    if reason_codes:
        return _decision(
            goal_id,
            comparable=False,
            decision=NEEDS_REBASELINE,
            reason_codes=reason_codes,
        )
    return _decision(
        goal_id,
        comparable=True,
        decision=COMPARABLE,
        reason_codes=[],
    )


def assess_goals(
    goals: object,
    current_pattern_baseline: object,
) -> list[dict[str, object]]:
    """Validate and assess a complete goal list without partial output."""
    if not isinstance(goals, list):
        raise GoalGenerationProvenanceError("goals must be an array")
    assessments = [
        assess_goal_generation(goal, current_pattern_baseline) for goal in goals
    ]
    ids = [assessment["goal_id"] for assessment in assessments]
    if len(ids) != len(set(ids)):
        raise GoalGenerationProvenanceError("goals contains duplicate goal ids")
    return assessments


def main() -> int:
    try:
        payload = json.load(sys.stdin)
        root = _require_mapping(payload, "stdin")
        unknown_fields = sorted(set(root) - {"goals", "current_pattern_baseline"})
        if unknown_fields:
            raise GoalGenerationProvenanceError(
                f"stdin has unknown fields: {unknown_fields!r}"
            )
        assessments = assess_goals(
            root.get("goals"), root.get("current_pattern_baseline")
        )
    except (GoalGenerationProvenanceError, json.JSONDecodeError) as exc:
        print(f"ERROR: {exc}", file=sys.stderr)
        return 1

    print(
        json.dumps(
            {
                "schema_version": ASSESSMENT_SCHEMA_VERSION,
                "assessments": assessments,
            },
            sort_keys=True,
        )
    )
    return 0


if __name__ == "__main__":
    sys.exit(main())

skills

README.md

tile.json