Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ jobs:
run: |
python -m aigc_director_kit validate-local-skill-adapter examples/local_skill_adapter_case.json --json
python -m aigc_director_kit validate-workflow examples/skill_workflow_case.json --library examples/action_library.json --json
python -m aigc_director_kit validate-skill-integration examples/local_skill_adapter_case.json examples/skill_workflow_case.json --library examples/action_library.json --json
python -m aigc_director_kit validate-prompt-pack examples/prompt_pack_case.json --plan examples/one_take_previs_case.json --json
python -m aigc_director_kit validate-qc-report examples/qc_report_unverified_case.json --json
python -m aigc_director_kit build-runtime-handoff examples/skill_workflow_case.json --library examples/action_library.json --adapter optional-runtime-adapter --json
Expand Down
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# CineThread Changelog

## [0.2.4] - 2026-08-12

- Added `validate-skill-integration` to cross-check a metadata adapter against a project workflow.
- Added stage ownership, output-contract, evidence-semantics, required-producer, and action-producer validation.
- Added high-confidence public-safety checks for credential fields and values, email addresses, and absolute local or network paths while keeping manual privacy review mandatory.
- Added regression tests, documentation, CI coverage, and one-command public verification coverage for the integrated handoff.

## [0.2.3] - 2026-08-12

- Added `aigc-director-local-skill-adapter`, a strict metadata-only contract for describing the interface between local Skills and CineThread.
Expand Down
21 changes: 18 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ py -3 -m aigc_director_kit verify-examples --json --output cinethread-verify.jso
python3 -m aigc_director_kit verify-examples --json --output cinethread-verify.json
```

It checks every public plan, workflow, prompt-pack, QC-boundary, action, and
runtime-handoff example, and returns a privacy-safe report with relative paths
only. It does not render or generate media. For a real bug report, review the
It checks every public plan, adapter/workflow integration, prompt-pack,
QC-boundary, action, and runtime-handoff example, and returns a privacy-safe
report with relative paths only. It does not render or generate media. For a real bug report, review the
output first and use the [60-second trial guide](docs/try-it.md) or the
[Verified run feedback](https://github.com/cyou1314/cinethread/issues/new/choose) form.
Windows users who do not know which Python command to use can instead double-click
Expand Down Expand Up @@ -61,6 +61,21 @@ python -m aigc_director_kit validate-local-skill-adapter `
--json
```

Validate that the reusable adapter and one project workflow actually agree:

```powershell
python -m aigc_director_kit validate-skill-integration `
examples/local_skill_adapter_case.json `
examples/skill_workflow_case.json `
--library examples/action_library.json `
--json
```

This cross-check rejects undeclared workflow stages, mismatched Skill labels,
output contracts or evidence semantics, action requests assigned to the wrong
producer, and high-confidence leaks in both files such as credentials, emails, and
absolute local paths. A passing result still requires manual privacy review.

To create one packet for an optional runtime adapter:

```powershell
Expand Down
20 changes: 18 additions & 2 deletions docs/local-skill-adapter.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,22 @@ python -m aigc_director_kit validate-local-skill-adapter `
The example maps local stage labels to existing CineThread contracts without
shipping any Skill instructions. It is also included in `verify-examples`.

To prove that a project workflow uses this adapter consistently, run the
cross-file validator:

```powershell
python -m aigc_director_kit validate-skill-integration `
examples/local_skill_adapter_case.json `
examples/skill_workflow_case.json `
--library examples/action_library.json `
--json
```

The workflow may use a subset of adapter stages. Every used stage must match
on id, Skill label, output contract, and evidence semantics. The validator also
checks that action requests come from an action-request producer and scans both
files for high-confidence credential, email, and local-path leaks.

## Required public fields

| Field | Meaning | Safe to publish |
Expand All @@ -55,8 +71,8 @@ The manifest fixes `visibility` to `public-metadata-only` and
credentials or local paths in string values are rejected as a guard against
accidental publication.

That guard is structural, not a guarantee that prose is harmless. Review every
manifest before publishing.
Those guards are structural and high-confidence, not a guarantee that prose is
harmless or anonymous. Review every manifest and workflow before publishing.

## Keep these out

Expand Down
2 changes: 2 additions & 0 deletions docs/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
compiled action requests without launching Blender.
- [x] A metadata-only local Skill adapter can document public integration
contracts without publishing local implementation details.
- [x] Adapter/workflow cross-validation checks stage ownership, output and
evidence compatibility, action-producer routing, and high-confidence leaks.
- [x] The Windows example launcher accepts `AIGC_DIRECTOR_PYTHON` and checks
common Python install locations.
- [ ] Add an optional Blender adapter that consumes the handoff and records
Expand Down
26 changes: 22 additions & 4 deletions docs/skill-workflow-integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,21 @@ metadata-only field set rejects prompt bodies, paths, assets, and credentials.
The separate [`local-skill-adapter.md`](local-skill-adapter.md) guide explains
what may safely appear in a public manifest.

Cross-check the adapter and project workflow together before publication:

```powershell
python -m aigc_director_kit validate-skill-integration `
examples/local_skill_adapter_case.json `
examples/skill_workflow_case.json `
--library examples/action_library.json `
--json
```

This requires every used workflow stage to match the adapter's id, Skill label,
output contract, and evidence semantics. It verifies required producers and
high-confidence public-safety patterns, but it cannot determine whether all
free-form prose is anonymous. Manual privacy review remains required.

## Run the public handoff

Without an action catalog, the workflow is checked structurally and action
Expand Down Expand Up @@ -130,11 +145,14 @@ python -m aigc_director_kit validate-qc-report `
3. Embed a versioned `aigc-director-shot-plan` in `shot_plan`.
4. Put natural-language action intent in `action_requests[]` with a shot and
stage reference.
5. Run `validate-workflow --library ...` before handing the packet to an
optional runtime adapter.
6. Run `build-runtime-handoff ... --adapter ...` when the next runtime needs a
5. Run `validate-workflow --library ...`, then
`validate-skill-integration <adapter> <workflow> --library ...` before
publication or runtime handoff.
6. Manually review the final adapter and workflow for private prose or asset
identities that automated checks cannot infer.
7. Run `build-runtime-handoff ... --adapter ...` when the next runtime needs a
single dry-run packet.
7. Add a public example and a regression test when the contract changes.
8. Add a public example and a regression test when the contract changes.

