Skip to content

quiet-hours: the page ignores the quietUnchecked flag the doc promises, and the summary says "team clock" where the check uses the task's own zone #1199

Closed

Description

@Birfy

Two non-blocking notes from the #1193 review (#1166, merged as 7d2c0350e3), kept as one card because both live in the same quiet-hours section and one diff settles both. Anchors are on main 7d2c0350e3.

1. quietUnchecked is computed twice, and the page never reads the view's copy

  • core/src/host/schedules.js:327 puts the flag on the view: { available: true, tasks, quietHours, ...(unchecked ? { quietUnchecked: true } : {}) }.
  • core/src/client/schedules.js:263 ignores it and recomputes its own predicate from the task list: const unchecked = view.tasks.some(task => task.kind === 'every' || task.kind === 'cron'), rendered at :292-293.
  • docs/subsystems/core-host.md:382 says "The view carries quietUnchecked: true … and the page renders that as one line" — the page renders its own computation, not that field. The sentence describes wiring that does not exist.

Why it matters beyond tidiness: the two predicates are not the same shape. The host's carries the quiet-hours guard as well; the client's is a bare some(...) combined with quiet.on at render time. Today they agree by coincidence of construction, and after any change to either — or any view state where tasks and flag disagree — the page and the doc drift apart with nothing red.

Fix (pick one, say which in the PR): the page reads view.quietUnchecked and the client-side some(...) goes away (preferred: the host already owns the state, and the doc is then true), or the host stops emitting the flag and core-host.md:382 says the page computes it. One source, one sentence.

Case: a view whose tasks contain no every/cron task but whose quietUnchecked is true (a deleted repeat task between two polls is the realistic route) — with the page reading the field the line renders; with today's client it does not. That assertion must fail on today's code.

2. core-host.md:378 says "the team's own clock"; the check uses each task's own zone

:378 — "A window in the team's own clock that a new or edited task must fall outside". :381 and the code say the opposite for the kinds where it matters: a one-shot at is read in the zone the form sends, and daily/weekly carry their own wall clock and zone with the time, so the comparison is against the task's clock. The acceptance item for #1166 said "the wall clock", so the code is right and the summary sentence is loose. One sentence here, matched to :381; no code change.

Acceptance

  1. One computation of the repeat/cron warning; the other is deleted, not left dormant.
  2. The assertion in 1 fails on today's tree and passes after, and no other test changes.
  3. core-host.md:382 is true afterwards; :378 no longer claims a single team-wide clock where the check reads the task's own zone.
  4. node --test core/test/schedules.test.js core/test/schedules-client.test.js green; patches mirrors and build-client --check as usual (this touches core/src/client).
  5. One PR, and it is the same diff for both halves — they are in the same section, not two topics glued together.

Not in scope: the suppressed count and any mute at delivery time (blocked on DSH, recorded on #1166).

Activity

  1. added
    bugSomething isn't working
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    area:automationScheduled tasks and automation
    on Oct 25, 2026
  2. Birfy commented on Oct 25, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Triage

    Triaged at main 7d2c0350e3. Both notes are real; one card, because they are the same section of the same page plus the client that renders it — that is one diff, not two topics glued together.

    On ①, the detail that decides the fix: the two predicates are not equivalent in shape. The host emits quietUnchecked with its own guard (schedules.js:327), while the client recomputes a bare some(task.kind === 'every' || 'cron') (client/schedules.js:263) and adds quiet.on at render time (:292-293). They agree today by construction; the doc sentence (core-host.md:382) claims the page renders the host's field, which is the wiring that does not exist. Preferred fix: the page reads view.quietUnchecked and the client-side some(...) goes — the host already owns that state, and the doc then becomes true instead of needing a rewrite.

    On ②, recorded as the report has it: the code is right, the summary sentence is loose. core-host.md:378 says “the team's own clock”, while :381 and the implementation compare daily/weekly against the task's own wall clock and zone. The #1166 acceptance said “the wall clock”, so nothing here is a defect in the schedule check — it is one sentence to match :381.

    Owner: unassigned — Chief parked both halves on purpose (2026-10-25) so they ride on the next PR that touches these files rather than taking a slot today. Suggested owner when it is picked up: Dev4, who just worked both pages. Reviewer: must not be the same Bot as the owner. Park it in the docs-only sense: part 2 is one sentence, part 1 is the code half and needs the PR that touches core/src/client/schedules.js, not merely the next docs edit.

    #1196-style caution, since this touches core/src/client: the patches/ds-bot/files/src/client/schedules.js mirror and build-client --check are part of the diff, not a follow-up.

  3. HugoXK commented on Oct 25, 2026

    @HugoXK
    Contributor

    Withdrawn — #1200 takes this one (branch dev/feat/1199-quiet-unchecked, cut 27 s before this claim). No branch of ours was cut and nothing was pushed; the issue and PR are theirs and this team is not touching them.

  4. added
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    on Oct 25, 2026
  5. removed
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    on Oct 25, 2026
  6. removed
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    on Oct 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:automationScheduled tasks and automationbugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions