gitoriaLog in with ident

notes

All repositories: gitoria

ReadmeCodePull requestsReleasesTicketsSettings
Commit1ca2f34d1ca2f34dantcolony#40: history (LOG.md), worker briefs (missions/) and reports moved here from antcolony, numbered per project; old numbers in antcolony docs/mission-map.mdmre1ca2f34d/plugins/data/server.hl

2.6 KB

  1. \* hl:data — NEED EVALUATION, the one implementation every realm edge uses.
  2. A component's need is a member whose initializer calls a provider class
  3. (SPEC.md §9.2); the graph publishes each as { key, provider, method, args,
  4. project }. Evaluating one is: resolve the arguments against the caller's
  5. context — a folded constant, a route group's member, or a `session`
  6. field — call the provider method, and take the projected field. hl:web did
  7. this per request and per push; hl:ipc does it per peer push. It lived in
  8. hl:web until the second edge existed (2026-09-01), which is when "shared"
  9. stopped being a word and became this plugin. *\
  10. \* Every need of one component, against the provider instances of the calling
  11. edge. One memo per evaluation: two needs fed by the same call cost ONE call. *\
  12. runNeeds(
  13. Hybrid needs \\ the graph's need list for the component
  14. &providers \\ class name → provider instance (the edge module's)
  15. &params \\ route groups; {} for a peer that matched no route
  16. &sdata \\ the session bag; {} for a peer with no session
  17. ) {
  18. let out = {}
  19. let memo = {}
  20. for (need of needs) {
  21. out[need.key] = runNeed(&need, &providers, &params, &sdata, &memo)
  22. }
  23. return out
  24. }
  25. \* One need: the value its MEMBER holds. `need.project` is the field taken off
  26. the returned hybrid ("" = the member IS the return value). A provider read
  27. answers for null arguments (the 074 contract), so an anonymous caller
  28. evaluates the same needs and simply sees nothing of anyone. *\
  29. runNeed(&need, &providers, &params, &sdata, &memo) {
  30. let provider = providers[need.provider]
  31. if (provider == null) {
  32. return null
  33. }
  34. let args = []
  35. for (a of need.args) {
  36. if (a.group != null) {
  37. args[] = params[a.group]
  38. } else if (a.session != null) {
  39. if (a.session.length == 0) {
  40. args[] = sdata
  41. } else {
  42. args[] = sdata[a.session]
  43. }
  44. } else {
  45. args[] = a.value
  46. }
  47. }
  48. let ck = need.provider + "." + need.method + "(" + JSON.stringify(args) + ")"
  49. // a call that ANSWERED null is simply not memoized — repeating it is correct
  50. let result = memo[ck]
  51. if (result == null) {
  52. result = callProvider(&provider, need.method, &args)
  53. memo[ck] = result
  54. }
  55. if (need.project.length == 0) {
  56. return result
  57. }
  58. if (result == null) {
  59. return null
  60. }
  61. return result[need.project]
  62. }
  63. // The provider call itself — the method name is DATA, so the call is computed.
  64. callProvider(&provider, method, &args) {
  65. if (args.length == 0) {
  66. return provider[method]()
  67. }
  68. if (args.length == 1) {
  69. return provider[method](args[0])
  70. }
  71. if (args.length == 2) {
  72. return provider[method](args[0], args[1])
  73. }
  74. return provider[method](args[0], args[1], args[2])
  75. }

Branches

Latest commits

  • 1ca2f34dantcolony#40: history (LOG.md), worker briefs (missions/) and reports moved here from antcolony, numbered per project; old numbers in antcolony docs/mission-map.mdmre
  • 2bebebdanotes: Hybriel master ff51cf46 (re-vendor round)mre
  • 3eff126dnotes#3: installable app (manifest + own icon/favicon; notes' own sw.js kept)mre
  • 9883c540deploy.sh: back up live storage/.sessions/.env before every deploy (newest 5 kept)mre
  • eee693b8deploy.sh: never send .git or .gitignore to Byrodinmre
  • c8904061State of 2026-09-27, before the move to gitoriamre