Keep private source paths, credentials, cookies, private character assets,
unlicensed motion data, and generated media out of the packet. Mark inferred
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "aigc-director-kit"
version = "0.2.3"
version = "0.2.4"
description = "CineThread: deterministic creative handoffs for AI animation, storyboards, and previs."
readme = "README.md"
requires-python = ">=3.10"
Expand Down
3 changes: 3 additions & 0 deletions src/aigc_director_kit/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from .adapter import validate_local_skill_adapter, validate_local_skill_adapter_file
from .actions import compile_action_request, list_actions, load_action_library
from .contract import ValidationResult, load_plan, validate_plan, validate_plan_file
from .integration import validate_skill_integration, validate_skill_integration_files
from .prompt import validate_prompt_pack, validate_prompt_pack_file
from .qc import validate_qc_report, validate_qc_report_file
from .runtime import build_runtime_handoff, build_runtime_handoff_file
Expand All @@ -21,6 +22,8 @@
"run_public_example_verification",
"validate_local_skill_adapter",
"validate_local_skill_adapter_file",
"validate_skill_integration",
"validate_skill_integration_files",
"validate_plan",
"validate_plan_file",
"validate_prompt_pack",
Expand Down
2 changes: 1 addition & 1 deletion src/aigc_director_kit/_version.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
"""Single source of truth for the public package version."""

__version__ = "0.2.3"
__version__ = "0.2.4"
30 changes: 30 additions & 0 deletions src/aigc_director_kit/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from .adapter import validate_local_skill_adapter_file
from .actions import compile_action_request, list_actions, load_action_library
from .contract import validate_plan_file
from .integration import validate_skill_integration_files
from .prompt import validate_prompt_pack_file
from .qc import validate_qc_report_file
from .runtime import build_runtime_handoff_file
Expand Down Expand Up @@ -47,6 +48,15 @@ def _build_parser() -> argparse.ArgumentParser:
adapter.add_argument("path", type=Path)
adapter.add_argument("--json", action="store_true", dest="as_json")

integration = subparsers.add_parser(
"validate-skill-integration",
help="Cross-check a public local-Skill adapter and project workflow.",
)
integration.add_argument("adapter", type=Path)
integration.add_argument("workflow", type=Path)
integration.add_argument("--library", type=Path)
integration.add_argument("--json", action="store_true", dest="as_json")

prompt = subparsers.add_parser(
"validate-prompt-pack",
help="Validate a reusable prompt pack, optionally against a shot plan.",
Expand Down Expand Up @@ -158,6 +168,26 @@ def main(argv: list[str] | None = None) -> int:
print(f"warning: {warning}")
return 0 if result.valid else 2

if args.command == "validate-skill-integration":
result = validate_skill_integration_files(
args.adapter,
args.workflow,
args.library,
)
if args.as_json:
_dump(result.as_dict())
else:
print(f"valid: {'yes' if result.valid else 'no'}")
print(f"matched_stages: {result.summary.get('matched_stage_count', 0)}")
print(f"compiled_actions: {result.summary.get('compiled_action_count', 0)}")
print(f"public_safety_issues: {result.summary.get('public_safety_issue_count', 0)}")
print("manual_privacy_review_required: yes")
for error in result.errors:
print(f"error: {error}")
for warning in result.warnings:
print(f"warning: {warning}")
return 0 if result.valid else 2

if args.command == "validate-prompt-pack":
result = validate_prompt_pack_file(args.path, args.plan)
if args.as_json:
Expand Down
Loading