scene-capability-engine 3.6.3 → 3.6.4

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.
@@ -19,10 +19,42 @@ class SteeringComplianceChecker {
19
19
  'CORE_PRINCIPLES.md',
20
20
  'ENVIRONMENT.md',
21
21
  'CURRENT_CONTEXT.md',
22
- 'RULES_GUIDE.md'
22
+ 'RULES_GUIDE.md',
23
+ 'manifest.yaml'
23
24
  ];
24
25
  }
25
26
 
27
+ /**
28
+ * Get list of allowed subdirectories in steering directory.
29
+ *
30
+ * @returns {string[]} Array of allowed directory names
31
+ */
32
+ getAllowedDirectories() {
33
+ return [
34
+ 'compiled'
35
+ ];
36
+ }
37
+
38
+ /**
39
+ * Runtime temporary files used by steering lock/session coordination.
40
+ *
41
+ * @param {string} entryName
42
+ * @returns {boolean}
43
+ */
44
+ isAllowedRuntimeFile(entryName) {
45
+ const name = `${entryName || ''}`.trim();
46
+ if (!name) {
47
+ return false;
48
+ }
49
+ if (/\.lock$/i.test(name)) {
50
+ return true;
51
+ }
52
+ if (/\.pending\.[^.]+$/i.test(name)) {
53
+ return true;
54
+ }
55
+ return false;
56
+ }
57
+
26
58
  /**
27
59
  * Check if steering directory is compliant
28
60
  *
@@ -37,19 +69,22 @@ class SteeringComplianceChecker {
37
69
 
38
70
  const violations = [];
39
71
  const allowedFiles = this.getAllowedFiles();
72
+ const allowedDirectories = this.getAllowedDirectories();
40
73
 
41
74
  try {
42
75
  const entries = fs.readdirSync(steeringPath, { withFileTypes: true });
43
76
 
44
77
  for (const entry of entries) {
45
78
  if (entry.isDirectory()) {
46
- // Subdirectories are not allowed
47
- violations.push({
48
- type: 'subdirectory',
49
- name: entry.name,
50
- path: path.join(steeringPath, entry.name)
51
- });
52
- } else if (!allowedFiles.includes(entry.name)) {
79
+ if (!allowedDirectories.includes(entry.name)) {
80
+ // Subdirectories are not allowed unless explicitly allowlisted
81
+ violations.push({
82
+ type: 'subdirectory',
83
+ name: entry.name,
84
+ path: path.join(steeringPath, entry.name)
85
+ });
86
+ }
87
+ } else if (!allowedFiles.includes(entry.name) && !this.isAllowedRuntimeFile(entry.name)) {
53
88
  // File not in allowlist
54
89
  violations.push({
55
90
  type: 'disallowed_file',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scene-capability-engine",
3
- "version": "3.6.3",
3
+ "version": "3.6.4",
4
4
  "description": "SCE (Scene Capability Engine) - A CLI tool and npm package for spec-driven development with AI coding assistants.",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -71,6 +71,7 @@
71
71
  "gate:release-ops-weekly": "node scripts/release-weekly-ops-gate.js",
72
72
  "gate:errorbook-release": "node scripts/errorbook-release-gate.js --fail-on-block",
73
73
  "gate:errorbook-registry-health": "node scripts/errorbook-registry-health-gate.js",
74
+ "gate:state-migration-reconciliation": "node scripts/state-migration-reconciliation-gate.js --json",
74
75
  "gate:git-managed": "node scripts/git-managed-gate.js --fail-on-violation",
75
76
  "gate:release-asset-integrity": "node scripts/release-asset-integrity-check.js",
76
77
  "report:release-risk-remediation": "node scripts/release-risk-remediation-bundle.js --json",