Skip to content

Update to Holochain 0.6.0-rc.0#630

Merged
lucksus merged 30 commits intodevfrom
hc-0.6.0-rc.0
Nov 17, 2025
Merged

Update to Holochain 0.6.0-rc.0#630
lucksus merged 30 commits intodevfrom
hc-0.6.0-rc.0

Conversation

@lucksus
Copy link
Copy Markdown
Member

@lucksus lucksus commented Nov 12, 2025

Overview

This PR updates AD4M to work with Holochain 0.6.0-rc.0, addressing breaking changes in the Holochain HDK/HDI APIs, the mr_bundle format, and upgrading scryer-prolog to maintain compatibility with Rust 1.88.

Breaking Changes Addressed

1. Holochain HDK/HDI Version Updates

Updated all bootstrap languages with Holochain DNAs to use the new versions:

  • HDK: 0.5.20.6.0-rc.0
  • HDI: 0.6.20.7.0-rc.0
  • holo_hash: 0.5.20.6.0-rc.0
  • holochain_serialized_bytes: Removed git source, now using =0.0.56

Affected Languages:

  • ✅ p-diff-sync
  • ✅ agent-language
  • ✅ direct-message-language
  • ✅ file-storage

2. HDK API Changes

get_links() Signature Change

The function now requires two separate parameters instead of one:

Before:

let input = GetLinksInputBuilder::try_new(base, LinkTypes::Type)
    .unwrap()
    .tag_prefix(tag)
    .get_options(GetStrategy::Network)
    .build();
let links = get_links(input)?;

After:

let query = LinkQuery::try_new(base, LinkTypes::Type)?
    .tag_prefix(tag);
let links = get_links(query, GetStrategy::Network)?;

Changed Files:

  • p-diff-sync: 8 occurrences across link_adapter/snapshots.rs, link_adapter/workspace.rs, retriever/holochain.rs, telepresence/status.rs
  • agent-language: 1 occurrence in agent_store/src/utils.rs
  • direct-message-language: 1 occurrence in direct-message/src/lib.rs

delete_link() Signature Change

Now requires GetOptions as second parameter:

Before:

delete_link(link.create_link_hash)?;

After:

delete_link(link.create_link_hash, GetOptions::network())?;

Changed Files:

  • direct-message-language/hc-dna/zomes/direct-message/src/lib.rs

GrantedFunctions::Listed Type Change

Changed from BTreeSet to HashSet:

Before:

let mut functions = BTreeSet::new();

After:

let mut functions = HashSet::new();

Changed Files:

  • p-diff-sync/hc-dna/zomes/perspective_diff_sync/src/lib.rs
  • direct-message-language/hc-dna/zomes/direct-message/src/lib.rs

3. mr_bundle YAML Format Changes

Updated to use path: instead of bundled: in manifest files:

happ.yaml:

roles:
- name: perspective-diff-sync
  dna:
    path: ./perspective-diff-sync.dna  # was: bundled

dna.yaml:

integrity:
  zomes:
    - name: integrity_zome
      path: ../target/.../zome.wasm  # was: bundled
coordinator:
  zomes:
    - name: coordinator_zome
      path: ../target/.../zome.wasm  # was: bundled

Changed Files:

  • All workdir/happ.yaml and workdir/dna.yaml files
  • executor/src/core/LanguageController.ts - Updated language templating code

4. Language Templating Fixes

The new mr_bundle unpacking structure no longer includes a target/wasm32-unknown-unknown/release/ directory. WASM files are now directly in the unpacked DNA directory.

Changes in LanguageController.ts:

  • Updated to read happYaml.roles[0].dna.path (was .dna.bundled)
  • Removed obsolete WASM path validation that expected the old directory structure

5. Dependency Fixes

Added getrandom dependency with custom backend configuration to fix WASM compilation issues:

Cargo.toml additions:

[dependencies]
getrandom = { version = "0.3" }

[target.wasm32-unknown-unknown]
rustflags = ['--cfg', 'getrandom_backend="custom"']

Applied to:

  • agent-language
  • direct-message-language

6. Scryer-Prolog Upgrade (Rust 1.88 Compatibility)

Critical Change: Holochain 0.6.0-rc.0 requires Rust 1.88, which broke compilation of the old scryer-prolog version. This necessitated upgrading to scryer-prolog 0.10.

Version Update:

scryer-prolog = { version = "0.10", git = "https://github.com/coasys/scryer-prolog", branch = "ad4m" }

(was: version = "0.9.4", branch = "ad4m-hc-0.5")

Breaking Changes in Scryer-Prolog 0.10

The upgrade broke property resolution in SDNA because list_to_assoc and get_assoc work differently in the new version.

Problem: The old code used association lists (assoc) to store JSON dictionaries:

% Old approach (broken in 0.10)
json_dict(Dict) -->
    ws, "{", ws, key_value_pairs(Pairs), ws, "}", ws,
    { list_to_assoc(Pairs, Dict) }.

json_property(JsonString, Property, Value) :-
    phrase(json_dict(Dict), JsonString),
    get_assoc(Property, Dict, Value).  % This stopped working

Solution: Use list-based key-value pairs with member/2 instead of assoc structures:

% New approach (works in 0.10)
json_dict(Dict) -->
    ws, "{", ws, key_value_pairs(Pairs), ws, "}", ws,
    { Dict = Pairs }.  % Dict is now just a list of Key-Value pairs

json_property(JsonString, Property, Value) :-
    phrase(json_dict(Dict), JsonString),
    member(Property-Value, Dict).  % Use member instead of get_assoc

Additional Prolog Refactoring

The resolve_property predicate was refactored for clarity and robustness:

Before (nested if-then-else):

resolve_property(SubjectClass, Base, PropertyName, PropertyValue, Resolve) :-
    property(SubjectClass, PropertyName),
    property_getter(SubjectClass, Base, PropertyName, PropertyUri),
    ( property_resolve(SubjectClass, PropertyName)
        -> (append("literal://", _, PropertyUri)
            -> (Resolve = false, ...)
            ; (Resolve = true, PropertyValue = PropertyUri))
        ; (Resolve = false, PropertyValue = PropertyUri)
    ).

After (separate clauses with cuts):

resolve_property(SubjectClass, Base, PropertyName, PropertyValue, Resolve) :-
    property(SubjectClass, PropertyName),
    property_getter(SubjectClass, Base, PropertyName, PropertyUri),
    resolve_property_value(SubjectClass, PropertyName, PropertyUri, PropertyValue, Resolve).

% Case 1: Resolvable + Literal URL -> resolve here
resolve_property_value(SubjectClass, PropertyName, PropertyUri, PropertyValue, false) :-
    property_resolve(SubjectClass, PropertyName),
    resolve_property_ensure_chars(PropertyUri, PropertyUriChars),
    append("literal://", _, PropertyUriChars),
    !,
    literal_from_url(PropertyUriChars, LiteralValue, _Scheme),
    resolve_property_extract_json_or_value(LiteralValue, PropertyValue).

% Case 2: Resolvable + Non-literal -> pass to JS
resolve_property_value(SubjectClass, PropertyName, PropertyUri, PropertyUri, true) :-
    property_resolve(SubjectClass, PropertyName),
    !.

% Case 3: Not resolvable -> return URI as-is
resolve_property_value(_SubjectClass, _PropertyName, PropertyUri, PropertyUri, false).

This refactoring:

  • Separates concerns into multiple predicates
  • Uses explicit cuts (!) instead of complex if-then-else
  • Adds helper predicates for clarity
  • Handles atom vs list conversion explicitly

DCG Parser Improvements

The DCG (Definite Clause Grammar) rules for JSON parsing were also updated to use explicit cuts instead of if-then-else:

Before:

key_value_pairs([Key-Value|Pairs]) -->
    ws, json_string(Key), ws, ":", ws, json_value(Value), ws,
    ("," -> key_value_pairs(Pairs) ; {Pairs=[]}).

After:

