Skip to main content

TracePulse PLM Skill Kernel — Wave 2 Conv A. Decorator-based Skill SDK + V1 in-process dispatcher + Kernel HTTP server stub matching CR.10 §7.bis (POST /v1/skills/{id}/invoke). Ships 3 starter skills (cleansing.normalise, cleansing.dedupe, bpmn.generate). Sibling of plm-engine-core; the two communicate over the V1.1 HTTP loopback (SKILL_KERNEL_LOOPBACK=on) — no Python-level coupling at the dispatch boundary.

Project description

plm-skill-kernel

Wave 2 Conv A (FTR-604). The Skill Kernel package — sibling of plm-engine-core — that hosts the decorator-based Skill SDK, the V1 in-process dispatcher, and the Kernel HTTP server stub matching CR.10 §7.bis verbatim.

Layout

02_App/plm-skill-kernel/
├── pyproject.toml             # editable install + import-linter contracts
├── plm_skill_kernel/
│   ├── __init__.py            # re-exports `skill`, `SkillContext`, etc.
│   ├── __main__.py            # `python -m plm_skill_kernel` → server
│   ├── server.py              # FastAPI app at POST /v1/skills/{id}/invoke
│   ├── dispatcher.py          # V1 in-process invoker
│   ├── registry.py            # boot wiring — discovers + registers skills
│   ├── sdk/
│   │   ├── decorator.py       # `@skill(id=, version=)`
│   │   ├── context.py         # SkillContext Pydantic
│   │   ├── types.py           # SkillInvokeRequest / SkillInvokeResult
│   │   └── _registry.py       # in-process decorator registry
│   └── skills/                # 3 starter skills (Q-W2A-1 nested layout)
│       ├── cleansing/
│       │   ├── normalise.py   # cleansing.normalise / 1.0.0 / L2
│       │   └── dedupe.py      # cleansing.dedupe / 1.0.0 / L2
│       └── bpmn/
│           └── generate.py    # bpmn.generate / 1.0.0 / L1 (thin proxy)
└── tests/                     # unit + ASGI in-process integration

Editable install

cd 02_App/backend
.\venv\Scripts\Activate.ps1                  # Windows
pip install -e ../plm-skill-kernel

Mirrors the plm-engine-core editable-install pattern.

Dev launch (Q-W2A-3)

python -m plm_skill_kernel               # uvicorn on port 8100
plm-skill-kernel --port 8100             # equivalent CLI

The backend at port 8000 is unaffected. The V1.1 loopback round-trip (D-CONV-M-4 closure) sends HTTP from the Engine Core dispatcher to this Kernel server when SKILL_KERNEL_LOOPBACK=on.

V1 wire contract

POST /v1/skills/{id}/invoke — frozen at CR.10 §7.bis.

Headers:
  X-Core-Caller: <UUID>            (required when caller is Core)
  Idempotency-Key: <uuid>          (optional, V1)
  traceparent: <W3C>               (optional)

Request body (SkillInvokeRequest):
  payload:        Dict[str, Any]
  version:        str  ("1.0.0", etc.)
  autonomy_hint:  Optional[str]    ("L1" / "L2" / "L3")

Response body (SkillInvokeResult):
  ok:             bool
  result:         Optional[Dict[str, Any]]
  error:          Optional[SkillErrorEnvelope]
  deferred_to:    Optional[str]
  cancelled:      Optional[bool]

Skill authoring (Decision #59 — decorator)

from plm_skill_kernel import skill, SkillContext

@skill(id="cleansing.normalise", version="1.0.0")
async def normalise(payload: dict, ctx: SkillContext) -> dict:
    return {"normalised": _normalise_records(payload["records"])}

The decorator auto-registers into the in-process registry at module import time + carries version through to the federated manifest builder (CR.9).

Import-linter contracts

Two Forbidden contracts live in pyproject.toml:

  1. plm_skill_kernel MUST NOT import plm_engine_core — federation contract preservation. The two communicate over HTTP, not Python.
  2. plm_skill_kernel MUST NOT import plm_accelerators (Workbench) — mirror of the plm-engine-core constraint.

Run:

lint-imports --config 02_App/plm-skill-kernel/pyproject.toml

Tests

cd 02_App/plm-skill-kernel
python -m pytest -q

The V1.1 HTTP round-trip integration test mounts the FastAPI app via httpx.AsyncClient(ASGITransport) — no subprocess, no real port (Q-W2A-4).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

plm_skill_kernel-1.0.0.tar.gz (54.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

plm_skill_kernel-1.0.0-py3-none-any.whl (61.1 kB view details)

Uploaded Python 3

File details

Details for the file plm_skill_kernel-1.0.0.tar.gz.

File metadata

  • Download URL: plm_skill_kernel-1.0.0.tar.gz
  • Upload date:
  • Size: 54.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for plm_skill_kernel-1.0.0.tar.gz
Algorithm Hash digest
SHA256 404ce85c3ff3b118870d3f505c589d641b71104150b25a38ce36980cc3906216
MD5 fb9334119c95aa77111315944ba0b7af
BLAKE2b-256 edda97fd3280cd3693fd868b14844b258689d7cadf8ea4e55455875c8ac596b0

See more details on using hashes here.

File details

Details for the file plm_skill_kernel-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for plm_skill_kernel-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2a990d8052e9abe581e935b3a185eb35a21ff7af3bcb478b9280d4616df2b87b
MD5 0f1cd20abb402f759a6f8ec0639b6681
BLAKE2b-256 60fd257d4e544c6eaf3e2262bc2baa6addbc845b182ff9ce1d7595d6c928c010

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page