Skip to content

Add the roadmap, sprint plan and campaign measurement - #81

Merged
hudsonaikins merged 4 commits into
mainfrom
codex/campaign-measurement
Nov 8, 2026
Merged

hudsonaikins merged 4 commits into
mainfrom
codex/campaign-measurement

Conversation

@hudsonaikins

Copy link
Copy Markdown
Contributor
  • Adds the product roadmap and versioned sprint plan.
  • Adds LinkedIn campaign measurement to product pages. It fires only for correctly tagged visits, and respects Do Not Track.
  • Switches the tracker to Linear.

Checked locally: website analytics checks and production build pass. Merging does not deploy the website, because Cloudflare Pages builds production from another branch.

🤖 Generated with Claude Code

hudsonaikins-crown and others added 4 commits November 4, 2026 20:38
Adds campaign measurement on product pages, demo and terminal-demo script updates, the docs index entry, and the local roadmap, sprint plan and retired AgentShift sprint backlog. Preserved from local uncommitted work during the 2026-11-04 checkout cleanup; not validated. The ProfitCtlDemo20261007 capture is archived outside the repo.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Linear now tracks ProfitCtl, and AgentShift has been shut down.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 8, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-08T21:40:45.209747Z 8192ef8 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@hudsonaikins
hudsonaikins merged commit cb54ffe into main Nov 8, 2026
7 checks passed
@hudsonaikins
hudsonaikins deleted the codex/campaign-measurement branch November 8, 2026 21:39

@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: 8192ef8229

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

const tagged = params.get("utm_source") === "linkedin" && key && safe.test(key) && creative && safe.test(creative) &&
["organic_social", "paid_social"].includes(medium || "") && /^[1-9][0-9]{0,2}$/.test(revision || "");
let value = previous && previous.expires > Date.now() ? previous : null;
if (tagged && (!value || value.key !== key || value.medium !== medium || value.creative !== creative || value.revision !== revision)) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Reset attribution when the test flag changes

Actionable. When the same tab opens otherwise identical campaign URLs with different campaign_test values—for example, an operator tests a production campaign URL—the existing attribution is reused because this comparison omits the test flag. The subsequent visit therefore keeps the previous campaign_test value and its sent set, causing test traffic to be classified as production traffic (or vice versa) and potentially suppressing its events; include the normalized test value when deciding whether to create fresh attribution.

Useful? React with 👍 / 👎.

Comment thread docs/SPRINT_PLAN.md

## Tracker handoff

**AgentShift synchronization: Confirmed on 2026-10-07.** The connection is restored. The canonical ProfitCtl project is `dc3a0fc2-fd0e-4707-8a6d-3cdc33aa7dc7`. All 100 mapped records were read back: 10 release/sprint groups, 20 stories, and 70 tasks. This created 97 records and reused PCTL-15 for S02-A1, PCTL-26 for S04-B, and PCTL-23 for S09-B, preserving their prior context and acceptance requirements.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Replace the retired AgentShift handoff with Linear

Actionable. Anyone following this newly added sprint plan is told that AgentShift is the confirmed canonical tracker, even though the same commit makes Linear authoritative; the referenced docs/AGENTSHIFT_SPRINT_BACKLOG.md at line 550 is also absent from the entire target tree. This makes the handoff unusable and can send planning updates to a retired system, so rewrite this section for the Linear project or clearly retain it as historical context.

AGENTS.md reference: AGENTS.md:L29-L29

Useful? React with 👍 / 👎.

if (!link) return;
const url = new URL(link.href);
if (url.origin === location.origin && (url.pathname.startsWith("/docs") || url.hash === "#get-started")) trackCampaignAction("quickstart_opened");
if (url.origin === "https://github.com" && url.pathname.startsWith("/IntelIP/ProfitCtl/releases/download/")) trackCampaignAction("package_download_clicked");

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Wire the package-download event to a reachable link

Actionable. On the product pages in this target tree, no anchor points to /IntelIP/ProfitCtl/releases/download/: the installation CTA opens the repository or docs/INSTALL.md, after which the actual download happens on GitHub outside this listener. Consequently package_download_clicked can never be emitted by the current website, so package conversions will always appear as zero; add a direct release-asset link or track the installation CTA that users can actually click.

Useful? React with 👍 / 👎.

Comment thread docs/SPRINT_PLAN.md

**Invariants.** Preserve existing gross-margin semantics, source provenance, units, billing periods, and explicit unknowns. Add delivery, human effort, productization, adoption, and migration costs as separate named views without double counting. An estimate, a simulation, a sandbox measurement, and a billed actual must remain distinguishable. An agent cannot approve its own consequential action. Neither context separation nor a Git worktree is a security sandbox.

**Testing.** Each story requires the direct tests stated below, relevant regression tests, and a repeatable user demo. Add behavior to the existing validation profiles rather than creating a parallel proof system. For product changes, use `validate-product` and `tabellio-validate gate` with [the committed validation manifest](../tabellio.validation.json). Bind results to the exact candidate commit and input/fixture versions. Required static, schema, semantic, workflow, operational, and security checks must pass. Unit tests alone do not establish the business outcome.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Replace the unavailable validate-product command

Actionable. In an environment built from this repository, validate-product cannot be run: a target-tree-wide search finds no script, package command, workflow step, or executable by that name, while the committed workflow invokes the Tabellio gate directly. Because every story inherits this testing contract, implementers cannot reproduce the prescribed acceptance sequence; replace this name with the actual Tabellio command/profile or add the missing repository command.

AGENTS.md reference: AGENTS.md:L25-L26

Useful? React with 👍 / 👎.

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.

1 participant