key_value_pairs([Key-Value|Pairs]) -->
    ws, json_string(Key), ws, ":", ws, json_value(Value), ws, ",", !,
    key_value_pairs(Pairs).
key_value_pairs([Key-Value]) -->
    ws, json_string(Key), ws, ":", ws, json_value(Value), ws.

This makes the parsing more deterministic and compatible with scryer-prolog 0.10's evaluation strategy.

Changed Files:

  • rust-executor/Cargo.toml - scryer-prolog version update
  • rust-executor/src/perspectives/sdna.rs - Prolog code refactoring

7. Removed p-diff-sync-socket-signaling

The p-diff-sync-socket-signaling bootstrap language has been removed as it had complex dependency conflicts with getrandom v0.2/v0.3 and is no longer actively maintained.

Dependencies

  • Rust: Minimum version 1.88 (required by Holochain 0.6.0-rc.0)
  • scryer-prolog: 0.9.4 → 0.10
  • Holochain: 0.5.2 → 0.6.0-rc.0

Files Changed

Bootstrap Languages

  • agent-language/ - 8 files modified
  • direct-message-language/ - 9 files modified
  • file-storage/ - 8 files modified
  • p-diff-sync/ - 8 files modified
  • p-diff-sync-socket-signaling/ - Entire directory removed

Executor

  • executor/src/core/LanguageController.ts - Language templating updates

Rust Executor & Prolog

  • rust-executor/Cargo.toml - scryer-prolog 0.10 upgrade
  • rust-executor/src/perspectives/sdna.rs - Prolog code refactoring for 0.10 compatibility

Build System

  • Multiple Cargo.lock files updated
  • build.sh scripts updated across bootstrap languages

Testing

All bootstrap languages with Holochain DNAs now build successfully:

  • ✅ p-diff-sync
  • ✅ agent-language
  • ✅ direct-message-language
  • ✅ file-storage

Language templating tests should now pass with the updated mr_bundle format handling.

Migration Notes

For any external languages or forks:

  1. Upgrade to Rust 1.88 or later (required for Holochain 0.6.0-rc.0)
  2. Update HDK/HDI versions in your Cargo.toml files
  3. Replace all get_links() calls with the new two-parameter signature using LinkQuery
  4. Replace delete_link() calls to include GetOptions parameter
  5. Change BTreeSet to HashSet for GrantedFunctions::Listed
  6. Update YAML manifests to use path: instead of bundled:
  7. Add getrandom dependency if experiencing WASM compilation issues
  8. Update cargo dependencies with cargo update
  9. If using scryer-prolog: Upgrade to 0.10 and refactor any code using list_to_assoc/get_assoc to use list-based dictionaries with member/2

Related Issues

  • Holochain 0.6.0-rc.0 release (requires Rust 1.88)
  • mr_bundle YAML format breaking changes
  • scryer-prolog 0.10 upgrade (assoc lists API changes)
  • Language templating compatibility

Checklist

  • Rust 1.88 compatibility verified
  • scryer-prolog upgraded to 0.10
  • Prolog code refactored (assoc → list-based dicts)
  • All bootstrap languages build successfully
  • HDK API changes applied consistently
  • YAML format updates completed
  • Language templating code updated
  • Property resolution working correctly
  • Executor rebuilt
  • Deprecated code removed

Note

Enhances Tauri ACL JSON schemas (desktop and Linux) with webview-aware capability semantics, extensive markdownDescription metadata, and many new/updated permission identifiers across core/plugins.

  • UI (Tauri ACL Schemas):
    • Expand Capability to include webviews; clarify windows vs webviews behavior and examples.
    • Add markdownDescription and refine descriptions across permissions for better docs/UX.
    • Introduce and update permission identifiers/commands (e.g., core:app bundle/identifier/data-store ops, core:webview auto-resize/background-color, core:window background/badge/overlay, plus fs/http/opener/dialog/notification/os/process/shell/updater/positioner/global-shortcut).
    • Apply all changes to both ui/src-tauri/gen/schemas/desktop-schema.json and linux-schema.json.

Written by Cursor Bugbot for commit d4cc9ad. This will update automatically on new commits. Configure here.

Summary by CodeRabbit

  • Chores

    • Upgraded Holochain-related crates and tooling; adjusted executor packaging/launch behavior and CI config.
    • Migrated DNA/HApp manifests to the newer schema (manifest_version and bundled→path); improved DNA path handling.
    • Build scripts now set a wasm cfg to enable a custom randomness backend for wasm builds.
    • Added a reusable JSON parser and dict-to-JSON helpers with tests; updated runtime seed identifiers.
  • Revert

    • Removed the Perspective Diff Sync socket-signaling language and its build, test, and integration tooling.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Nov 12, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Refactors HDK link queries from GetLinksInputBuilder to LinkQuery with explicit GetStrategy::Network, bumps Holochain/Rust dependencies and adds wasm RUSTFLAGS for getrandom_backend="custom", updates DNA manifests (manifest_version 1→0; bundledpath), adjusts executor packing, and removes the p-diff-sync-socket-signaling language and its tests/configs.

Changes

