mirai-graph 1.0.0-rc.8 → 1.0.0

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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,47 @@ All notable changes to Mirai Graph will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.0.0] - 2026-08-17
8
+
9
+ ### Changed
10
+
11
+ - Project Technology is now the stable public execution mechanism for ordinary
12
+ projects, skills, platforms and multi-repository systems.
13
+ - The package, CLI and programmatic API leave release-candidate status without
14
+ changing the public `graph.json` schema or the accepted safety boundaries.
15
+
16
+ ### Evidence Boundary
17
+
18
+ - Stable means the documented contracts and release checks are supported for
19
+ production adoption. It does not claim that every project outcome is correct
20
+ without project-specific goals, evidence and review.
21
+
22
+ ## [1.0.0-rc.11] - 2026-08-17
23
+
24
+ ### Fixed
25
+
26
+ - The bounded architecture contract now preserves the exact human architecture
27
+ owner together with component, capability and operational ownership data.
28
+ - Federation adapters can consume the public contract without reconstructing
29
+ owner identity from a package owner.
30
+
31
+ ## [1.0.0-rc.10] - 2026-08-17
32
+
33
+ ### Fixed
34
+
35
+ - Project Technology now reads complete tracked-file inventories in large
36
+ repositories instead of accepting Node's default child-process buffer.
37
+ - A regression proves that an accepted target remains discoverable after more
38
+ than one megabyte of earlier tracked paths.
39
+
40
+ ## [1.0.0-rc.9] - 2026-08-17
41
+
42
+ ### Fixed
43
+
44
+ - `mirai-graph technology ...` now resolves an omitted repository or `.` from
45
+ the caller's working directory instead of the installed package directory.
46
+ - CLI regressions cover omitted, relative and absolute repository selection.
47
+
7
48
  ## [1.0.0-rc.8] - 2026-08-17
8
49
 
9
50
  ### Added
package/README.md CHANGED
@@ -10,7 +10,7 @@ Use it when a software project has useful knowledge spread across README files,
10
10
  docs, issues, chats, code comments and AI prompts, and you need a small
11
11
  machine-readable map that developers and AI assistants can validate and reuse.
12
12
 
13
- Status: public `1.0.0-rc.8` release candidate.
13
+ Status: stable public `1.0.0` release.
14
14
 
15
15
  ## What Problem Does It Solve?
16
16
 
@@ -42,8 +42,8 @@ Start with a normal repository and use Mirai Graph to:
42
42
 
43
43
  ## Current Installation Status
44
44
 
45
- The repository is ready as the `mirai-graph@1.0.0-rc.8` release candidate.
46
- Until npm publication is confirmed, use the repository checkout path:
45
+ The repository is ready as the stable `mirai-graph@1.0.0` package. To verify a
46
+ repository checkout directly, use:
47
47
 
48
48
  ```bash
49
49
  git clone https://github.com/zabarov/mirai-graph.git
@@ -52,7 +52,7 @@ npm install
52
52
  npm run release:check
53
53
  ```
54
54
 
55
- After npm publication, external projects will use:
55
+ External projects use:
56
56
 
57
57
  ```bash
58
58
  npm install -D mirai-graph
@@ -272,7 +272,7 @@ routes. See [Profile Boundaries](standard/profile-boundaries.md).
272
272
 
273
273
  ## Release Candidate
274
274
 
275
- The current release candidate consolidates the validator-backed public standard
275
+ The stable 1.0 release consolidates the validator-backed public standard
276
276
  across the core model, profiles, executable process control, instrumentation,
277
277
  Character Layer, adopter kit and evidence boundaries.
278
278
 
@@ -23,7 +23,7 @@ The repository should become the public source of truth for:
23
23
  - synthetic benchmarks and playground materials;
24
24
  - publications, citations and research evidence.
25
25
 
26
- For the current public release candidate, "source of truth" means public
26
+ For the current stable release, "source of truth" means public
27
27
  standardization and reproducible examples. It does not mean that private
28
28
  project graphs, internal workflows or generated context packs are published
29
29
  here.
@@ -87,7 +87,7 @@ The model is not just a knowledge graph. It combines:
87
87
  - implementation and adoption methods.
88
88
  - organization-governance coordination patterns.
89
89
 
90
- The current 1.0 release candidate also makes the operating model executable
90
+ The stable 1.0 release also makes the operating model executable
91
91
  enough to test:
92
92
 
93
93
  - launch records define bounded work permission;
@@ -182,7 +182,7 @@ test the model:
182
182
 
183
183
  Synthetic evidence must be clearly separated from real-world validation.
184
184
 
185
- In the current release candidate, `playground/` is an index of runnable CLI
185
+ In the stable release, `playground/` is an index of runnable CLI
186
186
  examples. A hosted or interactive playground is future work.
187
187
 
188
188
  ### 6. Link Publications And Research Evidence
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mirai-graph",
3
- "version": "1.0.0-rc.8",
3
+ "version": "1.0.0",
4
4
  "private": false,
5
5
  "description": "An evolutionary graph operating model for managing the growth of complex systems.",
6
6
  "license": "MIT",
@@ -31,9 +31,9 @@ function usage() {
31
31
  console.error(" Reports explain validation decisions. They do not authorize canonical updates.");
32
32
  }
33
33
 
34
- function run(script, args) {
34
+ function run(script, args, cwd = root) {
35
35
  const result = spawnSync(node, [path.join(root, script), ...args], {
36
- cwd: root,
36
+ cwd,
37
37
  stdio: "inherit"
38
38
  });
39
39
  process.exit(result.status === null ? 1 : result.status);
@@ -53,7 +53,7 @@ if (command === "technology") {
53
53
  usage();
54
54
  process.exit(1);
55
55
  }
56
- run("packages/cli/project-technology.js", [subcommand, ...rest]);
56
+ run("packages/cli/project-technology.js", [subcommand, ...rest], process.cwd());
57
57
  }
58
58
 
59
59
  if (command === "init" || command === "detect" || command === "bootstrap") {
@@ -58,8 +58,15 @@ function executionContract() {
58
58
  }],
59
59
  architecture_contract: {
60
60
  contract_ref: "contract.fixture.architecture",
61
- acceptance_ref: "decision.fixture.accepted", lifecycle: "accepted",
62
- owner_ids: ["runtime"], package_ids: ["fixture/runtime"],
61
+ acceptance_ref: "decision.fixture.accepted", architecture_owner_id: "human.fixture.owner", lifecycle: "accepted",
62
+ owner_ids: ["runtime"], component_ids: ["component.fixture.runtime"],
63
+ package_ids: ["fixture/runtime"], capability_ids: ["capability.fixture.runtime"],
64
+ ownership_boundaries: [{
65
+ subject_ref: "capability.fixture.runtime", data_owner: "runtime", access_owner: "runtime",
66
+ lifecycle_owner: "runtime", interface_owner: "runtime", runtime_owner: "runtime",
67
+ }],
68
+ required_relations: ["component.fixture.runtime->capability.fixture.runtime"],
69
+ allowed_relations: [], forbidden_relations: ["capability.fixture.runtime->capability.fixture.legacy"],
63
70
  required_dependencies: [], forbidden_dependencies: ["fixture/runtime->fixture/legacy"],
64
71
  },
65
72
  };
@@ -222,10 +229,43 @@ try {
222
229
  const disabled = technology.execute("disable", skill, { apply: true });
223
230
  check("disabled_state_fails_closed", disabled.status === "success" && technology.verify(skill, { significantWork: true }).status === "blocked");
224
231
 
232
+ const largeProvider = initRepo(root, "large-provider");
233
+ addTarget(largeProvider);
234
+ const emptyBlob = spawnSync("git", ["hash-object", "-w", "--stdin"], {
235
+ cwd: largeProvider, input: "", encoding: "utf8",
236
+ }).stdout.trim();
237
+ const padding = "x".repeat(190);
238
+ const indexInfo = Array.from({ length: 5200 }, (_, index) =>
239
+ `100644 ${emptyBlob}\tarchive/${String(index).padStart(5, "0")}-${padding}.txt\n`
240
+ ).join("");
241
+ const indexed = spawnSync("git", ["update-index", "--index-info"], {
242
+ cwd: largeProvider, input: indexInfo, encoding: "utf8", maxBuffer: 64 * 1024 * 1024,
243
+ });
244
+ check("large_repository_fixture_created", indexed.status === 0, indexed.stderr);
245
+ git(largeProvider, "commit", "-qm", "large tracked index");
246
+ const largeRevision = git(largeProvider, "rev-parse", "HEAD");
247
+ check("large_repository_enable", technology.execute("enable", largeProvider, { apply: true }).status === "success");
248
+ const largeProvided = technology.execute("provide", largeProvider, {
249
+ apply: true, targetId: TARGET_ID, semanticDigest: SEMANTIC_DIGEST, providerRevision: largeRevision,
250
+ });
251
+ check("large_repository_target_is_not_lost_to_process_buffer", largeProvided.status === "success", largeProvided.blockers);
252
+
225
253
  const cli = spawnSync(process.execPath, [path.join(__dirname, "mirai-graph.js"), "technology", "explain", federation], { encoding: "utf8" });
226
254
  const cliResult = JSON.parse(cli.stdout);
227
255
  check("unified_cli_contract", cli.status === 0 && cliResult.operation_id === "mirai.project_technology.explain" && cliResult.operation_mode === "read_only");
228
256
 
257
+ const cliFromCwd = spawnSync(process.execPath, [path.join(__dirname, "mirai-graph.js"), "technology", "status"], {
258
+ cwd: federation, encoding: "utf8",
259
+ });
260
+ const cliFromCwdResult = JSON.parse(cliFromCwd.stdout);
261
+ check("unified_cli_defaults_to_caller_cwd", cliFromCwd.status === 0 && cliFromCwdResult.repository_id === "fixture-federation", cliFromCwdResult);
262
+
263
+ const cliDot = spawnSync(process.execPath, [path.join(__dirname, "mirai-graph.js"), "technology", "status", "."], {
264
+ cwd: federation, encoding: "utf8",
265
+ });
266
+ const cliDotResult = JSON.parse(cliDot.stdout);
267
+ check("unified_cli_resolves_relative_repo_from_caller_cwd", cliDot.status === 0 && cliDotResult.repository_id === "fixture-federation", cliDotResult);
268
+
229
269
  process.stdout.write(`${JSON.stringify({ status: "success", checks_passed: checks.length, checks_failed: 0, checks }, null, 2)}\n`);
230
270
  } finally {
231
271
  fs.rmSync(root, { recursive: true, force: true });
@@ -77,7 +77,11 @@ function result(operation, operationMode, status, extra = {}) {
77
77
  }
78
78
 
79
79
  function git(repo, ...args) {
80
- const completed = spawnSync("git", args, { cwd: repo, encoding: "utf8" });
80
+ const completed = spawnSync("git", args, {
81
+ cwd: repo,
82
+ encoding: "utf8",
83
+ maxBuffer: 64 * 1024 * 1024,
84
+ });
81
85
  return completed.status === 0 ? completed.stdout.trim() : "";
82
86
  }
83
87
 
@@ -225,16 +229,44 @@ function normalizeExecutionContract(value) {
225
229
  scopes.sort((a, b) => canonicalBytes(a).localeCompare(canonicalBytes(b)));
226
230
 
227
231
  const architecture = value.architecture_contract && typeof value.architecture_contract === "object" && !Array.isArray(value.architecture_contract) ? value.architecture_contract : {};
228
- const architectureAllowed = new Set(["contract_ref", "acceptance_ref", "lifecycle", "owner_ids", "package_ids", "required_dependencies", "forbidden_dependencies"]);
232
+ const architectureAllowed = new Set([
233
+ "contract_ref", "acceptance_ref", "architecture_owner_id", "lifecycle", "owner_ids", "component_ids",
234
+ "package_ids", "capability_ids", "ownership_boundaries", "required_relations",
235
+ "allowed_relations", "forbidden_relations", "required_dependencies", "forbidden_dependencies",
236
+ ]);
229
237
  if (Object.keys(architecture).some((key) => !architectureAllowed.has(key))) blockers.push("provider_architecture_contract_not_bounded");
230
238
  const contractRef = String(architecture.contract_ref || "").trim();
231
239
  const acceptanceRef = String(architecture.acceptance_ref || "").trim();
240
+ const architectureOwnerId = String(architecture.architecture_owner_id || "").trim();
232
241
  const lifecycle = String(architecture.lifecycle || "").trim();
233
242
  if (!REF_RE.test(contractRef)) blockers.push("provider_architecture_contract_ref_missing_or_unsafe");
234
243
  if (!REF_RE.test(acceptanceRef)) blockers.push("provider_architecture_acceptance_ref_missing_or_unsafe");
244
+ if (!REF_RE.test(architectureOwnerId)) blockers.push("provider_architecture_owner_missing_or_unsafe");
235
245
  if (!ACCEPTED_LIFECYCLES.has(lifecycle)) blockers.push("provider_architecture_not_accepted");
236
246
  const ownerIds = boundedRefs(architecture.owner_ids, "architecture_owner_ids", blockers);
247
+ const componentIds = boundedRefs(architecture.component_ids, "architecture_component_ids", blockers);
237
248
  const packageIds = boundedRefs(architecture.package_ids, "architecture_package_ids", blockers);
249
+ const capabilityIds = boundedRefs(architecture.capability_ids, "architecture_capability_ids", blockers);
250
+ const ownershipBoundaries = [];
251
+ if (!Array.isArray(architecture.ownership_boundaries) || architecture.ownership_boundaries.length === 0) blockers.push("provider_architecture_ownership_boundaries_empty");
252
+ else for (const boundary of architecture.ownership_boundaries) {
253
+ const keys = ["subject_ref", "data_owner", "access_owner", "lifecycle_owner", "interface_owner", "runtime_owner"];
254
+ if (!boundary || typeof boundary !== "object" || Array.isArray(boundary) || Object.keys(boundary).some((key) => !keys.includes(key))) {
255
+ blockers.push("provider_architecture_ownership_boundary_invalid"); continue;
256
+ }
257
+ const normalizedBoundary = Object.fromEntries(keys.map((key) => [key, String(boundary[key] || "").trim()]));
258
+ if (Object.values(normalizedBoundary).some((id) => !REF_RE.test(id))) {
259
+ blockers.push("provider_architecture_ownership_boundary_unsafe"); continue;
260
+ }
261
+ if (![...componentIds, ...packageIds, ...capabilityIds].includes(normalizedBoundary.subject_ref)) blockers.push("provider_architecture_ownership_subject_unknown");
262
+ if (["data_owner", "access_owner", "lifecycle_owner", "interface_owner", "runtime_owner"].some((key) => !ownerIds.includes(normalizedBoundary[key]))) blockers.push("provider_architecture_boundary_owner_unapproved");
263
+ ownershipBoundaries.push(normalizedBoundary);
264
+ }
265
+ ownershipBoundaries.sort((a, b) => canonicalBytes(a).localeCompare(canonicalBytes(b)));
266
+ const requiredRelations = boundedRelations(architecture.required_relations, "architecture_required_relations", blockers);
267
+ const allowedRelations = boundedRelations(architecture.allowed_relations, "architecture_allowed_relations", blockers);
268
+ const forbiddenRelations = boundedRelations(architecture.forbidden_relations, "architecture_forbidden_relations", blockers);
269
+ if (requiredRelations.some((item) => forbiddenRelations.includes(item))) blockers.push("provider_architecture_forbidden_relation");
238
270
  const requiredDependencies = boundedRelations(architecture.required_dependencies, "required_dependencies", blockers);
239
271
  const forbiddenDependencies = boundedRelations(architecture.forbidden_dependencies, "forbidden_dependencies", blockers);
240
272
  if (requiredDependencies.some((item) => forbiddenDependencies.includes(item))) blockers.push("provider_architecture_forbidden_dependency");
@@ -253,9 +285,16 @@ function normalizeExecutionContract(value) {
253
285
  architecture_contract: {
254
286
  contract_ref: contractRef,
255
287
  acceptance_ref: acceptanceRef,
288
+ architecture_owner_id: architectureOwnerId,
256
289
  lifecycle,
257
290
  owner_ids: ownerIds,
291
+ component_ids: componentIds,
258
292
  package_ids: packageIds,
293
+ capability_ids: capabilityIds,
294
+ ownership_boundaries: ownershipBoundaries,
295
+ required_relations: requiredRelations,
296
+ allowed_relations: allowedRelations,
297
+ forbidden_relations: forbiddenRelations,
259
298
  required_dependencies: requiredDependencies,
260
299
  forbidden_dependencies: forbiddenDependencies,
261
300
  },
@@ -0,0 +1,14 @@
1
+ # Mirai Graph 1.0.0-rc.10
2
+
3
+ This release candidate completes the public Project Technology pilot against
4
+ the real Federation graph.
5
+
6
+ ## Verified outcome
7
+
8
+ - commands without a repository argument use the caller's project;
9
+ - large tracked-file inventories are read completely;
10
+ - accepted target objects cannot disappear because of a process-output limit;
11
+ - the Project Technology contract and fail-closed safety rules are unchanged.
12
+
13
+ Stable `1.0.0` remains deferred until this RC has been exercised by the SIMAI
14
+ Federation and all release-managed skills.
@@ -0,0 +1,14 @@
1
+ # Mirai Graph 1.0.0-rc.11
2
+
3
+ This release candidate closes the final architecture-owner gap found by the
4
+ real Federation process resolver.
5
+
6
+ ## Verified outcome
7
+
8
+ - complete large-repository target discovery;
9
+ - exact human architecture owner in the bounded contract;
10
+ - component, package, capability and operational ownership remain digest-bound;
11
+ - no private source or full provider graph is exported.
12
+
13
+ Stable `1.0.0` remains deferred until Federation 8.20.0 and all managed skills
14
+ complete their release checks.
@@ -0,0 +1,14 @@
1
+ # Mirai Graph 1.0.0-rc.9
2
+
3
+ This release candidate fixes the public Project Technology CLI boundary found
4
+ during the Federation migration pilot.
5
+
6
+ ## Verified outcome
7
+
8
+ - a command run from a project without a repository argument uses that project;
9
+ - an explicit `.` is resolved from the caller's working directory;
10
+ - absolute repository paths keep working;
11
+ - the Project Technology contract and safety gates are unchanged from RC.8.
12
+
13
+ Stable `1.0.0` remains deferred until this RC has been exercised by the SIMAI
14
+ Federation and all release-managed skills.
@@ -0,0 +1,23 @@
1
+ # Mirai Graph 1.0.0
2
+
3
+ Mirai Graph 1.0.0 is the first stable public release.
4
+
5
+ ## What is stable
6
+
7
+ - one `graph.json` manifest and exact `graph.lock.json` imports;
8
+ - public Project Technology CLI and programmatic API;
9
+ - task-scoped context, accepted target and architecture checks;
10
+ - bounded provider export/import and safe refresh-binding;
11
+ - fail-closed verification for stale, incomplete or tampered contracts;
12
+ - read-only diagnostics and idempotent transactional operations.
13
+
14
+ ## Verified use
15
+
16
+ The release-candidate series was integrated into Federation 8.20.0 across 25
17
+ managed skills. Stable 1.0 keeps the same public schema and safety boundaries.
18
+
19
+ ## Claim boundary
20
+
21
+ Stable status covers the published contracts, CLI and release checks. Project
22
+ results still require project-specific goals, evidence, tests and human
23
+ decisions at product or architecture boundaries.
@@ -1,6 +1,6 @@
1
1
  # Mirai Graph Release Process
2
2
 
3
- Status: 1.0 release-candidate release process
3
+ Status: stable 1.0 release process
4
4
 
5
5
  ## Purpose
6
6
 
@@ -15,6 +15,7 @@ Release notes must separate:
15
15
 
16
16
  ## Release Notes
17
17
 
18
+ - [v1.0.0](1.0.0.md) - stable Project Technology, CLI and public contract.
18
19
  - [v1.0.0-rc.6](1.0.0-rc.6.md) - anti-drift / quality-control release
19
20
  consolidation across Semantic Intent, Dynamic Episode, Goal Vector and
20
21
  Technology Quality Feedback.
@@ -47,6 +47,11 @@ references, Done When, requirements and acceptance references, constraints,
47
47
  non-goals, deferred boundaries, approved repository/owner/package/file/action
48
48
  scope, the accepted architecture boundary and a contract digest.
49
49
 
50
+ The architecture boundary carries exact component, package and capability
51
+ identities, ownership for data/access/lifecycle/interface/runtime, required and
52
+ forbidden relations, and dependency constraints. This keeps an imported target
53
+ executable without copying the provider's private source or full graph.
54
+
50
55
  ## Hybrid Source Of Truth
51
56
 
52
57
  Project Technology may select graph objects and point to raw sources. It must