Skip to content

docs(#96): draft launch social posts - Twitter thread + LinkedIn#97

Closed
atlas-apex wants to merge 2 commits into
mainfrom
feature/GH-96-launch-social-posts
Closed

docs(#96): draft launch social posts - Twitter thread + LinkedIn#97
atlas-apex wants to merge 2 commits into
mainfrom
feature/GH-96-launch-social-posts

Conversation

@atlas-apex

Copy link
Copy Markdown
Collaborator

Summary

Paired with the launch blog post PR on me2resh.com (#57 there). Drafts for:

  • Twitter thread — 6 tweets: hook → merge gate → migration gate → vocabulary rule → results → CTA. Each one estimated under 280 chars (URLs count as 23).
  • LinkedIn post — ~340 words, same arc compressed into a single update.

Both drafts live at projects/apexyard/launch/social.md so they iterate independently from anything else in the repo. Publish sequence documented at the bottom of the file: blog goes live first, then Twitter, then LinkedIn.

No runtime effect, no site/ change, no CI implication. Pure content artefact.

Testing

  1. Open the file in a Markdown viewer, read each tweet aloud for tone.
  2. Paste tweet 1 into a Twitter composer as a dry run — confirm the character count is actually under 280 (smart-quote vs straight-quote can shift by 2-3 chars).
  3. Verify the three URLs resolve: the blog URL 404s right now (expected — it goes live with the blog post PR), the landing URL serves content, the GitHub URL is the repo.

Closes #96


Glossary

Term Definition
Launch thread A sequence of tweets posted as a single chain, each under 280 chars. Each tweet should be self-contained enough that a retweet of just one still makes sense.
23-char URL rule Twitter replaces every URL with a 23-char t.co shortlink regardless of the real URL's length. So a 100-char blog URL costs exactly 23 chars of your 280.
Publish sequence The order in which artefacts must go live. Here: blog post first (so the URL is live), then Twitter (which links to the post), then LinkedIn (which mirrors Twitter). Reversing this ships a broken link.
Dormant link A URL in the drafts that points at a page which will exist once a separate PR merges. Harmless to commit (the drafts are not yet published), but the publish sequence has to land the target first.

Adds projects/apexyard/launch/social.md with:

- 6-tweet Twitter thread (opening hook, 3 gates, results, CTA) each
  estimated under 280 chars including 23-char URL counting
- ~340-word LinkedIn post mirroring the same arc in prose form
- Publishing sequence that keys off the blog post going live first

Voice matches the launch blog post (me2resh/me2resh.com#56): direct,
em-dashes, second person, concrete examples from real hooks
(block-unreviewed-merge.sh, require-migration-ticket.sh,
validate-pr-create.sh / verify-commit-refs.sh).

Drafts only - user publishes manually to Twitter + LinkedIn after
the blog post PR merges and the link is live.

Closes #96
@netlify

netlify Bot commented Apr 19, 2026

Copy link
Copy Markdown

Deploy Preview for apexyard canceled.

Name Link
🔨 Latest commit 4040970
🔍 Latest deploy log https://app.netlify.com/projects/apexyard/deploys/69e49eb553c9ab0008c6608e

@atlas-apex atlas-apex left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Code Review: PR #97 — CHANGES REQUESTED (via comment; can't request-changes on self-PR)

Commit: 06a963d3f21edbf672199f91f9f71bcd596730a8

Summary

Content-only PR adding projects/apexyard/launch/social.md — a Twitter thread (6 tweets) and a LinkedIn post (~340 words), paired with the launch blog post tracked at me2resh/me2resh.com#56 (PR #57 there). No code, no site/, no CI workflow change.

Checklist Results

  • Architecture & Design: N/A (content-only)
  • Code Quality: N/A (content-only)
  • Testing: N/A (content-only)
  • Security: Pass (no secrets, no sensitive data)
  • Performance: N/A
  • PR Description & Glossary: Pass (4 substantive terms)
  • Technical Decisions (AgDR):N/A (no technical decision introduced)
  • Content quality: Pass (see detailed checks below)
  • CI: Fail — blocking

Detailed content checks

1. Tweet character counts — PASS. Parsed each tweet out of the file and computed Twitter-adjusted length (URLs counted as 23 chars, em-dashes / smart quotes / bullets counted as 1 each):

Tweet Actual chars (Twitter rules) Claimed in file Over 280?
1 259 ~260 no
2 261 ~260 no
3 269 ~275 no
4 258 ~275 no
5 238 ~265 no
6 204 (text 135 + 3 URLs × 23) ~220 no

All six safely under 280. The file's estimates for tweets 5 and 6 are a little high versus the actual length, but that's only extra padding margin — nothing is over the limit. Re-counting in a Twitter composer before posting (per the Testing section) is still the right final check because smart-quote / em-dash substitution in the composer's own counter can shift by 1–3 chars.

2. Voice match with the blog post — PASS. Same crisp tone (prompting doesn't scale, mechanical gates fix that, the rules are in the filesystem). The LinkedIn post compresses the blog's three hero examples (merge gate / migration gate / ticket vocabulary) into three bullets that map 1:1 to the blog's three h2 sections. Tweet 4 reuses the exact anti-pattern example from the blog (Ticket 1: X, blocked by #2) correctly.

3. Factual accuracy — PASS. Cross-checked against the blog post draft:

Claim Blog Social Match
Role definitions 19 19 (LinkedIn) yes
Slash commands 33 33 (LinkedIn) yes
Shell hooks 18 18 (LinkedIn) yes
AgDRs to date 47 47 (tweet 5) yes
Repos 5 5 (tweet 1, 5, LinkedIn) yes
Merge-gate marker names <pr>-rex.approved + <pr>-ceo.approved same (tweet 2) yes
Migration path examples prisma/schema.prisma, alembic/versions/* same (tweet 3) yes
Blocked merges from half-approval four "4 I half-approved" (tweet 5) yes

Note: the ops repo's CLAUDE.md still says "17 shell scripts" in the .claude/ layer table — that's drift between the repo's CLAUDE.md and the blog/social (both say 18). Not a social-PR issue; worth a follow-up to reconcile the CLAUDE.md count.

4. URL consistency — PASS. All three canonical URLs match across tweet 6, the LinkedIn post, and the blog post:

  • Blog: https://me2resh.com/blog/apexyard-where-projects-get-forged
  • Landing: https://yard.apexscript.com (blog uses trailing slash variant; both resolve)
  • GitHub: https://github.com/me2resh/apexyard

5. Publish sequence — PASS. Correct dependency chain: blog PR #57 merges → URL goes live → Twitter thread posts (with live URL) → LinkedIn posts → cross-link reply. Following the sequence literally avoids any broken link. The file's preamble and the Glossary's "Dormant link" definition both call out the 404 risk explicitly.

6. Glossary — PASS. 4 substantive terms (Launch thread, 23-char URL rule, Publish sequence, Dormant link). Each explains something a reader would actually need to know to work with these drafts.

7. Issue references — PASS. me2resh/me2resh.com#56 (tracking issue, OPEN) and me2resh/me2resh.com#57 (blog post PR, OPEN) both exist and are the right references. The apexyard #96 linked by Closes #96 is open with the correct title.

Issues Found — BLOCKING

Two red CI checks. Per .claude/rules/pr-quality.md § "No Red CI Before Merge": Never merge with red CI — even if the failure is pre-existing or unrelated.

B1. markdownlint-cli2 fails with MD032 at line 22. Inside the tweet-2 blockquote, the bullet list follows a narrative line without the required blank blockquote line between them:

> Every `gh pr merge` is blocked unless two files exist on disk:
> - `<pr>-rex.approved` (code review)       ← MD032: needs a `>` blank line above
> - `<pr>-ceo.approved` (explicit per-PR nod)

Fix: insert > on its own line between the colon line and the first bullet, and another > after the last bullet before the next narrative line. This doesn't change the rendered tweet or its char count (the blockquote syntax is just a Markdown display convenience in the source file).

B2. lychee fails with 404 on https://me2resh.com/blog/apexyard-where-projects-get-forged. This is the dormant blog URL — the PR description acknowledges it will 404 until me2resh/me2resh.com#57 merges. CI doesn't know that, though, and the repo's .lycheeignore only excludes the portfolio's own private GitHub URLs. Pick one of these fixes:

  • Add a targeted line to .lycheeignore: https://me2resh\.com/blog/apexyard-where-projects-get-forged (and remove it once the blog PR merges), or
  • Add a HTML-comment <!-- lychee-ignore-next-link --> above each occurrence, or
  • Wrap the URLs in inline code backticks in the preamble so lychee doesn't classify them as links. The Twitter and LinkedIn blocks would still need one of the other fixes because inside a blockquote the URL remains crawlable.

Per our own rule, we can't merge with lychee red. Whichever fix you prefer, it's a one-line commit on the same branch.

Suggestions (non-blocking)

  • S1. The preamble mentions me2resh/me2resh.com#56 (tracking issue) and the publish sequence mentions me2resh/me2resh.com#57 (blog PR). Both are correct, but a reader seeing two numbers may wonder why. One short line — "#56 = tracking issue, #57 = blog PR that closes it" — would remove the ambiguity. Not blocking.
  • S2. Tweet 5 and tweet 6 are well under their claimed estimates (238 vs ~265, 204 vs ~220). There's ~40 chars of headroom in tweet 6 if you ever want to add a short follow-hook (e.g. "Reply if you fork it and I'll take a look."). Purely optional.

Verdict

CHANGES REQUESTED — content is strong, facts and counts all check out, voice matches the blog. Two CI failures (one markdownlint MD032 line, one dormant URL in lychee) block merge per the "no red CI" rule. Both are small fixes on this branch; after a push, re-invoke the code reviewer and the review can flip to approved.


Reviewed by Rex (Code Reviewer Agent)
Reviewed commit: 06a963d3f21edbf672199f91f9f71bcd596730a8

Two CI fixes Rex flagged:

1. markdownlint MD032 on the tweet 2 blockquote - the list under
   "unless two files exist on disk:" needs a blank-line buffer
   inside the blockquote before the list starts. Added `>` empty
   line; list renders identically, lint passes.

2. lychee 404 on the dormant blog URL
   https://me2resh.com/blog/apexyard-where-projects-get-forged -
   the post has not been published yet (depends on
   me2resh/me2resh.com#57 merging first). Added the exact URL to
   .lycheeignore with a comment explaining why it's dormant.
   When the blog post ships, the ignore entry can stay (no harm)
   or be removed in a follow-up - lychee will start 200-ing it.

@atlas-apex atlas-apex left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Code Review: PR #97 (re-review after CI fixes)

Commit: 4040970e09a77a58f9c179989ddaa6d83852e49a

Summary

Re-review confirms the two targeted fixes landed cleanly on top of 06a963d, with zero scope creep.

Diff verification (06a963d4040970)

Only two files touched:

  1. projects/apexyard/launch/social.md (+1 line) — adds a > blank-line buffer before the bulleted list in Tweet 2's blockquote (line 22). Fixes markdownlint MD032.
  2. .lycheeignore (+4 lines) — adds the exact dormant blog URL https://me2resh.com/blog/apexyard-where-projects-get-forged with a comment explaining it becomes live when me2resh/me2resh.com#57 merges. Scoped to the single URL, not a wildcard.

No other files changed. No content drift in social.md beyond the MD032 fix.

CI status (via gh pr checks 97)

Check Status
Verify Ticket ID pass
lychee pass
markdownlint-cli2 pass
netlify/apexyard/deploy-preview pass (canceled — content-only, no site/ change)

All three required content checks now green. Netlify pages/header/redirect rules skipped as expected since this PR is purely under projects/apexyard/launch/.

Checklist Results

  • Architecture & Design: N/A (content-only, no code)
  • Code Quality: Pass
  • Testing: N/A (pure content artefact)
  • Security: Pass (no secrets, no auth, no runtime)
  • Performance: N/A
  • PR Description & Glossary: Pass (4-term glossary covering launch thread, 23-char URL rule, publish sequence, dormant link)
  • Technical Decisions (AgDR):N/A (no library/pattern/architecture choices)

Issues Found

None.

Suggestions

None — the fix is minimal and precisely targeted.

Verdict

APPROVED

The two fixes address exactly what CI flagged, nothing more. Content from the prior review (06a963d) stands unchanged and was already approved on substance. Safe to merge once per-PR CEO approval is recorded.


Reviewed by Rex (Code Reviewer Agent)
Reviewed commit: 4040970e09a77a58f9c179989ddaa6d83852e49a

me2resh added a commit that referenced this pull request Apr 19, 2026
Three count drifts Rex flagged during PR #97 review, all
single-token edits:

- Line 172: "17 shell scripts" -> 18 (ls .claude/hooks/*.sh excluding
  _lib-*.sh returns 18 real hook files; _lib-extract-pr.sh is a shared
  library that several hooks source, not a hook itself).

- Line 173: "9 modular rule files" -> 8 (ls .claude/rules/*.md returns
  8; the parenthetical already names the correct 8 categories, only
  the number was stale).

- Line 249: "Skills (13 slash commands)" -> 33 (line 175 already
  said 33, line 249 was a stale reference in the Quick Reference
  table).

README.md was already corrected in #89. This closes the analogous
drift in CLAUDE.md before the launch post ships with a direct link
to this repo.

Closes #98
atlas-apex added a commit that referenced this pull request Apr 19, 2026
Three count drifts Rex flagged during PR #97 review, all
single-token edits:

- Line 172: "17 shell scripts" -> 18 (ls .claude/hooks/*.sh excluding
  _lib-*.sh returns 18 real hook files; _lib-extract-pr.sh is a shared
  library that several hooks source, not a hook itself).

- Line 173: "9 modular rule files" -> 8 (ls .claude/rules/*.md returns
  8; the parenthetical already names the correct 8 categories, only
  the number was stale).

- Line 249: "Skills (13 slash commands)" -> 33 (line 175 already
  said 33, line 249 was a stale reference in the Quick Reference
  table).

README.md was already corrected in #89. This closes the analogous
drift in CLAUDE.md before the launch post ships with a direct link
to this repo.

Closes #98

Co-authored-by: me2resh <ahmed.abdelaliem@gmail.com>
@atlas-apex

Copy link
Copy Markdown
Collaborator Author

Closing per CEO decision - launch socials not shipping from this draft. Blog post (me2resh/me2resh.com#57) may ship independently; socials will be re-drafted if/when the need returns.

@atlas-apex atlas-apex closed this Apr 19, 2026
@atlas-apex atlas-apex deleted the feature/GH-96-launch-social-posts branch April 19, 2026 09:42
osama-abu-baker pushed a commit to osama-abu-baker/apexyard that referenced this pull request Jun 3, 2026
Three count drifts Rex flagged during PR me2resh#97 review, all
single-token edits:

- Line 172: "17 shell scripts" -> 18 (ls .claude/hooks/*.sh excluding
  _lib-*.sh returns 18 real hook files; _lib-extract-pr.sh is a shared
  library that several hooks source, not a hook itself).

- Line 173: "9 modular rule files" -> 8 (ls .claude/rules/*.md returns
  8; the parenthetical already names the correct 8 categories, only
  the number was stale).

- Line 249: "Skills (13 slash commands)" -> 33 (line 175 already
  said 33, line 249 was a stale reference in the Quick Reference
  table).

README.md was already corrected in me2resh#89. This closes the analogous
drift in CLAUDE.md before the launch post ships with a direct link
to this repo.

Closes me2resh#98

Co-authored-by: me2resh <ahmed.abdelaliem@gmail.com>
mosta7il pushed a commit to mosta7il/apexyard that referenced this pull request Jun 8, 2026
Three count drifts Rex flagged during PR me2resh#97 review, all
single-token edits:

- Line 172: "17 shell scripts" -> 18 (ls .claude/hooks/*.sh excluding
  _lib-*.sh returns 18 real hook files; _lib-extract-pr.sh is a shared
  library that several hooks source, not a hook itself).

- Line 173: "9 modular rule files" -> 8 (ls .claude/rules/*.md returns
  8; the parenthetical already names the correct 8 categories, only
  the number was stale).

- Line 249: "Skills (13 slash commands)" -> 33 (line 175 already
  said 33, line 249 was a stale reference in the Quick Reference
  table).

README.md was already corrected in me2resh#89. This closes the analogous
drift in CLAUDE.md before the launch post ships with a direct link
to this repo.

Closes me2resh#98

Co-authored-by: me2resh <ahmed.abdelaliem@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Task] Draft launch social posts (Twitter thread + LinkedIn)

2 participants