Cohort / File(s) Summary
Wasm build scripts
bootstrap-languages/*/hc-dna/build.sh, bootstrap-languages/p-diff-sync/hc-dna/build.sh
Inject RUSTFLAGS='--cfg getrandom_backend="custom"' into cargo build for wasm32-unknown-unknown.
Cargo dependency updates & wasm rustflags
rust-executor/Cargo.toml, bootstrap-languages/*/hc-dna/zomes/*/Cargo.toml, .../p-diff-sync/.../Cargo.toml
Bumped holochain-related crates to 0.6.x/0.7.0-rc.0, added getrandom = "0.3" (and some js-sys/reqwest), and added [target.wasm32-unknown-unknown] rustflags for getrandom_backend="custom".
Link API migration
bootstrap-languages/*/hc-dna/zomes/*/src/* (e.g. .../agent_store/src/utils.rs, .../direct-message/src/lib.rs, .../perspective_diff_sync/**/snapshots.rs, .../workspace.rs, .../retriever/holochain.rs, .../telepresence/status.rs)
Replaced GetLinksInputBuilder usage with LinkQuery::try_new(...) (+ optional .tag_prefix(...)), switched get_links(...) calls to get_links(query, GetStrategy::Network), removed many .unwrap()s in favor of ?, and adjusted related callsites (e.g., explicit network options for delete_link).
DNA manifest schema updates
bootstrap-languages/*/hc-dna/workdir/dna.yaml, */workdir/happ.yaml
Changed manifest_version from 10 and replaced bundled: with path: for zome/DNA wasm references.
Executor & holochain service
executor/src/core/LanguageController.ts, rust-executor/src/holochain_service/mod.rs, rust-executor/src/perspectives/sdna.rs, rust-executor/src/perspectives/utils.rs
LanguageController reads hapYaml.roles[0].dna.path; holochain_service pack/unpack → expand_bundle and app interface call adjusted; SDNA JSON parser extracted to get_json_parser_code() and Prolog-to-JSON helpers added/refactored with tests.
p-diff-sync-socket-signaling removal
bootstrap-languages/p-diff-sync-socket-signaling/* (e.g. index.ts, linksAdapter.ts, telepresenceAdapter.ts, package.json, rollup.config.hc-dna.js, hc-dna/*, hc-dna/zomes/*, hc-dna/zomes/tests/*, Nix files)
Complete deletion of the language implementation: adapters, Rollup/Nix/build/test configs, package manifest, Rust zomes (coordinator & integrity), retriever/commit/pull/render/workspace/topo_sort/etc., telepresence, tests, and helpers.
Tests & tooling removed for deleted language
bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/*, .gitignore, download scripts
Removed test suites, utilities, download scripts, tsconfigs, and many .gitignore entries tied to the deleted language.
Seed / CI / config updates
cli/mainnet_seed.json, rust-executor/src/mainnet_seed.json, .circleci/config.yml
Updated known language hashes in seed JSONs and adjusted CircleCI toolchain/cache steps (Rust → 1.88, Holochain CLI upgrade and cache key changes).

Sequence Diagram(s)

sequenceDiagram
    participant Zome as Zome code
    participant Old as GetLinksInputBuilder
    participant New as LinkQuery
    participant HDK as HDK runtime

    rect rgb(245,245,255)
      Note over Zome,Old: Legacy builder flow
      Zome->>Old: build GetLinksInput (try_new → .tag_prefix → .get_options → .build)
      Old->>HDK: get_links(input)
      HDK-->>Old: Vec<Link>
    end

    rect rgb(240,255,240)
      Note over Zome,New: New query flow
      Zome->>New: LinkQuery::try_new(...)? .tag_prefix(...)
      New->>HDK: get_links(query, GetStrategy::Network)
      HDK-->>New: Vec<Link>
    end
Loading
sequenceDiagram
    participant App as Application
    participant LangCtrl as LanguageController
    participant HoloSvc as HolochainService

    rect rgb(255,248,235)
      Note over App,LangCtrl: Old DNA resolution
      App->>LangCtrl: Load DNA
      LangCtrl->>LangCtrl: read hapYaml.roles[0].dna.bundled
      LangCtrl->>HoloSvc: unpack & validate wasm dir
    end

    rect rgb(235,255,248)
      Note over App,LangCtrl: New DNA resolution
      App->>LangCtrl: Load DNA
      LangCtrl->>LangCtrl: read hapYaml.roles[0].dna.path
      LangCtrl->>HoloSvc: expand_bundle(path)
      HoloSvc-->>LangCtrl: Path result
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Areas to focus review on:

  • rust-executor/src/holochain_service/mod.rs — pack/unpack → expand_bundle changes and added app interface argument.
  • rust-executor/src/perspectives/sdna.rs & src/perspectives/utils.rs — new JSON parser extraction, resolve_property refactor, and added convert_dict_to_json; run unit tests.
  • Full removal of bootstrap-languages/p-diff-sync-socket-signaling — ensure no leftover references, CI/build scripts, or packaging artifacts remain.
  • LinkQuery migration sites — verify tag_prefix semantics, GetStrategy::Network usage, error propagation (replaced unwraps), and any behavioral differences (e.g., delete_link network options).

Possibly related PRs

Suggested reviewers

  • jhweir

Poem

🐰 I hopped through code both old and new,

Swapped builders for queries, tidy and true.
Paths now point where DNAs belong,
Wasm flags hum a braver song.
One language waved and then was gone—onward we chew. 🥕

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 35.29% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Update to Holochain 0.6.0-rc.0' directly and concisely summarizes the main objective of the PR—upgrading to a new version of Holochain.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch hc-0.6.0-rc.0

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d56dcef and d4cc9ad.

📒 Files selected for processing (1)
  • rust-executor/src/perspectives/utils.rs (3 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: lucksus
Repo: coasys/ad4m PR: 630
File: bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/Cargo.toml:28-29
Timestamp: 2025-11-13T12:18:07.265Z
Learning: For Holochain 0.6.0-rc.0 (branch 0.6.0-rc.0-coasys), the correct and compatible HDI/HDK pairing is: hdi version 0.7.0-rc.0 and hdk version 0.6.0-rc.0. HDI is intentionally one minor version ahead of HDK in this release.
Learnt from: lucksus
Repo: coasys/ad4m PR: 630
File: bootstrap-languages/p-diff-sync/hc-dna/workdir/dna.yaml:2-2
Timestamp: 2025-11-13T12:17:37.333Z
Learning: For Holochain 0.6.0-rc.0, the correct manifest_version in DNA YAML files (dna.yaml) is 0, not 1. The mr_bundle library in Holochain 0.6.0-rc.0 errors when manifest_version is set to 1. The versioning appears to have been reset in this release.
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Cursor Bugbot
🔇 Additional comments (3)
rust-executor/src/perspectives/utils.rs (3)

36-61: LGTM! Well-structured dict conversion implementation.

The convert_dict_to_json function correctly handles the dict([Key-Value, ...]) pattern with appropriate fallback behavior for invalid inputs. The implementation is consistent with existing conversion functions like convert_assoc_to_json.


182-186: LGTM! Clean integration with clear documentation.

The dict functor handling is properly integrated alongside other special compound term handlers, with clear comments explaining the expected pattern.


777-1094: Excellent! Comprehensive test coverage fully addresses previous review.

The test suite thoroughly covers all scenarios requested in the past review comment:

  • Simple dict structures ✓
  • Nested values at multiple levels ✓
  • Empty dict ✓
  • Invalid structures (wrong args, wrong functor, wrong arity) ✓
  • Duplicate keys behavior (last-wins) ✓
  • Mixed value types ✓
  • Atom keys ✓

All tests properly construct Prolog Term structures and verify JSON output with appropriate assertions. This provides strong confidence in the dict conversion functionality.

Based on learnings: The previous review requested this exact test coverage, which has now been fully implemented.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (1)
executor/src/core/LanguageController.ts (1)

643-643: Migration to new YAML format looks correct.

The change from happYaml.roles[0].dna.bundled to happYaml.roles[0].dna.path properly reflects the mr_bundle YAML format update in Holochain 0.6.0-rc.0.

Consider adding defensive validation to guard against unexpected YAML structure:

 let happYaml = yaml.load(fs.readFileSync(happYamlPath, 'utf8'));
 //console.log("happ.yaml", happYaml)
 //@ts-ignore
+if (!happYaml.roles || !happYaml.roles[0] || !happYaml.roles[0].dna || !happYaml.roles[0].dna.path) {
+    throw new Error("Invalid happ.yaml structure: expected roles[0].dna.path");
+}
 let dnaBundlePath = path.join(unpackHappPath, happYaml.roles[0].dna.path)

This would provide clearer error messages if the YAML format is malformed, though the standardized format in 0.6.0-rc.0 may make this less critical.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f8daa8b and c08a201.

⛔ Files ignored due to path filters (11)
  • Cargo.lock is excluded by !**/*.lock
  • bootstrap-languages/agent-language/hc-dna/Cargo.lock is excluded by !**/*.lock
  • bootstrap-languages/direct-message-language/hc-dna/Cargo.lock is excluded by !**/*.lock
  • bootstrap-languages/file-storage/hc-dna/Cargo.lock is excluded by !**/*.lock
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/Cargo.lock is excluded by !**/*.lock
  • bootstrap-languages/p-diff-sync/hc-dna/Cargo.lock is excluded by !**/*.lock
  • deno.lock is excluded by !**/*.lock
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • ui/src-tauri/gen/schemas/acl-manifests.json is excluded by !**/gen/**
  • ui/src-tauri/gen/schemas/desktop-schema.json is excluded by !**/gen/**
  • ui/src-tauri/gen/schemas/linux-schema.json is excluded by !**/gen/**
📒 Files selected for processing (90)
  • bootstrap-languages/agent-language/hc-dna/build.sh (1 hunks)
  • bootstrap-languages/agent-language/hc-dna/workdir/dna.yaml (1 hunks)
  • bootstrap-languages/agent-language/hc-dna/workdir/happ.yaml (2 hunks)
  • bootstrap-languages/agent-language/hc-dna/zomes/agent_store/Cargo.toml (1 hunks)
  • bootstrap-languages/agent-language/hc-dna/zomes/agent_store/src/utils.rs (1 hunks)
  • bootstrap-languages/agent-language/hc-dna/zomes/agent_store_integrity/Cargo.toml (1 hunks)
  • bootstrap-languages/direct-message-language/hc-dna/build.sh (1 hunks)
  • bootstrap-languages/direct-message-language/hc-dna/workdir/dna.yaml (1 hunks)
  • bootstrap-languages/direct-message-language/hc-dna/workdir/happ.yaml (2 hunks)
  • bootstrap-languages/direct-message-language/hc-dna/zomes/direct-message-integrity/Cargo.toml (1 hunks)
  • bootstrap-languages/direct-message-language/hc-dna/zomes/direct-message/Cargo.toml (1 hunks)
  • bootstrap-languages/direct-message-language/hc-dna/zomes/direct-message/src/lib.rs (3 hunks)
  • bootstrap-languages/file-storage/hc-dna/build.sh (1 hunks)
  • bootstrap-languages/file-storage/hc-dna/workdir/dna.yaml (1 hunks)
  • bootstrap-languages/file-storage/hc-dna/zomes/file_storage/Cargo.toml (1 hunks)
  • bootstrap-languages/file-storage/hc-dna/zomes/integrity/Cargo.toml (1 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/.gitignore (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/README.md (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/customHttpDownloader.js (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/dna.js (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/esbuild.ts (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/Cargo.toml (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/build.ps1 (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/build.sh (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/default.nix (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/holochain_version.nix (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/nix/sources.json (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/nix/sources.nix (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/workdir/dna.yaml (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/Cargo.toml (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/errors.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/inputs.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/lib.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/chunked_diffs.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/commit.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/mod.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/pull.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/render.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/revisions.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/snapshots.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/test_graphs.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/tests.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/topo_sort.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/workspace.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/retriever.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/retriever/holochain.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/retriever/mock.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/telepresence/mod.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/telepresence/signal.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/telepresence/status.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/utils.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync_integrity/Cargo.toml (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync_integrity/src/impls.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync_integrity/src/lib.rs (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/common.ts (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/download-hc-binaries.sh (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/index.ts (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/package.json (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/pull.ts (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/queue.ts (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/render.ts (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/revisions.ts (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/signals.ts (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/stress.ts (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/telepresence.ts (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/tsconfig.json (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/utils.ts (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/index.ts (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/integration-test.js (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/linksAdapter.ts (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/package.json (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/rollup.config.hc-dna.js (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/telepresenceAdapter.ts (0 hunks)
  • bootstrap-languages/p-diff-sync-socket-signaling/tsconfig.json (0 hunks)
  • bootstrap-languages/p-diff-sync/hc-dna/build.sh (1 hunks)
  • bootstrap-languages/p-diff-sync/hc-dna/workdir/dna.yaml (2 hunks)
  • bootstrap-languages/p-diff-sync/hc-dna/workdir/happ.yaml (2 hunks)
  • bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/Cargo.toml (1 hunks)
  • bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/src/lib.rs (1 hunks)
  • bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/src/link_adapter/snapshots.rs (1 hunks)
  • bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/src/link_adapter/workspace.rs (1 hunks)
  • bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/src/retriever/holochain.rs (2 hunks)
  • bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/src/telepresence/status.rs (4 hunks)
  • bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync_integrity/Cargo.toml (1 hunks)
  • cli/mainnet_seed.json (1 hunks)
  • executor/src/core/LanguageController.ts (1 hunks)
  • rust-executor/Cargo.toml (1 hunks)
  • rust-executor/src/holochain_service/mod.rs (4 hunks)
  • rust-executor/src/mainnet_seed.json (1 hunks)
  • rust-executor/src/perspectives/sdna.rs (2 hunks)
💤 Files with no reviewable changes (58)
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/build.sh
  • bootstrap-languages/p-diff-sync-socket-signaling/dna.js
  • bootstrap-languages/p-diff-sync-socket-signaling/rollup.config.hc-dna.js
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/snapshots.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/render.ts
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/index.ts
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/holochain_version.nix
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/pull.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/inputs.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/default.nix
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/nix/sources.json
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/telepresence.ts
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/revisions.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/chunked_diffs.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/build.ps1
  • bootstrap-languages/p-diff-sync-socket-signaling/telepresenceAdapter.ts
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/pull.ts
  • bootstrap-languages/p-diff-sync-socket-signaling/.gitignore
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/tsconfig.json
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/package.json
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/mod.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/integration-test.js
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/topo_sort.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/test_graphs.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/tsconfig.json
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/commit.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/esbuild.ts
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/download-hc-binaries.sh
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/workdir/dna.yaml
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/common.ts
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/render.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/queue.ts
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync_integrity/src/lib.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/utils.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/revisions.ts
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/Cargo.toml
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync_integrity/src/impls.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/tests.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/lib.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/retriever/mock.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/linksAdapter.ts
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/retriever/holochain.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync_integrity/Cargo.toml
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/telepresence/signal.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/Cargo.toml
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/retriever.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/errors.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/index.ts
  • bootstrap-languages/p-diff-sync-socket-signaling/customHttpDownloader.js
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/signals.ts
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/telepresence/mod.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/utils.ts
  • bootstrap-languages/p-diff-sync-socket-signaling/README.md
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/tests/stress.ts
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/nix/sources.nix
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/link_adapter/workspace.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/hc-dna/zomes/perspective_diff_sync/src/telepresence/status.rs
  • bootstrap-languages/p-diff-sync-socket-signaling/package.json
🧰 Additional context used
🧠 Learnings (3)
📚 Learning: 2025-06-04T11:13:54.337Z
Learnt from: lucksus
Repo: coasys/ad4m PR: 605
File: bootstrap-languages/p-diff-sync/happ.js:1-5
Timestamp: 2025-06-04T11:13:54.337Z
Learning: In Holochain projects, .happ (Holochain app bundle) files are build-time artifacts generated by running "hc app pack workdir" in build scripts, not committed to the repository. The build process creates these files which are then imported by modules like happ.js.

Applied to files:

  • bootstrap-languages/agent-language/hc-dna/workdir/happ.yaml
  • executor/src/core/LanguageController.ts
  • bootstrap-languages/direct-message-language/hc-dna/zomes/direct-message-integrity/Cargo.toml
  • bootstrap-languages/agent-language/hc-dna/zomes/agent_store_integrity/Cargo.toml
  • rust-executor/src/holochain_service/mod.rs
  • bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync_integrity/Cargo.toml
  • bootstrap-languages/file-storage/hc-dna/zomes/file_storage/Cargo.toml
📚 Learning: 2025-06-05T11:39:48.641Z
Learnt from: lucksus
Repo: coasys/ad4m PR: 605
File: rust-executor/src/js_core/options.rs:59-68
Timestamp: 2025-06-05T11:39:48.641Z
Learning: In the rust-executor project, CUSTOM_DENO_SNAPSHOT.bin is a build-time generated artifact created by the generate_snapshot binary (with --features generate_snapshot). The file is not checked into source control but is created during the build process via pnpm build-deno-snapshot script and then included in subsequent builds via include_bytes! macro.

Applied to files:

  • bootstrap-languages/file-storage/hc-dna/build.sh
  • bootstrap-languages/agent-language/hc-dna/build.sh
  • bootstrap-languages/direct-message-language/hc-dna/build.sh
  • bootstrap-languages/p-diff-sync/hc-dna/build.sh
📚 Learning: 2025-09-15T17:50:36.722Z
Learnt from: lucksus
Repo: coasys/ad4m PR: 626
File: rust-executor/src/holochain_service/mod.rs:128-133
Timestamp: 2025-09-15T17:50:36.722Z
Learning: In the Holochain service signal processing loop in rust-executor/src/holochain_service/mod.rs, the tokio::select! loop with an unconditional sleep arm is intentionally designed to never reach the `else => break` branch. This keeps the loop alive indefinitely to handle streams from apps that may be installed later during the service lifetime, via the new_app_ids_receiver channel.

Applied to files:

  • rust-executor/src/holochain_service/mod.rs
🧬 Code graph analysis (7)
bootstrap-languages/agent-language/hc-dna/zomes/agent_store/src/utils.rs (1)
test-runner/example/languages/social-context.js (1)
  • LinkQuery (4016-4054)
bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/src/retriever/holochain.rs (1)
test-runner/example/languages/social-context.js (1)
  • LinkQuery (4016-4054)
bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/src/lib.rs (1)
bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/src/link_adapter/workspace.rs (2)
  • new (45-52)
  • new (101-113)
bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/src/telepresence/status.rs (1)
test-runner/example/languages/social-context.js (1)
  • LinkQuery (4016-4054)
bootstrap-languages/direct-message-language/hc-dna/zomes/direct-message/src/lib.rs (1)
test-runner/example/languages/social-context.js (1)
  • LinkQuery (4016-4054)
rust-executor/src/holochain_service/mod.rs (2)
rust-executor/src/holochain_service/interface.rs (2)
  • unpack_happ (229-237)
  • unpack_dna (209-217)
rust-executor/src/holochain_service/holochain_service_extension.rs (2)
  • unpack_happ (202-210)
  • unpack_dna (178-186)
bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/src/link_adapter/workspace.rs (1)
test-runner/example/languages/social-context.js (1)
  • LinkQuery (4016-4054)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Cursor Bugbot
🔇 Additional comments (42)
bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync_integrity/Cargo.toml (1)

16-19: Holochain dependency updates align with PR objectives.

All dependency versions have been correctly bumped to match the 0.6.0-rc.0 Holochain release cycle: hdi→0.7.0-rc.0, hdk→0.6.0-rc.0, holo_hash→0.6.0-rc.0, and holochain_serialized_bytes→=0.0.56 from registry. The branch references have been updated to 0.6.0-rc.0-coasys, and switching holochain_serialized_bytes to registry-based resolution improves reproducibility.

Verify that holochain_serialized_bytes version "=0.0.56" (from registry) is compatible with the RC versions of hdk/hdi, and that RC stability is acceptable for your project's deployment requirements.

rust-executor/src/mainnet_seed.json (1)

7-7: Verify IPFS content hashes correspond to updated bootstrap languages for Holochain 0.6.0-rc.0.

The updated hashes appear to be properly formatted IPFS v0 CIDs and align with the PR's goal of updating bootstrap language components for Holochain 0.6.0-rc.0 compatibility. However, ensure these specific hash values are correct and have been published to the network.

Please confirm:

  1. These IPFS hashes are accessible and contain the expected bootstrap language bytecode for Holochain 0.6.0-rc.0
  2. Any downstream systems or peer nodes using this seed file will correctly fetch and load these language components
  3. The replaced hashes (old knownLinkLanguages and directMessageLanguage) are no longer needed and have been retired from the active network

Also applies to: 9-9

bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/src/lib.rs (1)

27-32: LGTM! Correct API migration to HashSet.

The switch from BTreeSet to HashSet correctly adapts to the Holochain 0.6.0-rc.0 API change for GrantedFunctions::Listed. Since capability grants don't require ordering, HashSet is both semantically appropriate and more performant for this use case.

bootstrap-languages/p-diff-sync/hc-dna/workdir/dna.yaml (1)

14-14: Bundled → path field migration looks correct.

The transition from bundled to path keys aligns with the Holochain 0.6.0 mr_bundle format changes noted in the PR objectives. The YAML paths reference the expected wasm32-unknown-unknown release build artifacts and are consistent with similar changes across other bootstrap languages in this PR.

Also applies to: 18-18

bootstrap-languages/file-storage/hc-dna/workdir/dna.yaml (1)

1-1: Manifest format updates correctly aligned with Holochain 0.6.0-rc.0 spec.

The manifest_version downgrade (1→0) and bundled→path transitions are consistent with the mr_bundle YAML format changes documented in the PR objectives. WASM artifact paths are preserved correctly.

Also applies to: 8-8, 12-12

bootstrap-languages/direct-message-language/hc-dna/workdir/happ.yaml (1)

1-1: Consistent manifest format alignment across happ bundles.

Same well-executed manifest_version and bundled→path updates as other bootstrap language manifests. DNA reference path preserved correctly.

Also applies to: 10-10

bootstrap-languages/p-diff-sync/hc-dna/workdir/happ.yaml (1)

1-1: Consistent manifest format alignment.

Manifest updates (version 1→0, bundled→path) consistent with other bootstrap language bundles. DNA path ./perspective-diff-sync.dna preserved.

Also applies to: 10-10

bootstrap-languages/file-storage/hc-dna/build.sh (1)

2-2: Custom getrandom backend RUSTFLAGS correctly injected for WASM compilation.

The RUSTFLAGS configuration enables the custom getrandom backend required for WASM32 builds, aligning with the getrandom dependency strategy documented in the PR objectives. Environment variable approach is appropriate and preserves downstream packing steps.

bootstrap-languages/agent-language/hc-dna/zomes/agent_store/Cargo.toml (1)

16-16: Dependency upgrades and WASM configuration correctly coordinated.

All changes align with Holochain 0.6.0-rc.0 migration strategy:

  • getrandom 0.3 and custom backend rustflags are consistent with the custom getrandom backend requirements
  • hdk/holo_hash versions and branch references match the PR's Holochain fork
  • holochain_serialized_bytes pinned to =0.0.56 ensures reproducible builds
  • Path dependency to agent_store_integrity enables proper workspace coordination
  • Target-specific rustflags provides build-time redundancy with build.sh configuration

Also applies to: 18-18, 19-19, 20-20, 21-21, 23-24

bootstrap-languages/p-diff-sync/hc-dna/build.sh (1)

2-2: Custom getrandom backend RUSTFLAGS consistently applied.

Same pattern as file-storage build.sh. RUSTFLAGS correctly enable custom getrandom backend for wasm32 target. Downstream app and DNA packing steps remain unchanged and preserve build flow.

bootstrap-languages/direct-message-language/hc-dna/zomes/direct-message-integrity/Cargo.toml (1)

16-16: Integrity zome dependencies correctly aligned with Holochain 0.6.0-rc.0 release.

HDI upgrade to 0.7.0-rc.0, holo_hash addition, and holochain_serialized_bytes pinning all align with PR objectives. Branch references consistently target the Holochain fork (0.6.0-rc.0-coasys).

Also applies to: 17-17, 18-18

bootstrap-languages/agent-language/hc-dna/zomes/agent_store_integrity/Cargo.toml (1)

16-16: Integrity zome dependencies comprehensively upgraded for Holochain 0.6.0-rc.0 compatibility.

Both HDI and HDK present and upgraded correctly (0.7.0-rc.0 and 0.6.0-rc.0 respectively), along with holo_hash and pinned holochain_serialized_bytes (=0.0.56). Branch references consistently target 0.6.0-rc.0-coasys fork. Changes align across all zome manifests in the PR.

Also applies to: 17-17, 18-18, 19-19

bootstrap-languages/file-storage/hc-dna/zomes/file_storage/Cargo.toml (1)

20-27: Holochain dependency upgrade correctly configured.

The Cargo.toml updates align with the Holochain 0.6.0-rc.0 upgrade plan. The exact version pinning for holochain_serialized_bytes = "=0.0.56" is appropriate for RC stability, and the target-specific rustflags for WASM getrandom backend are properly configured.

One minor note: getrandom = { version = "0.3" } allows patch updates within 0.3.x. Verify this flexibility is intentional and won't cause compatibility issues if other dependencies constrain getrandom differently.

bootstrap-languages/agent-language/hc-dna/workdir/happ.yaml (1)

1-10: YAML manifest format updated per Holochain 0.6.0-rc.0 spec.

The manifest_version downgrade from '1' to '0' and the bundled → path field change are breaking format changes in Holochain 0.6.0-rc.0. The DNA reference path remains correct.

Confirm that manifest_version '0' is the correct value per the official Holochain 0.6.0-rc.0 spec (the downgrade is unusual and worth double-checking).

[scratchpad_end] -->

bootstrap-languages/agent-language/hc-dna/workdir/dna.yaml (1)

2-14: Manifest format updated for Holochain 0.6.0-rc.0 schema.

The manifest_version change and bundled → path field updates align with the new format. WASM paths are correctly preserved, pointing to standard wasm32-unknown-unknown release output locations.

Verify that the build process consistently outputs WASM binaries to ../target/wasm32-unknown-unknown/release/ for both agent_store_integrity.wasm and agent_store.wasm.

[scratchpad_end] -->

bootstrap-languages/agent-language/hc-dna/build.sh (1)

2-2: RUSTFLAGS correctly configured for custom getrandom backend.

The injection of RUSTFLAGS='--cfg getrandom_backend="custom"' is the correct approach for enabling the custom getrandom backend during WASM compilation, and the shell quoting is sound.

bootstrap-languages/direct-message-language/hc-dna/build.sh (1)

2-2: Consistent RUSTFLAGS configuration with agent-language.

The getrandom backend RUSTFLAGS are correctly applied, matching the pattern used in other bootstrap language build scripts.

bootstrap-languages/direct-message-language/hc-dna/workdir/dna.yaml (1)

2-14: Manifest schema updated consistently with other DNAs.

The manifest_version and bundled → path changes are applied uniformly. Zome dependencies and paths are correctly preserved.

bootstrap-languages/direct-message-language/hc-dna/zomes/direct-message/Cargo.toml (1)

17-26: Holochain dependencies upgraded consistently with coordinated PR changes.

The dependency updates (getrandom, hdk, holochain_serialized_bytes, holo_hash) and target-specific rustflags match the pattern applied across other bootstrap language zomes. The internal path dependency to direct-message-integrity remains stable.

bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/src/telepresence/status.rs (4)

68-69: LGTM! Correct API migration to LinkQuery pattern.

The migration from GetLinksInputBuilder to LinkQuery::try_new with GetStrategy::Network is correct for Holochain 0.6.0-rc.0. Error handling is proper, and the network strategy is appropriate for DHT-based DID link queries.


93-98: LGTM! Consistent API migration.

The LinkQuery migration is correctly applied with proper error propagation. The multi-line formatting maintains readability while following the new Holochain API pattern.


125-129: LGTM! API migration correctly applied.

The LinkQuery pattern is properly implemented for DID-to-agent key lookup, maintaining consistent error handling and network strategy across the module.


140-144: LGTM! Final API migration complete.

The LinkQuery pattern is correctly applied for agent-to-DID key lookup. All get_links calls in this file have been successfully migrated to the Holochain 0.6.0-rc.0 API.

bootstrap-languages/direct-message-language/hc-dna/zomes/direct-message/src/lib.rs (4)

13-13: API migration correctly applied.

The change from BTreeSet to HashSet aligns with the Holochain 0.6.0-rc.0 API requirements for GrantedFunctions::Listed. Since capability grants don't depend on iteration order, this change is functionally equivalent.


212-216: LinkQuery migration is correct.

The migration from GetLinksInputBuilder to LinkQuery::try_new() with chained .tag_prefix() properly maintains error handling and matches the new Holochain 0.6.0-rc.0 API pattern.


218-218: get_links call correctly updated.

The explicit GetStrategy::Network parameter correctly reflects the new API requirements and maintains the network-wide link retrieval behavior for inbox fetching.


231-231: delete_link call correctly updated.

The addition of GetOptions::network() parameter aligns with the new API requirements and maintains the network-wide link deletion behavior.

cli/mainnet_seed.json (2)

1-14: Valid JSON structure with consistent formatting.

The file maintains valid JSON syntax and hash reference format consistent across all language entries. The configuration structure is appropriate for a seed/bootstrap file.


7-7: Hash updates are consistent across mainnet seed files, but require external verification for IPFS validity and HDK compilation.

The updated hashes are properly synchronized:

  • Both cli/mainnet_seed.json and rust-executor/src/mainnet_seed.json contain identical hashes at lines 7 and 9
  • No stale references to old hash values remain
  • No conflicting bootstrap configurations in mainnet seeds

However, note that tests/js/bootstrapSeed.json contains different hashes (QmzSYwdo1HbQir61HG7xM1nBAuue5cAjTd7rKbP4d14bk1NgjKZ and QmzSYwdhFZ7wqrX7H2Ep7ZejpHUjZBDNibhACv5w93VKEauWcv9). Verify whether this test seed should also be updated to match mainnet.

Cannot verify offline:

  • IPFS hash resolvability (requires network access)
  • Whether hashes reference code actually compiled with HDK 0.6.0-rc.0 (requires build artifact inspection or source verification)
bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/src/link_adapter/snapshots.rs (1)

44-49: LGTM: Correct migration to LinkQuery API.

The migration from GetLinksInputBuilder to LinkQuery is implemented correctly, preserving the same tag prefix filtering and network retrieval strategy.

bootstrap-languages/agent-language/hc-dna/zomes/agent_store/src/utils.rs (1)

15-15: LGTM: Correct usage of new get_links API.

The migration to the new get_links(query, GetStrategy::Network) API is correct.

bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/src/link_adapter/workspace.rs (1)

666-671: LGTM: Correct migration to LinkQuery API.

The migration correctly preserves the snapshot tag prefix filtering and network retrieval strategy while adapting to the new LinkQuery-based API.

bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/src/retriever/holochain.rs (2)

103-107: LGTM: Correct migration to LinkQuery API.

The migration from GetLinksInputBuilder to LinkQuery is implemented correctly, maintaining the same retrieval behavior for latest revision links.


170-175: LGTM: Correct migration to LinkQuery API.

The migration correctly preserves the active_agent tag prefix filtering and network retrieval strategy while adapting to the new LinkQuery-based API.

bootstrap-languages/file-storage/hc-dna/zomes/integrity/Cargo.toml (3)

18-21: Holochain dependency versions are RC pre-releases.

Lines 18–21 update holochain-related crates (hdi, hdk, holo_hash) to 0.6.0-rc.0 and 0.7.0-rc.0 RC versions from the coasys fork. While intentional per the PR objectives, confirm this upgrade path has been validated and that RC stability is acceptable for your release cycle.


16-16: Getrandom 0.3 compatibility verified. Getrandom v0.3 supports a custom backend for wasm32 (and all targets), and the configuration at lines 16 and 23–24 is compatible. No changes needed.


16-21: holochain_serialized_bytes 0.0.56 is available on crates.io; dependency changes are verified.

Line 20: getrandom 0.3 supports custom backend configuration for wasm32 targets, and the version of holochain_serialized_bytes specified has been confirmed as published. The dependency rationalization and upgrade path are sound.

bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/Cargo.toml (4)

24-26: Getrandom migration to 0.3 with js-sys looks good.

The migration from getrandom 0.2 (with js features) to 0.3 (relying on js-sys 0.3.82 for WASM bindings) aligns well with the PR's getrandom backend customization strategy. The addition of js-sys is the correct approach for handling JS bindings in newer getrandom versions.


30-30: Pinned holochain_serialized_bytes version is appropriate.

The explicit pinning of holochain_serialized_bytes = "=0.0.56" is correctly preserved and matches the PR requirement for compatibility across the Holochain ecosystem dependencies.


35-36: No issues found. Rustflags configuration is syntactically correct and properly integrated.

The verification confirms the [target.wasm32-unknown-unknown] section with getrandom_backend="custom" is correctly formatted and consistently used across the codebase. The cfg is properly defined in the build pipeline—build scripts explicitly pass this flag via RUSTFLAGS during compilation for wasm32-unknown-unknown targets.


19-19: I need to search for the specific changelog information on crates.io for the graphviz-rust crate:

Let me search for the GitHub repository and release notes:

Let me search more specifically for the besok/graphviz-rust release history:

Let me search for the CHANGELOG directly:

Verify graphviz-rust 0.9.6 compatibility before merging.

The upgrade from 0.2.1 to 0.9.6 represents a significant major version jump. While the library appears actively maintained and recent web searches don't reveal documented breaking changes, a comprehensive changelog or release notes for the intervening versions is not readily available online. Verify that the current crate's usage of graphviz-rust APIs (particularly exec(), parse(), PrinterContext, and attribute structures) remains compatible with 0.9.6 by:

  • Checking the repository's release notes or CHANGELOG for versions 0.3 through 0.9
  • Running tests on the perspective_diff_sync zome after the upgrade
  • Confirming no API signature changes in key exported functions
rust-executor/Cargo.toml (1)

98-101: Ensure Go toolchain is available for go-pion backend.

Enabling the backend-go-pion feature switches tx5 over to the Go-based WebRTC backend, which depends on the Go toolchain during builds. Please confirm our CI and release builders have Go installed, or reconsider sticking with the default libdatachannel backend to avoid unexpected build failures.(docs.rs)

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c08a201 and ee9d7c2.

📒 Files selected for processing (1)
  • .circleci/config.yml (2 hunks)
🔇 Additional comments (1)
.circleci/config.yml (1)

26-26: Cache key updates appropriately reflect Rust version change.

Updating cache keys from -v2 to -1.88 correctly invalidates existing caches tied to the previous Rust version. This ensures CI builds use fresh artifacts compatible with Rust 1.88.

Also applies to: 56-56

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
rust-executor/src/perspectives/sdna.rs (2)

113-195: Excellent refactoring with proper empty JSON support!

The extraction of JSON parser code into a dedicated public function improves maintainability and testability. The empty object (lines 125-126) and empty array (lines 146-147) clauses are correctly placed before non-empty variants, addressing the previous critical issue. The use of cuts and list-based key-value pairs aligns well with scryer-prolog 0.10.

Consider enhancing number parsing for full JSON spec compliance.

The current number parser (lines 176-188) handles digits and decimal points but doesn't support negative numbers (e.g., -1, -2.5) or scientific notation (e.g., 1e10, 1.5e-10). While this may be sufficient for current use cases, consider enhancing it for broader JSON compatibility:

 json_number(Number) -->
-    number_sequence(Chars),
+    optional_minus(MinusChars),
+    number_sequence(Chars),
+    optional_exponent(ExpChars),
-    { number_chars(Number, Chars) }.
+    { append([MinusChars, Chars, ExpChars], AllChars), number_chars(Number, AllChars) }.
+
+optional_minus(['-']) --> "-", !.
+optional_minus([]) --> [].
+
+optional_exponent(['e'|Exp]) --> "e", exponent_part(Exp), !.
+optional_exponent(['E'|Exp]) --> "E", exponent_part(Exp), !.
+optional_exponent([]) --> [].
+
+exponent_part([Sign|Digits]) --> 
+    ("+"; "-"), { Sign = '+' }, !,
+    number_sequence(Digits).
+exponent_part(Digits) --> number_sequence(Digits).

Note: This is a future enhancement suggestion and not blocking given the PR's focus on Prolog compatibility.


672-882: Excellent test coverage for JSON parsing!

The comprehensive test module validates the JSON parser integration with the Prolog engine across multiple scenarios: simple DCGs, empty objects/arrays (with and without whitespace), and non-empty structures. The use of the actual PrologEngine provides valuable integration testing.

Consider verifying actual parsed values in tests.

While the tests correctly verify that parsing succeeds, they don't assert the actual values of the parsed results (e.g., that Dict is an empty list [] for "{}"). Enhancing assertions would catch subtle bugs in the parser logic:

// Example enhancement for test_empty_json_object_parsing
match result {
    Ok(Ok(QueryResolution::Matches(bindings))) => {
        // Verify that Dict is bound to empty list
        assert!(bindings.iter().any(|b| {
            b.get("Dict").map_or(false, |v| v == "[]")
        }), "Dict should be empty list");
        println!("✅ Empty JSON object parsing succeeded");
    }
    Ok(Ok(QueryResolution::True)) => {
        println!("✅ Empty JSON object parsing succeeded");
    }
    _ => panic!("Empty JSON object parsing failed: {:?}", result),
}

This is optional and would require understanding the binding format from QueryResolution::Matches.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1278b23 and 927a3da.

📒 Files selected for processing (1)
  • rust-executor/src/perspectives/sdna.rs (4 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: lucksus
Repo: coasys/ad4m PR: 630
File: bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/Cargo.toml:28-29
Timestamp: 2025-11-13T12:18:07.265Z
Learning: For Holochain 0.6.0-rc.0 (branch 0.6.0-rc.0-coasys), the correct and compatible HDI/HDK pairing is: hdi version 0.7.0-rc.0 and hdk version 0.6.0-rc.0. HDI is intentionally one minor version ahead of HDK in this release.
Learnt from: lucksus
Repo: coasys/ad4m PR: 630
File: bootstrap-languages/p-diff-sync/hc-dna/workdir/dna.yaml:2-2
Timestamp: 2025-11-13T12:17:37.333Z
Learning: For Holochain 0.6.0-rc.0, the correct manifest_version in DNA YAML files (dna.yaml) is 0, not 1. The mr_bundle library in Holochain 0.6.0-rc.0 errors when manifest_version is set to 1. The versioning appears to have been reset in this release.
🧬 Code graph analysis (1)
rust-executor/src/perspectives/sdna.rs (1)
rust-executor/src/prolog_service/engine.rs (10)
  • new (37-44)
  • spawn (46-238)
  • e (79-79)
  • e (84-84)
  • e (121-121)
  • e (127-127)
  • e (189-189)
  • e (193-193)
  • e (206-206)
  • e (209-209)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Cursor Bugbot
🔇 Additional comments (2)
rust-executor/src/perspectives/sdna.rs (2)

494-494: LGTM!

Clean integration of the centralized JSON parser code, eliminating duplication and improving maintainability.


509-538: Excellent fix for the type safety issue!

The addition of the is_list(Value) guard at line 535 correctly prevents type errors when literal_from_url/3 returns scalar values (numbers/booleans). This directly addresses the previous critical issue where phrase/2 would throw type_error(list, _) on non-list inputs.

The refactoring into three explicit cases (resolve_property_value/5) with helper predicates (resolve_property_ensure_chars/2, resolve_property_extract_json_or_value/2) significantly improves code clarity and maintainability compared to the previous implementation.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
rust-executor/src/perspectives/sdna.rs (1)

534-537: Consider explicit guard over broad exception catching.

The catch/3 with a wildcard pattern successfully prevents crashes when Value is a non-list scalar, but an explicit is_list(Value) guard would be cleaner and more performant by failing fast without invoking phrase/2.

Apply this diff for a more explicit approach:

-    resolve_property_extract_json_or_value(Value, Data) :-
-        catch(json_property(Value, "data", Data), _, fail),
-        !.
+    resolve_property_extract_json_or_value(Value, Data) :-
+        is_list(Value),
+        json_property(Value, "data", Data),
+        !.
     resolve_property_extract_json_or_value(Value, Value).
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 927a3da and 35d1883.

📒 Files selected for processing (1)
  • rust-executor/src/perspectives/sdna.rs (4 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: lucksus
Repo: coasys/ad4m PR: 630
File: bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/Cargo.toml:28-29
Timestamp: 2025-11-13T12:18:07.265Z
Learning: For Holochain 0.6.0-rc.0 (branch 0.6.0-rc.0-coasys), the correct and compatible HDI/HDK pairing is: hdi version 0.7.0-rc.0 and hdk version 0.6.0-rc.0. HDI is intentionally one minor version ahead of HDK in this release.
Learnt from: lucksus
Repo: coasys/ad4m PR: 630
File: bootstrap-languages/p-diff-sync/hc-dna/workdir/dna.yaml:2-2
Timestamp: 2025-11-13T12:17:37.333Z
Learning: For Holochain 0.6.0-rc.0, the correct manifest_version in DNA YAML files (dna.yaml) is 0, not 1. The mr_bundle library in Holochain 0.6.0-rc.0 errors when manifest_version is set to 1. The versioning appears to have been reset in this release.
🧬 Code graph analysis (1)
rust-executor/src/perspectives/sdna.rs (1)
rust-executor/src/prolog_service/engine.rs (10)
  • new (37-44)
  • spawn (46-238)
  • e (79-79)
  • e (84-84)
  • e (121-121)
  • e (127-127)
  • e (189-189)
  • e (193-193)
  • e (206-206)
  • e (209-209)
🔇 Additional comments (3)
rust-executor/src/perspectives/sdna.rs (3)

113-195: LGTM! Empty JSON support properly implemented.

The addition of explicit empty dict (lines 125-126) and empty array (lines 146-147) clauses addresses the previous review concern. Placing them before the non-empty variants ensures correct parsing order. The comprehensive JSON parser with deterministic DCG rules using cuts is well-structured.


509-531: Well-structured refactoring with clear separation of concerns.

The helper predicates cleanly separate the three property resolution cases with explicit cuts for determinism. The atom-to-chars conversion (lines 510-514) and literal URL prefix checking (line 520) are idiomatic and correct.


671-881: Excellent test coverage for JSON parsing and DCG rules.

The comprehensive test suite validates empty JSON support (both objects and arrays, with and without whitespace), non-empty JSON parsing, and basic DCG functionality. The helper function get_json_parser_for_test() (lines 679-686) properly sets up the test environment with required libraries. Integration testing with PrologEngine provides strong confidence in the implementation.

Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR is being reviewed by Cursor Bugbot

Details

You are on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

Bug: Cache Path Mismatch: Storage Ineffective

The cache path uses file-storage-language but should be file-storage to match the cache key on line 130 which references bootstrap-languages/file-storage/hc-dna/Cargo.lock. This mismatch will cause the cache to save to the wrong directory, making it ineffective.

.circleci/config.yml#L131-L132

ad4m/.circleci/config.yml

Lines 131 to 132 in d56dcef

paths:
- ./bootstrap-languages/file-storage-language/hc-dna/target

Fix in Cursor Fix in Web


Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
rust-executor/src/perspectives/sdna.rs (1)

113-274: JSON parser DCGs look good; consider broadening number support

The new DCGs nicely fix empty {} / [] handling and support nested objects via list-based key–value pairs, matching the new tests and previous review feedback. One limitation: json_number/1 + number_sequence/1 only accept unsigned integers and simple fractional forms (0-9 and .), so JSON like -1 or 1e3 will currently fail to parse. If you expect negative or exponential numbers in literal://json: payloads, it’s worth extending number_sequence/1 and adding tests for those cases.

🧹 Nitpick comments (3)
rust-executor/src/perspectives/utils.rs (1)

36-61: LGTM with optional improvement for debugging.

The implementation correctly converts dict([Key-Value, ...]) Prolog structures to JSON objects. The pattern matching logic is sound, error handling uses safe fallbacks, and the approach is consistent with existing converters like convert_assoc_to_json.

Optional: Consider debug logging for invalid input shapes.

The function silently returns "{}" when:

  • args.len() != 1 (line 38-40)
  • args[0] is not a Term::List (implicit fallthrough)

While this is consistent with similar helpers in the file, adding debug logging could help diagnose issues during development:

 fn convert_dict_to_json(args: &[Term]) -> String {
     // args should be [PairsList] where PairsList is a list of Key-Value pairs
     if args.len() != 1 {
+        log::debug!("convert_dict_to_json: expected 1 argument, got {}", args.len());
         return "{}".to_string();
     }
 
     let mut map = JsonMap::new();
 
     if let Term::List(pairs) = &args[0] {
         // ... existing logic
+    } else {
+        log::debug!("convert_dict_to_json: expected Term::List, got {:?}", &args[0]);
     }
 
     JsonValue::Object(map).to_string()
 }
rust-executor/src/perspectives/sdna.rs (2)

575-625: Resolve-path refactor reads clearly; consider a small guard on URI types

The three-case split in resolve_property/5 via resolve_property_value/5 and the resolve_property_extract_json_or_value/2 helper makes the literal vs. URI vs. non-resolvable behaviour much easier to follow, and the catch(json_property/3,_,fail) avoids crashes on non-JSON literals.

One minor robustness suggestion: resolve_property_ensure_chars/2 falls through to resolve_property_ensure_chars(Input, Input) for any non-atom term, which then flows into append("literal://", _, PropertyUriChars) and literal_from_url/3. If a future SDNA flow ever passes a non-list term here (e.g. a structured term instead of an atom or char list), you’ll get a type error from the list predicates. If that’s a realistic scenario, you could add an explicit list guard (or is_list/1 + fallback to the “pass-through URI” case) to fail fast rather than raising.


759-969: Strengthen tests with explicit assertions on query results and parsed values

The new tokio tests are a good sanity check that Scryer can load the JSON parser and that the empty/non-empty object/array DCGs succeed. A couple of improvements would make them more diagnostic:

  • test_simple_dcg currently only prints the query result; asserting on QueryResolution (e.g. expecting True) would turn it into a real regression test.
  • For the JSON tests, you only assert that the parse succeeds. If feasible, also assert on the actual Dict / Array contents (e.g. Dict == [] for "{}", Array == [1,2,3] for "[1, 2, 3]") via Prolog queries so that structural regressions in the DCGs are caught as well.

These are incremental changes but will make future failures much easier to interpret.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 35d1883 and d56dcef.

📒 Files selected for processing (2)
  • rust-executor/src/perspectives/sdna.rs (4 hunks)
  • rust-executor/src/perspectives/utils.rs (2 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: lucksus
Repo: coasys/ad4m PR: 630
File: bootstrap-languages/p-diff-sync/hc-dna/zomes/perspective_diff_sync/Cargo.toml:28-29
Timestamp: 2025-11-13T12:18:07.265Z
Learning: For Holochain 0.6.0-rc.0 (branch 0.6.0-rc.0-coasys), the correct and compatible HDI/HDK pairing is: hdi version 0.7.0-rc.0 and hdk version 0.6.0-rc.0. HDI is intentionally one minor version ahead of HDK in this release.
Learnt from: lucksus
Repo: coasys/ad4m PR: 630
File: bootstrap-languages/p-diff-sync/hc-dna/workdir/dna.yaml:2-2
Timestamp: 2025-11-13T12:17:37.333Z
Learning: For Holochain 0.6.0-rc.0, the correct manifest_version in DNA YAML files (dna.yaml) is 0, not 1. The mr_bundle library in Holochain 0.6.0-rc.0 errors when manifest_version is set to 1. The versioning appears to have been reset in this release.
🧬 Code graph analysis (1)
rust-executor/src/perspectives/sdna.rs (1)
rust-executor/src/prolog_service/engine.rs (10)
  • new (37-44)
  • spawn (46-238)
  • e (79-79)
  • e (84-84)
  • e (121-121)
  • e (127-127)
  • e (189-189)
  • e (193-193)
  • e (206-206)
  • e (209-209)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Cursor Bugbot
🔇 Additional comments (1)
rust-executor/src/perspectives/sdna.rs (1)

573-574: Good centralization of JSON parser loading

Extending get_static_infrastructure_facts() with get_json_parser_code() keeps the production Prolog environment and the test helper in sync, avoiding drift between the embedded JSON parser and what the engine actually loads.

Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Cache Path Mismatch: Unnecessary Rebuilds

The cache path for file-storage uses file-storage-language directory but the cache key references file-storage. This mismatch means the cache will be saved to the wrong path (./bootstrap-languages/file-storage-language/hc-dna/target) instead of the correct path (./bootstrap-languages/file-storage/hc-dna/target), causing cache misses and unnecessary rebuilds.

.circleci/config.yml#L129-L132

ad4m/.circleci/config.yml

Lines 129 to 132 in d4cc9ad

- save_cache:
key: file-storage-rust-cache-{{ checksum "bootstrap-languages/file-storage/hc-dna/Cargo.lock" }}
paths:
- ./bootstrap-languages/file-storage-language/hc-dna/target

Fix in Cursor Fix in Web


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants