← Files RiversideARCHIVED FILE

skills/content-discovery/references/hierarchy-navigation.md

5.62 KB · Sep 30, 2026 · 23:19 UTC

↓ Download file

# Hierarchy navigation

Browsing the hierarchy, determining which item is newest, paging a list to
completeness, and getting a download link.

Page sizes, offsets, limits, paged-response and continuation shapes, and which
fields are required or nullable come from the live schema of the tool you are
calling, and the main skill file's rules govern everything here. This file covers
only the choices those sources cannot make for you.

## Traversal

There is no identity or "me" tool on this surface. Start from a search, or from
`platform_list_productions` / `platform_list_studios`.

1. `platform_list_studios` — optionally scoped to a production; pick a studio.
   `platform_get_production` returns one production with its studios, and
   `platform_get_studio` returns one studio with its parent production.
2. `platform_list_projects` — optionally scoped to a studio; pick a project.
3. `platform_get_project` — **the cheap fan-out.** It returns that project's
   recordings *and* its edits in a single call. Prefer it over calling
   `platform_list_recordings` and `platform_list_edits` separately.
4. Drill into the item itself: `platform_get_recording`, `platform_get_edit`
   (which also names its source recording and its exports),
   `platform_list_exports`, `platform_get_export`.

Use a scoping parameter when the request is genuinely scoped to that container,
and leave it out when it is not.

## Paging to completeness

These tools return one page at a time alongside a count of everything that
matched, and paging is by offset. So:

- **Default to the first page.** Page further only when the request needs more
  than what came back.
- **When the answer depends on the whole set — "latest", "how many", "all of
  my…" — keep requesting successive pages until what you have collected accounts
  for the full reported count.** Stopping early yields a confidently wrong
  answer rather than an obviously partial one.
- Read the current schema for the paging parameters and their bounds. Do not
  assume a page size, and do not assume the response shape is what it once was.
- Offsets run over a backend-ordered list, so a given offset is not guaranteed
  to name the same item if the underlying data changes between calls. When
  completeness matters, page straight through without doing other work in
  between.
- If paging to completeness would be slow — a large archive, a studio with many
  projects — say so and offer to narrow the scope first, rather than silently
  truncating.

## Finding the latest of something

**Do not assume the first item returned is the latest.** Inspect the live schema
for any ordering controls. Unless the response itself guarantees the ordering
the user needs, collect the full candidate set and compare `createdAt` across it
yourself.

**Drop soft-deleted edits.** `platform_list_edits` can return edits marked
`deleted: true`. Exclude them before comparing, unless the user is specifically
asking about deleted edits.

The latest edit *within a studio* is the case that catches people out, because
`platform_list_edits` scopes by project and not by studio:

1. `platform_list_projects` for that `studioId`, paged to completion — every
   project in the studio.
2. `platform_list_edits` for each of those projects, each paged to completion.
3. Drop every edit marked `deleted: true`.
4. Take the highest `createdAt` across all of what remains.

**Do not shortcut this with an unscoped edit list.** The globally newest edit
may belong to a different studio entirely, which leaves you holding no candidate
in the studio the user actually asked about — and nothing warns you that it
happened.

The same shape applies to "yesterday's recording". Resolve what "yesterday"
means in the **user's local timezone** first — use their configured timezone, or
ask — because a recording timestamped just after midnight UTC can be the
previous evening locally. Then page `platform_list_recordings` to collect every
recording on that local date, and if more than one falls on it, show them with
their times and let the user choose.

## Getting a download link

1. Resolve the recording, confirm its `status`, and capture its `projectId`.
2. `platform_get_project` — recordings and edits are siblings under a project,
   and this returns both. Confirm candidate edits came from the recording you
   mean with `platform_get_edit`. Continue only when exactly one matches. If
   several do, show their available identifying details and wait for the user
   to select the edit.
3. `platform_list_exports` scoped to that `editId` — pass the edit's id, not the
   recording's. Leave the scope off and you get exports across every edit rather
   than the one you want.
4. A returned export record is not necessarily a finished file. Confirm ready
   candidates with `platform_get_export`. Continue only when exactly one is
   ready; if several are, show their available identifying details and wait for
   the user to select the export.
5. Take the selected ready export's download URL.
6. Share the link only once that export is ready.

## Transcripts: prose here, cut-grade elsewhere

`platform_get_transcript` returns dialogue prose with one timestamp per
sentence. Those timestamps are session-relative, except for a speaker who has no
offset applied: that speaker is timed from their own track start, so their
timestamps are not comparable with the other speakers'. Prose timestamps are for
quoting and orienting, not for cutting.

For word-level times or exact cuts, stop here and hand off to the video-editing
skill, which reads the edit with `editing_read_aligned_transcript` and resolves
the selection through `editing_resolve_transcript_selection`. Do not attempt
that sequence from this skill.

SHA-256: 6cc5732844951274047786cb584bd3a8aad8febd750548f312334a6bbcf3e76a