Skip to content

[codex] address calendar import review feedback#158

Merged
BASIC-BIT merged 1 commit into
mainfrom
codex/calendar-review-followup
Jul 3, 2026
Merged

[codex] address calendar import review feedback#158
BASIC-BIT merged 1 commit into
mainfrom
codex/calendar-review-followup

Conversation

@BASIC-BIT

Copy link
Copy Markdown
Owner

Summary

  • address unresolved AI review feedback from [codex] add calendar workflow foundations #157 for Google Calendar import staging
  • block rejected import fields from later publication guards
  • preserve full Google event ids, parse offsetless Google dateTimes with IANA time zones, and stage cancellation tombstones without start times
  • skip malformed optional extracted links without rejecting an import batch

Validation

  • node --import tsx --test tests/backend/event-calendar-imports.test.ts
  • node_modules\.bin\tsc.CMD --noEmit --project convex\tsconfig.json
  • node --import tsx --test tests/backend/**/*.test.ts
  • node_modules\.bin\markdownlint-cli2.CMD docs\planning\calendar-integration.md docs\backend\event-schema.md
  • node scripts/run-convex-local.mjs dev --local --once --run health:status --tail-logs disable
  • git diff --check

Follow-up to #157 / #138.

@vercel

vercel Bot commented Jul 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
vr-dex-web Ready Ready Preview, Comment Jul 3, 2026 2:49pm

Request Review

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

Storybook Component Screenshot Preview

Outcome: success
Run: https://github.com/BASIC-BIT/VRDex/actions/runs/28667865793
Artifact: storybook-component-preview

Screenshots: primitive component stories captured on desktop and mobile.

This lane is separate from full-route Playwright screenshots and focuses on design-system component regressions.

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

Storybook Image Diff

Outcome: success
Run: https://github.com/BASIC-BIT/VRDex/actions/runs/28667865793
Artifact: storybook-image-diff

Changed Storybook baselines: none in this PR.

This check compares design-system component screenshots against committed baselines. Inline images show only added or modified Storybook baseline PNGs.

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

Playwright Hosted Data-Flow

Outcome: success
Target: https://staging.vrdex.net
Hosted extended profile flow: enabled
Hosted auth helpers: enabled
Hosted adapter helpers: enabled
Run: https://github.com/BASIC-BIT/VRDex/actions/runs/28667865793
Artifact: playwright-hosted-data-flow

This optional check runs the mutation-backed profile flow against a configured hosted dev/staging target with isolated E2E test data.

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

Playwright Data-Flow Preview

Outcome: success
Run: https://github.com/BASIC-BIT/VRDex/actions/runs/28667865793
Artifact: playwright-data-flow

Captured flow:

  • test-gated profile submission form
  • gated helper rejection without the Playwright token
  • Convex profile creation
  • submission success state
  • public profile page readback
  • discovery search readback

Artifacts include screenshots, traces, and recorded video for the flow run.

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

Playwright Image Diff

Outcome: success
Run: https://github.com/BASIC-BIT/VRDex/actions/runs/28667865793
Artifact: playwright-image-diff

Changed screenshot baselines: none in this PR.

This check compares public route screenshots against committed baselines. Inline images show only added or modified baseline PNGs.

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

Playwright Public Screenshot Preview

Outcome: success
Run: https://github.com/BASIC-BIT/VRDex/actions/runs/28667865793
Artifact: playwright-public-preview

Screenshots: all public route checks passed on desktop and mobile.

Full screenshot set is available in the artifact. Pixel diff baselines are handled by the separate Playwright Image Diff check.

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

@BASIC-BIT BASIC-BIT marked this pull request as ready for review July 3, 2026 14:29
Copilot AI review requested due to automatic review settings July 3, 2026 14:29
@greptile-apps

greptile-apps Bot commented Jul 3, 2026

Copy link
Copy Markdown

Greptile Summary

This PR updates Google Calendar import staging behavior. The main changes are:

  • Preserves full opaque Google event IDs and recurring event IDs.
  • Parses offsetless Google dateTime values with supplied IANA time zones.
  • Stages cancelled tombstones without startAt or allDay values.
  • Skips malformed optional extracted links instead of rejecting the batch.
  • Blocks rejected import fields from later publication guards.

Confidence Score: 5/5

Safe to merge with minimal risk.

The changes are focused on import normalization and staging schema compatibility. Tests cover the new edge cases. No blocking correctness or security issues were found.

No files require special attention.

T-Rex T-Rex Logs

What T-Rex did

  • T-Rex ran the requested verification.
  • T-Rex reported that local artifact references were not uploaded.

T-Rex Ran code and verified through T-Rex

Important Files Changed

Filename Overview
convex/_eventCalendarImports.ts Updates Google Calendar normalization to preserve opaque IDs, support timezone-local dateTimes, tolerate malformed optional extracted links, stage cancellation tombstones without start times, and block rejected fields from publication.
convex/schema.ts Makes import candidate start and all-day fields optional so cancellation tombstones can be stored without fabricated timestamps.
tests/backend/event-calendar-imports.test.ts Adds coverage for cancellation tombstones, offsetless timezone parsing, full Google event IDs, malformed link skipping, and rejected field blockers.
docs/backend/event-schema.md Documents that staged Google imports can contain available timestamps and cancellation tombstones without start times.
docs/planning/calendar-integration.md Aligns calendar integration planning docs with optional imported times and cancellation tombstone staging.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
  participant Importer as Google Calendar importer
  participant Normalizer as normalizeGoogleCalendarImport
  participant Staging as Convex import staging
  participant Guard as Publication blockers

  Importer->>Normalizer: Calendar batch + events
  Normalizer->>Normalizer: Preserve opaque IDs and parse times
  alt Cancelled tombstone without start
    Normalizer->>Normalizer: Omit startAt/allDay fields
  else Active event
    Normalizer->>Normalizer: Require start and stage public fields
  end
  Normalizer->>Staging: Insert batch, candidates, candidate fields
  Guard->>Staging: Read reviewed candidate fields
  Guard->>Guard: Block unreviewed/rejected/unsafe fields
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
  participant Importer as Google Calendar importer
  participant Normalizer as normalizeGoogleCalendarImport
  participant Staging as Convex import staging
  participant Guard as Publication blockers

  Importer->>Normalizer: Calendar batch + events
  Normalizer->>Normalizer: Preserve opaque IDs and parse times
  alt Cancelled tombstone without start
    Normalizer->>Normalizer: Omit startAt/allDay fields
  else Active event
    Normalizer->>Normalizer: Require start and stage public fields
  end
  Normalizer->>Staging: Insert batch, candidates, candidate fields
  Guard->>Staging: Read reviewed candidate fields
  Guard->>Guard: Block unreviewed/rejected/unsafe fields
Loading

Reviews (1): Last reviewed commit: "Address calendar import review feedback" | Re-trigger Greptile

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refines the Google Calendar import staging pipeline to better handle real-world provider data while strengthening publication gating for imported candidates (follow-up to the calendar workflow foundations work).

Changes:

  • Allow staging cancelled “tombstone” events that lack start times by making startAt / allDay optional through the import path and schema.
  • Improve Google date-time parsing (including offsetless dateTime with an IANA time zone) and preserve full Google event IDs up to the provider limit.
  • Harden normalization/publication behavior: skip malformed extracted links and introduce a publication blocker for rejected fields.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
tests/backend/event-calendar-imports.test.ts Adds coverage for cancellation tombstones, offsetless dateTimes with time zones, long Google IDs, malformed-link skipping, and rejected-field blockers.
docs/planning/calendar-integration.md Updates planning doc to reflect optional timestamps and tombstone staging behavior.
docs/backend/event-schema.md Updates schema documentation to reflect optional timestamps and tombstone staging rationale.
convex/schema.ts Makes eventImportCandidates.startAt and eventImportCandidates.allDay optional to support cancellation tombstones.
convex/_eventCalendarImports.ts Updates normalization to support tombstones, robust link extraction, offsetless dateTime parsing with time zones, and rejected-field publication blockers.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread convex/_eventCalendarImports.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7368849931

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread convex/_eventCalendarImports.ts Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Comment thread convex/_eventCalendarImports.ts Outdated
@BASIC-BIT BASIC-BIT force-pushed the codex/calendar-review-followup branch from d739ef1 to 671a400 Compare July 3, 2026 14:48
@BASIC-BIT BASIC-BIT merged commit 014d050 into main Jul 3, 2026
22 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants