-
Notifications
You must be signed in to change notification settings - Fork 3
Reader prerequisites: consume canonical Lync 0.4.3 presentation #80
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
2d87e28
12cba6f
173cdbc
fdedaf8
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| --- | ||
| id: tex-q3ad | ||
| status: closed | ||
| deps: [] | ||
| links: [] | ||
| created: 2026-08-02T10:15:37Z | ||
| type: task | ||
| priority: 0 | ||
| assignee: deepfates | ||
| external-ref: beh-wo5b | ||
| tags: [behold, lync, reader] | ||
| --- | ||
| # Read Behold null cognition as a private-life event | ||
|
|
||
| Consume Lync's additive behold.entity-cognition-turn.v1 presenter so Textile shows admitted perception plus the resident's explicit no-bodily-action choice without fabricating an action or outcome. | ||
|
|
||
| ## Acceptance Criteria | ||
|
|
||
| The checksum-pinned Lync candidate is updated, raw and indexed resident reading use the shared presenter, a focused Textile regression retains source identity and absent consequence fields, and full verify passes. | ||
|
|
||
|
|
||
| ## Notes | ||
|
|
||
| **2026-08-02T10:15:42Z** | ||
|
|
||
| Vendored exact Lync 860aa549... archive dad3cff0..., updated provenance/docs, and focused raw reader regression passes 28/28. Pending full Textile verify. | ||
|
|
||
| **2026-08-02T10:16:18Z** | ||
|
|
||
| Full Textile verify passes: lint, 228 tests plus one opt-in scale skip, and both production builds. The installed physical package is the exact checksum-pinned Lync candidate. |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -23,6 +23,17 @@ interface StoryTextProps { | |
| } | ||
|
|
||
| const STORY_PATH_WINDOW_SIZE = 48; | ||
| const STORY_TIME_SEAM_MS = 5 * 60 * 1000; | ||
|
|
||
| function elapsedTimeLabel(elapsedMs: number): string { | ||
| const totalMinutes = Math.floor(elapsedMs / 60_000); | ||
| const days = Math.floor(totalMinutes / (24 * 60)); | ||
| const hours = Math.floor((totalMinutes % (24 * 60)) / 60); | ||
| const minutes = totalMinutes % 60; | ||
| if (days > 0) return `${days}d${hours > 0 ? ` ${hours}h` : ""} later`; | ||
| if (hours > 0) return `${hours}h${minutes > 0 ? ` ${minutes}m` : ""} later`; | ||
| return `${minutes}m later`; | ||
| } | ||
|
|
||
| interface StoryNodeProseProps { | ||
| text: string; | ||
|
|
@@ -215,6 +226,14 @@ export function StoryText({ | |
| {visiblePath.map((segment, visibleIndex) => { | ||
| const index = windowStart + visibleIndex; | ||
| const previous = currentPath[index - 1]; | ||
| const elapsedMs = | ||
| previous?.createdAt !== undefined && segment.createdAt !== undefined | ||
| ? segment.createdAt - previous.createdAt | ||
| : null; | ||
| const timeSeam = | ||
| showTurnBoundaries && elapsedMs !== null && elapsedMs >= STORY_TIME_SEAM_MS | ||
| ? elapsedTimeLabel(elapsedMs) | ||
| : null; | ||
| const seam = | ||
| !showTurnBoundaries && previous | ||
| ? storySeam(previous.text, segment.text) | ||
|
|
@@ -253,6 +272,14 @@ export function StoryText({ | |
| data-node-id={segment.id} | ||
| data-source-text-length={segment.text.length} | ||
| > | ||
| {timeSeam ? ( | ||
| <span | ||
| className="story-time-seam" | ||
| title={`${new Date(previous!.createdAt!).toISOString()} → ${new Date(segment.createdAt!).toISOString()}`} | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Reject or suppress out-of-range timestamps before calling Useful? React with 👍 / 👎. |
||
| > | ||
| {timeSeam} | ||
| </span> | ||
| ) : null} | ||
| {seam} | ||
| <StoryNodeProse | ||
| text={body} | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Only calculate this marker when both adjacent values are known source-event times. On a reopened kept-context artifact,
projectRawLyncFileassigns a carried local turn'screatedAtfromlocal.keepEvent.at, while its source parent retains the source event time; this code therefore labels the interval between the source event and a later curation action as if it were the elapsed time before the local turn, potentially showing a large but fabricated narrative discontinuity.Useful? React with 👍 / 👎.