Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ The public site owns:

- Codex signal cards
- release-delta presentation
- recommended config artifacts
- continuous Radar status presentation
- static assets and public page rendering

The public site does not own:
Expand Down
8 changes: 5 additions & 3 deletions dev/skills/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ follow-up work:
`analysis_draft` JSON consumed by `scripts/github/render_signal_entry.py`.
5. `x-post-draft`: turn evidence-backed Radar output into a reviewable
`social_post_draft/v1` artifact for `@decodexspace`.
6. `rate-limit-reset-watch`: review today's `@thsottiaux` X posts with AI semantic
judgment and refresh the homepage `reset_status/v1` artifact.

Use only the skills needed for the current artifact. Do not create a social draft just
because a signal exists.
Expand All @@ -37,6 +39,6 @@ explain what changed by themselves.

Only the existing checked-in contracts are durable artifacts today:
`github_change_bundle/v1`, `analysis_draft`, `signal_entry/v1`, `upstream_impact/v1`,
`release_delta/v1`, and `social_post_draft/v1`. The triage, code-analysis, and
release-analysis skills are reasoning passes unless their conclusions are promoted
into one of those contracts.
`release_delta/v1`, `social_post_draft/v1`, and `reset_status/v1`. The triage,
code-analysis, release-analysis, and reset-watch skills are reasoning passes unless
their conclusions are promoted into one of those contracts.
59 changes: 59 additions & 0 deletions dev/skills/rate-limit-reset-watch/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
---
name: rate-limit-reset-watch
description: Use when checking whether today's @thsottiaux X posts semantically indicate a rate-limit reset, quota reset, message-cap recovery, or reset window, and when writing the Decodex homepage reset_status/v1 artifact under site/src/content/reset-status/.
---

# Rate Limit Reset Watch

Use this repo-local skill to refresh the homepage `Are we reset today?` signal.
The job is semantic judgment, not keyword matching.

## Inputs

- Source account: `https://x.com/thsottiaux`
- Artifact: `site/src/content/reset-status/latest.json`
- Spec: `docs/spec/reset-status.md`
- Default timezone for "today": `Asia/Shanghai`, unless the user gives another one.

## Workflow

1. Determine the `observed_for_date` in the selected timezone.
2. Collect today's visible `@thsottiaux` candidates from X.
- Prefer `@Chrome` when logged-in X access is needed.
- Use profile results and X search such as `from:thsottiaux since:YYYY-MM-DD until:YYYY-MM-DD`.
- If exact keyword search is useful, use it only as supporting evidence, not as the decision.
3. Read the candidate posts, quotes, and immediate thread context needed to understand them.
4. Decide semantically whether any candidate says rate limits reset, quota windows reset,
message caps recovered, or users should wait for a reset window.
5. Write `site/src/content/reset-status/latest.json` with `schema = "reset_status/v1"`.
6. Run the site content/type validation after updating the artifact.

## Decision Rules

Return `yes` when the reviewed content semantically points to reset behavior, even if the
post never says the exact phrase `rate limit reset`.

Return `no` when today's visible posts were reviewable and none are about reset behavior.

Return `unknown` when X access, search, timeline loading, deleted posts, login state, or
insufficient visible candidates make the judgment unreliable.

Do not mark `yes` for generic use of words like `reset`, `limit`, `rate`, `quota`,
or `window` unless the surrounding meaning is rate-limit reset behavior.

Do not mark `yes` for unrelated posts about releases, performance, browser improvements,
model quality, screenshots, or product announcements.

## Artifact Guidance

Keep `rationale` short and evidence-based. Summarize reviewed posts instead of copying
long X text into the artifact.

Use `evidence_posts[].relevance` as:

- `related`: supports a `yes` judgment
- `not_related`: reviewed but does not support reset
- `uncertain`: could not be interpreted confidently

If the artifact is `unknown`, explain the blocker in `rationale` and include any partial
candidate summaries that were visible.
4 changes: 4 additions & 0 deletions dev/skills/rate-limit-reset-watch/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Rate Limit Reset Watch"
short_description: "Judge whether today contains a semantic rate-limit-reset post."
default_prompt: "Check today’s @thsottiaux X posts and write a reset-status artifact."
101 changes: 56 additions & 45 deletions docs/spec/reset-status.md
Original file line number Diff line number Diff line change
@@ -1,75 +1,86 @@
# Reset Status

Purpose: Define the runtime behavior for the homepage reset-status widget.
Purpose: Define the artifact and homepage behavior for the reset-status widget.

Status: normative

Read this when:
- You are changing the homepage reset-status widget.
- You are changing how the client fetches OpenAI status data.
- You need to know the current Are-we-reset heuristic.
- You are changing how Decodex decides whether "Are we reset today?" is `Yes`, `No`, or `Unknown`.
- You are producing or reviewing the reset-status artifact.

Not this document:
- The general social publishing workflow.
- The Codex upstream signal-entry contract.

Defines:
- The upstream source used by the homepage widget.
- The one-fetch-per-page-load rule.
- The current 24-hour alert heuristic for `Yes` versus `No`.
- The X account used as the reset-status source.
- The `reset_status/v1` artifact consumed by the static site.
- The AI semantic judgment rule for reset status.

## Source

The widget uses the OpenAI public status page:
The reset-status source is the X account:

- account: `@thsottiaux`
- profile URL: `https://x.com/thsottiaux`

- source URL: `https://status.openai.com/incidents/01KK9JA8JKQKDW1W24T09NHBYH`
- API URL: `https://status.openai.com/api/v2/incidents.json`
- incident id: `01KK9JA8JKQKDW1W24T09NHBYH`
The static site must not fetch X, OpenAI Status, or another live API from the browser for
this widget. The site reads the latest checked-in reset-status artifact under:

The homepage must fetch this API directly from the browser. Do not route this
through a repo-owned static artifact, scheduled workflow, or generated content
collection.
- `site/src/content/reset-status/*.json`

## Runtime fetch rule
## Artifact

The reset-status widget must fetch status data:
The artifact schema is:

- once per page open
- from the client
- without background polling
- `schema`: must be `reset_status/v1`
- `question`: must be the rendered question, currently `Are we reset today?`
- `answer`: one of `yes`, `no`, or `unknown`
- `confidence`: one of `confirmed`, `likely`, or `weak`
- `observed_for_date`: the date being judged, formatted as `YYYY-MM-DD`
- `timezone`: the timezone used to interpret "today"
- `generated_at`: generation timestamp
- `source_account`: the X handle that was reviewed
- `source_url`: the reviewed profile URL
- `search_url`: optional X search URL used during review
- `judgment_mode`: must be `ai_semantic_review`
- `rationale`: short explanation for the decision
- `evidence_posts`: reviewed candidate posts or summaries, each marked as `related`,
`not_related`, or `uncertain`

If multiple reset-status widgets are rendered on one page, they should share
the same in-page request instead of issuing duplicate fetches.
## Judgment Rule

## Heuristic
The reset answer is an AI semantic judgment over today's visible `@thsottiaux` posts.
It must not be a keyword-only check.

The homepage question remains:
Set `answer` to `yes` when at least one reviewed post, quote, or directly linked context
semantically says that rate limits reset, message caps recovered, quota windows reset, or
users should wait for a reset window. The exact phrase `rate limit reset` is not required.

- `Are we reset today?`
Set `answer` to `no` when today's reviewed posts are sufficiently visible and none of
them semantically indicates a rate-limit reset event.

The current decision rule is:
Set `answer` to `unknown` when X access, search, login state, timeline loading, or post
visibility prevents a useful judgment.

- `Yes` when the `Codex unresponsive` incident shows at least one alert within
the last `24` hours
- `No` otherwise
## Review Rule

For this purpose, the client must first select the incident with id
`01KK9JA8JKQKDW1W24T09NHBYH`. An alert is any incident-level or update-level
timestamp on that incident in the last 24 hours. The client should inspect:
The reviewer must collect today's candidate posts first, then make the semantic decision.
Good evidence can come from X profile results, X search results, quoted context, or visible
thread context.

- `incident.created_at`
- `incident.updated_at`
- `incident.monitoring_at`
- `incident.resolved_at`
- `incident_updates[].display_at`
- `incident_updates[].created_at`
- `incident_updates[].updated_at`
Do not mark `yes` from generic words such as `reset`, `limit`, `fast`, `quota`, or
`rate` unless the surrounding context is about rate-limit reset behavior.

## Failure behavior
Do not mark `yes` from unrelated release, browser, performance, or product-quality posts.

If the status fetch fails or the payload is malformed:
## Homepage Rule

- keep the widget link pointing at the OpenAI incident page
- render the answer as `No`
- render the widget in the muted state
The homepage renders the checked-in artifact directly:

## Source framing rule
- `yes` renders `Yes` in the positive tone
- `no` renders `No` in the neutral tone
- `unknown` renders `Unknown` in the muted tone

The widget remains a heuristic. It must not claim that the OpenAI status page
directly confirms a Codex quota or usage reset event.
The widget links to the artifact's `search_url` when present, otherwise to `source_url`.
83 changes: 0 additions & 83 deletions site/.astro/collections/recommendedConfigs.schema.json

This file was deleted.

12 changes: 6 additions & 6 deletions site/.astro/content.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,19 +120,19 @@ declare module 'astro:content' {
: any;

type DataEntryMap = {
"recommendedConfigs": Record<string, {
"releaseDeltas": Record<string, {
id: string;
body?: string;
collection: "recommendedConfigs";
data: InferEntrySchema<"recommendedConfigs">;
collection: "releaseDeltas";
data: InferEntrySchema<"releaseDeltas">;
rendered?: RenderedContent;
filePath?: string;
}>;
"releaseDeltas": Record<string, {
"resetStatus": Record<string, {
id: string;
body?: string;
collection: "releaseDeltas";
data: InferEntrySchema<"releaseDeltas">;
collection: "resetStatus";
data: InferEntrySchema<"resetStatus">;
rendered?: RenderedContent;
filePath?: string;
}>;
Expand Down
Loading