You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Lifts the `getFullPaths` definition verbatim from commit ecf85df of
Sachin's spec-alignment PR [1].
The only departure from the source is renumbering: Sachin places
`getFullPaths` under `RTLO3 LiveObject properties` as `RTLO3g`;
this commit places it under `RTLO4 LiveObject methods` as `RTLO4f`
(with sub-clauses `RTLO4f1`-`RTLO4f7`) since `getFullPaths` is a
function, not a property. Cross-references in RTO24b1 and RTLO3f
are updated to match.
Lawrence has not reviewed the lifted content yet; the imported
clauses retain Sachin's capitalised RFC 2119 keywords and the
NetworkX references, both of which may be tightened in follow-up
commits.
[1] #480
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: specifications/objects-features.md
+8-2Lines changed: 8 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -368,8 +368,14 @@ Objects feature enables clients to store shared data as "objects" on a channel.
368
368
-`(RTLO4e3b)` This clause has been replaced by [RTLO6b](#RTLO6b)
369
369
-`(RTLO4e3b1)` This clause has been replaced by [RTLO6b1](#RTLO6b1)
370
370
-`(RTLO4e4)` Set the data for the `LiveObject` to a zero-value, as described in [RTLC4](#RTLC4) or [RTLM4](#RTLM4) depending on the object type
371
-
-`(RTLO4f)` protected `getFullPaths` - returns the set of paths in the LiveObjects tree at which this `LiveObject` is currently located. Each path is an ordered list of string segments from the root `LiveMap`. The same `LiveObject` may be reachable from multiple paths (e.g. when it is referenced by more than one map entry) or from zero paths (e.g. when it is not a descendant of the root). Used by path-based subscription dispatch ([RTO24b](#RTO24b))
372
-
-`(RTLO4f1)` TODO: The procedure for computing the set of paths is to be specified separately
371
+
-`(RTLO4f)` internal `getFullPaths` function - returns the list of distinct paths from the root `LiveMap` (objectId `root`) to this `LiveObject`, computed by traversing `parentReferences` upward. Each returned path is an ordered sequence of keys from `root` to this `LiveObject`.
372
+
-`(RTLO4f1)``getFullPaths` MUST be implemented as an enumeration of all *simple paths* from this `LiveObject` to the root `LiveMap` over the inverse of the `parentReferences` graph (i.e. walking child → parent). A *simple path* is a path along which no `LiveObject` appears more than once. This is the standard graph problem, typically solved by a depth-first traversal with path-local backtracking equivalent to NetworkX's `all_simple_paths`. Implementation should choose iterative DFS with explicit stack (easier to read and debugging).
373
+
-`(RTLO4f2)` If this `LiveObject` is the root `LiveMap` (objectId `root`), the returned list MUST contain exactly one path, and that path MUST be empty (zero key segments). This makes the root reachable from itself via the empty key sequence
374
+
-`(RTLO4f3)` If this `LiveObject` is not the root `LiveMap` and has no entries in its `parentReferences` at the time of the call (e.g. orphaned, or not yet reachable from root), the returned list MUST be empty
375
+
-`(RTLO4f4)` While traversing paths, suppress cyclic paths whenever a sibling branch had already revisited the same node. Reference behaviour on cyclic graphs is given by NetworkX's `all_simple_paths`, which implementations MAY consult for worked examples
376
+
-`(RTLO4f5)` When a single parent `LiveMap` references this `LiveObject` at multiple keys, the returned list MUST contain one distinct path per such key, each ending at the corresponding key
377
+
-`(RTLO4f6)` When this `LiveObject` is reachable via multiple distinct ancestor paths (either because it has multiple parents in `parentReferences`, or because any ancestor on the way to root itself has multiple paths to root), the returned list MUST contain one path per distinct ancestor path
378
+
-`(RTLO4f7)` The order of paths in the returned list is not mandatory. Implementations MAY return paths in any order; callers requiring a stable order MUST sort the result themselves
373
379
-`(RTLO5)` An `OBJECT_DELETE` operation can be applied to a `LiveObject` in the following way:
0 commit comments