project-tiny-context-harness 0.8.16 → 0.8.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +31 -16
  2. package/assets/README.md +31 -16
  3. package/assets/README.zh-CN.md +29 -14
  4. package/assets/context_templates/screen-contract.md +16 -0
  5. package/assets/skills/context_development_engineer/SKILL.md +16 -30
  6. package/assets/skills/context_development_engineer/references/engineering-design-reasoning.md +93 -0
  7. package/assets/skills/context_surface_contract/SKILL.md +13 -2
  8. package/assets/skills/context_uiux_design/SKILL.md +7 -3
  9. package/assets/skills/context_uiux_design/references/task-uiux-analysis.md +82 -0
  10. package/assets/skills/design-resource-authoring/SKILL.md +14 -8
  11. package/assets/skills/design-resource-authoring/references/downstream-handoff.md +18 -6
  12. package/assets/skills/design-resource-authoring/references/formal-selected-web-app-handoff.md +26 -8
  13. package/assets/skills/design-resource-authoring/references/implementation-feasibility.md +111 -0
  14. package/assets/skills/design-resource-authoring/references/open-design-provider.md +45 -7
  15. package/assets/skills/design-resource-authoring/references/recovery-and-writeback.md +7 -1
  16. package/assets/skills/design-resource-authoring/references/resource-selection.md +115 -3
  17. package/dist/commands/design-resource.js +9 -2
  18. package/dist/index.d.ts +1 -1
  19. package/dist/lib/design-resource-handoff-bundle.js +5 -0
  20. package/dist/lib/design-resource-handoff-input-types.d.ts +1 -1
  21. package/dist/lib/design-resource-handoff-manifest-projection.js +1 -0
  22. package/dist/lib/design-resource-handoff-set-integrity.js +1 -0
  23. package/dist/lib/design-resource-handoff-shape.js +6 -2
  24. package/dist/lib/design-resource-handoff-types.d.ts +5 -0
  25. package/dist/lib/design-resource-handoff-validation.js +12 -0
  26. package/dist/lib/design-resource-implementation-feasibility-model.d.ts +35 -0
  27. package/dist/lib/design-resource-implementation-feasibility-model.js +62 -0
  28. package/dist/lib/design-resource-implementation-feasibility-shape-sections.d.ts +43 -0
  29. package/dist/lib/design-resource-implementation-feasibility-shape-sections.js +142 -0
  30. package/dist/lib/design-resource-implementation-feasibility-shape.d.ts +4 -0
  31. package/dist/lib/design-resource-implementation-feasibility-shape.js +154 -0
  32. package/dist/lib/design-resource-implementation-feasibility-source-decision-projection.d.ts +24 -0
  33. package/dist/lib/design-resource-implementation-feasibility-source-decision-projection.js +106 -0
  34. package/dist/lib/design-resource-implementation-feasibility-source-decision.d.ts +21 -0
  35. package/dist/lib/design-resource-implementation-feasibility-source-decision.js +75 -0
  36. package/dist/lib/design-resource-implementation-feasibility-types.d.ts +135 -0
  37. package/dist/lib/design-resource-implementation-feasibility-types.js +37 -0
  38. package/dist/lib/design-resource-implementation-feasibility-validation-cells.d.ts +5 -0
  39. package/dist/lib/design-resource-implementation-feasibility-validation-cells.js +125 -0
  40. package/dist/lib/design-resource-implementation-feasibility-validation-document.d.ts +4 -0
  41. package/dist/lib/design-resource-implementation-feasibility-validation-document.js +167 -0
  42. package/dist/lib/design-resource-implementation-feasibility-validation-facts.d.ts +3 -0
  43. package/dist/lib/design-resource-implementation-feasibility-validation-facts.js +76 -0
  44. package/dist/lib/design-resource-implementation-feasibility-validation-realizations.d.ts +8 -0
  45. package/dist/lib/design-resource-implementation-feasibility-validation-realizations.js +76 -0
  46. package/dist/lib/design-resource-implementation-feasibility-validation-support.d.ts +10 -0
  47. package/dist/lib/design-resource-implementation-feasibility-validation-support.js +75 -0
  48. package/dist/lib/design-resource-implementation-feasibility-validation.d.ts +3 -0
  49. package/dist/lib/design-resource-implementation-feasibility-validation.js +138 -0
  50. package/dist/lib/design-resource-symbolic-fact-shape.js +3 -1
  51. package/dist/lib/design-resource-symbolic-fact-types.d.ts +5 -0
  52. package/dist/lib/design-resource-symbolic-fact-validation.js +13 -0
  53. package/dist/lib/long-task-activation-validation.js +77 -7
  54. package/dist/lib/long-task-check-runner.js +3 -296
  55. package/dist/lib/long-task-command-process.d.ts +9 -0
  56. package/dist/lib/long-task-command-process.js +175 -0
  57. package/dist/lib/long-task-delivery-validation.d.ts +5 -2
  58. package/dist/lib/long-task-delivery-validation.js +4 -4
  59. package/dist/lib/long-task-design-feasibility-binding-owners.d.ts +6 -0
  60. package/dist/lib/long-task-design-feasibility-binding-owners.js +52 -0
  61. package/dist/lib/long-task-design-feasibility-binding.d.ts +13 -0
  62. package/dist/lib/long-task-design-feasibility-binding.js +114 -0
  63. package/dist/lib/long-task-design-feasibility-source-closure.d.ts +11 -0
  64. package/dist/lib/long-task-design-feasibility-source-closure.js +78 -0
  65. package/dist/lib/long-task-design-resource-handoff.d.ts +3 -3
  66. package/dist/lib/long-task-design-resource-handoff.js +39 -3
  67. package/dist/lib/long-task-design-resource-method-binding.js +8 -2
  68. package/dist/lib/long-task-freshness.js +1 -1
  69. package/dist/lib/long-task-process-table.d.ts +12 -0
  70. package/dist/lib/long-task-process-table.js +119 -0
  71. package/dist/lib/long-task-process-tree.d.ts +9 -0
  72. package/dist/lib/long-task-process-tree.js +138 -0
  73. package/dist/lib/long-task-protected-files.d.ts +1 -1
  74. package/dist/lib/long-task-protected-files.js +1 -1
  75. package/dist/lib/long-task-ui-surface-policy.d.ts +2 -1
  76. package/dist/lib/long-task-ui-surface-policy.js +7 -4
  77. package/dist/lib/long-task-ui-surface-validation.d.ts +3 -1
  78. package/dist/lib/long-task-ui-surface-validation.js +2 -2
  79. package/dist/lib/repository-path-safety.d.ts +2 -0
  80. package/dist/lib/repository-path-safety.js +36 -0
  81. package/dist/public-types.d.ts +1 -0
  82. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { validateUiDesignBinding } from "./long-task-ui-design-policy.js";
2
2
  import { bindingCarriers, controlClaims, expectedControlProofSurface, issue, unique, validateCarrierInputs, validateRootJourney, validateTargetLocalClaimProof, } from "./long-task-ui-surface-validation.js";
3
- export function validateUiSurfaceBindings(contract, claims, report) {
3
+ export function validateUiSurfaceBindings(contract, claims, report, options = {}) {
4
4
  const targets = new Map(contract.task.execution_targets.map((target) => [target.key, target]));
5
5
  const requiredTargets = new Set(contract.task.target_profile.required_target_refs);
6
6
  const confirmations = new Map(contract.global.acceptance.external_confirmations.map((item) => [
@@ -8,9 +8,9 @@ export function validateUiSurfaceBindings(contract, claims, report) {
8
8
  item,
9
9
  ]));
10
10
  for (const outcome of contract.outcomes)
11
- validateOutcomeBindings(outcome, claims, targets, requiredTargets, confirmations, report);
11
+ validateOutcomeBindings(outcome, claims, targets, requiredTargets, confirmations, report, options);
12
12
  }
13
- function validateOutcomeBindings(outcome, claims, targets, requiredTargets, confirmations, report) {
13
+ function validateOutcomeBindings(outcome, claims, targets, requiredTargets, confirmations, report, options = {}) {
14
14
  const surfaceBindings = outcome.product.surface_bindings ?? [];
15
15
  if (outcome.product.controls.length && !surfaceBindings.length)
16
16
  issue(report, "ui_surface_binding_required", outcome.key);
@@ -39,7 +39,10 @@ function validateOutcomeBindings(outcome, claims, targets, requiredTargets, conf
39
39
  if (!requiredTargets.has(binding.target_ref))
40
40
  issue(report, "ui_surface_binding_required_target_required", `${label}:${binding.target_ref}`);
41
41
  validateBoundControls(binding, controls, boundControls, boundControlTargets, label, report);
42
- const carriers = bindingCarriers(binding.route_binding_ref, binding.component_binding_refs, technicalBindings, label, report);
42
+ const carriers = bindingCarriers(binding.route_binding_ref, binding.component_binding_refs, technicalBindings, label, report, {
43
+ allowEmptyComponentRefs: options.allowDeferredDesignComponentBindingClosure === true &&
44
+ binding.design_targets.length > 0,
45
+ });
43
46
  const rootCheck = checks.get(binding.root_journey_check_ref);
44
47
  if (!rootCheck)
45
48
  issue(report, "ui_surface_binding_root_check_unknown", `${label}:${binding.root_journey_check_ref}`);
@@ -1,7 +1,9 @@
1
1
  import type { CompiledClaimsV2 } from "./long-task-claims.js";
2
2
  import type { DeliveryCheckV2, DeliveryOutcomeV2, ProductClaimV2, ProofSurface } from "./long-task-delivery-types.js";
3
3
  export type Reporter = (message: string) => void;
4
- export declare function bindingCarriers(routeRef: string, componentRefs: string[], bindings: Map<string, DeliveryOutcomeV2["technical"]["bindings"][number]>, label: string, report?: Reporter): string[];
4
+ export declare function bindingCarriers(routeRef: string, componentRefs: string[], bindings: Map<string, DeliveryOutcomeV2["technical"]["bindings"][number]>, label: string, report?: Reporter, options?: {
5
+ allowEmptyComponentRefs?: boolean;
6
+ }): string[];
5
7
  export declare function validateRootJourney(binding: DeliveryOutcomeV2["product"]["surface_bindings"][number], check: DeliveryCheckV2, label: string, report?: Reporter): void;
6
8
  export declare function validateTargetLocalClaimProof(outcome: DeliveryOutcomeV2, claim: ProductClaimV2, targetRef: string, expectedSurface: ProofSurface | null, claims: CompiledClaimsV2, checks: Map<string, DeliveryCheckV2>, label: string, report?: Reporter): void;
7
9
  export declare function expectedControlProofSurface(runtimeFamily: string | undefined): ProofSurface;
@@ -1,6 +1,6 @@
1
1
  import { proveRepositoryPatternSubset } from "./long-task-paths.js";
2
- export function bindingCarriers(routeRef, componentRefs, bindings, label, report) {
3
- if (!componentRefs.length)
2
+ export function bindingCarriers(routeRef, componentRefs, bindings, label, report, options = {}) {
3
+ if (!componentRefs.length && !options.allowEmptyComponentRefs)
4
4
  issue(report, "ui_surface_binding_component_ref_required", label);
5
5
  unique(componentRefs, "ui_surface_binding_component_ref_duplicate", label, report);
6
6
  const carriers = [];
@@ -6,6 +6,8 @@ export interface SafeRepositoryPath {
6
6
  }
7
7
  export declare function resolveInsideRepository(rootInput: string, relativeInput: string, label: string): string;
8
8
  export declare function assertProtectedRepositoryFile(repositoryInput: string, fileInput: string, label: string): Promise<string>;
9
+ export declare function assertProtectedRepositoryDirectory(repositoryInput: string, directoryInput: string, label: string): Promise<string>;
10
+ export declare function assertProtectedRepositoryPath(repositoryInput: string, pathInput: string, label: string): Promise<string>;
9
11
  export declare function assertSafeRepositoryFilePath(repositoryInput: string, relativeInput: string, label: string, options?: {
10
12
  destinationMayBeAbsent?: boolean;
11
13
  }): Promise<SafeRepositoryPath & {
@@ -28,6 +28,42 @@ export async function assertProtectedRepositoryFile(repositoryInput, fileInput,
28
28
  assertInside(repository, resolved, label, fileInput);
29
29
  return resolved;
30
30
  }
31
+ export async function assertProtectedRepositoryDirectory(repositoryInput, directoryInput, label) {
32
+ const repositoryPath = path.resolve(repositoryInput);
33
+ const repository = await realpath(repositoryPath);
34
+ const candidate = path.resolve(directoryInput);
35
+ assertInside(repositoryPath, candidate, label, directoryInput);
36
+ await assertExistingParents(repositoryPath, repository, candidate, label);
37
+ const info = await lstatOrNull(candidate);
38
+ if (!info)
39
+ throw new Error(`protected_input_not_found:${label}:${display(directoryInput)}`);
40
+ if (info.isSymbolicLink())
41
+ throw new Error(`protected_input_symlink_not_allowed:${label}:${display(directoryInput)}`);
42
+ if (!info.isDirectory())
43
+ throw new Error(`protected_input_not_directory:${label}:${display(directoryInput)}`);
44
+ const resolved = await realpath(candidate);
45
+ assertInside(repository, resolved, label, directoryInput);
46
+ return resolved;
47
+ }
48
+ export async function assertProtectedRepositoryPath(repositoryInput, pathInput, label) {
49
+ const repositoryPath = path.resolve(repositoryInput);
50
+ const repository = await realpath(repositoryPath);
51
+ const candidate = path.resolve(pathInput);
52
+ assertInside(repositoryPath, candidate, label, pathInput);
53
+ await assertExistingParents(repositoryPath, repository, candidate, label);
54
+ const info = await lstatOrNull(candidate);
55
+ if (!info)
56
+ throw new Error(`protected_input_not_found:${label}:${display(pathInput)}`);
57
+ if (info.isSymbolicLink())
58
+ throw new Error(`protected_input_symlink_not_allowed:${label}:${display(pathInput)}`);
59
+ if (!info.isFile() && !info.isDirectory())
60
+ throw new Error(`protected_input_not_file_or_directory:${label}:${display(pathInput)}`);
61
+ if (info.isFile() && typeof info.nlink === "number" && info.nlink > 1)
62
+ throw new Error(`protected_input_hardlink_not_allowed:${label}:${display(pathInput)}`);
63
+ const resolved = await realpath(candidate);
64
+ assertInside(repository, resolved, label, pathInput);
65
+ return resolved;
66
+ }
31
67
  export async function assertSafeRepositoryFilePath(repositoryInput, relativeInput, label, options = {}) {
32
68
  const repositoryPath = path.resolve(repositoryInput);
33
69
  const repository = await realpath(repositoryPath);
@@ -3,6 +3,7 @@ export type { CheckExecutionResultV2, CompiledDeliveryContractV2, DeliveryAssert
3
3
  export type { BoundaryCheckDecisionV2, BoundaryCheckInputV2, } from "./lib/long-task-boundary-check.js";
4
4
  export type { DesignResourceHandoffBundleOptions, DesignResourceHandoffBundleResult, } from "./lib/design-resource-handoff-bundle.js";
5
5
  export type { DesignResourceHandoffPreflightV1, DesignResourceHandoffV1, } from "./lib/design-resource-handoff-types.js";
6
+ export type { DesignResourceImplementationFeasibilityIdentityV1, DesignResourceImplementationFeasibilityV1, DesignResourceTechnicalFeasibilityInputV1, } from "./lib/design-resource-implementation-feasibility-types.js";
6
7
  export type { DesignResourceHandoffPreflightV2, DesignResourceHandoffV2, DesignResourceObservableRuleManifestV2, DesignResourceSymbolicFactRuleV2, DesignResourceSymbolicNoninterferenceCertificateV2, DesignResourceSymbolicNoninterferenceArtifactV2, DesignResourceSymbolicNoninterferenceDerivedResultV2, DesignResourceSymbolicNoninterferenceFailureWitnessV1, DesignResourceSymbolicNoninterferenceInputBindingV2, DesignResourceSymbolicNoninterferenceProofV2, DesignResourceSymbolicProofObligationV2, } from "./lib/design-resource-symbolic-fact-types.js";
7
8
  export type { DesignResourceSymbolicSourceIrCertificateScopeV1, DesignResourceSymbolicSourceIrRegionV1, DesignResourceSymbolicSourceIrV1, } from "./lib/design-resource-symbolic-source-ir-types.js";
8
9
  export type { CompiledSymbolicDenotationV1, SymbolicDenotationAxisDomain, SymbolicDenotationComplexityLimits, SymbolicDenotationPredicate, SymbolicExtensionalPointV1, SymbolicPointDenotationV1, } from "./lib/symbolic-denotation-types.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "project-tiny-context-harness",
3
- "version": "0.8.16",
3
+ "version": "0.8.17",
4
4
  "description": "Minimal project memory and validation harness for AI coding agents.",
5
5
  "license": "MIT",
6
6
  "author": "Seven128",