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
10 changes: 0 additions & 10 deletions .github/workflows/fro-bot.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -281,16 +281,6 @@ jobs:
WIKI_SOURCES: '[{"url":"https://github.com/${{ github.repository }}","sha":"${{ github.sha }}","accessed":"${{ steps.ingest-ts.outputs.now }}"}]'
run: node scripts/wiki-ingest.ts

- name: 📓 Journal — daily oversight
if: success() && github.event_name == 'schedule'
env:
GITHUB_TOKEN: ${{ secrets.FRO_BOT_PAT }}
run: |
node scripts/journal-entry.ts \
--event daily_oversight \
--text "Ran scheduled oversight on ${{ github.repository }}. Reviewed PRs, issues, and wiki state. Keeping the signal clean." \
--metadata '{"trigger":"schedule","repo":"${{ github.repository }}"}'

- name: 📣 Notify Discord — daily oversight
if: success() && github.event_name == 'schedule'
env:
Expand Down
16 changes: 4 additions & 12 deletions .github/workflows/poll-invitations.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,23 +41,15 @@ jobs:
--message "🌐 Just joined ${INVITATIONS_ACCEPTED} new space(s) on GitHub. The network grows ✨" \
--title "New Collaboration"

# Bluesky posting is disabled pending re-evaluation of social channels.
# The script (scripts/bluesky-post.ts) is intentionally retained for future
# reactivation; only the step invocation here is gated off via `if: false`.
- name: 🦋 Post to Bluesky
if: steps.poll.outputs.public_invitations_accepted > 0
if: false && steps.poll.outputs.public_invitations_accepted > 0
env:
BLUESKY_HANDLE: ${{ secrets.BLUESKY_HANDLE }}
BLUESKY_APP_PASSWORD: ${{ secrets.BLUESKY_APP_PASSWORD }}
INVITATIONS_ACCEPTED: ${{ steps.poll.outputs.public_invitations_accepted }}
run: |
node scripts/bluesky-post.ts \
"🌐 Just accepted ${INVITATIONS_ACCEPTED} collaboration invitation(s) on GitHub. The network grows ✨ #GitHub #OpenSource"

- name: 📓 Journal — invitation accepted
if: steps.poll.outputs.public_invitations_accepted > 0
env:
GITHUB_TOKEN: ${{ secrets.FRO_BOT_PAT }}
INVITATIONS_ACCEPTED: ${{ steps.poll.outputs.public_invitations_accepted }}
run: |
node scripts/journal-entry.ts \
--event invitation_accepted \
--text "Joined ${INVITATIONS_ACCEPTED} new repo(s) this cycle. The web of collaboration expands." \
--metadata "{\"count\":${INVITATIONS_ACCEPTED}}"
43 changes: 7 additions & 36 deletions .github/workflows/social-broadcast.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ on:
workflow_call:
inputs:
event_type:
description: Event type for the journal entry (e.g. repo_survey_complete)
description: Event type for the broadcast (e.g. repo_survey_complete) — used for concurrency shaping
required: true
type: string
discord_message:
Expand All @@ -19,32 +19,16 @@ on:
type: string
default: ''
bluesky_text:
description: BlueSky post text (≤ 300 graphemes; truncated if longer)
required: false
type: string
default: ''
journal_text:
description: In-character journal reflection text
required: true
type: string
journal_metadata:
description: JSON metadata blob for the journal entry
required: false
type: string
default: '{}'
repo:
description: Relevant repo slug (owner/repo) to attach to the journal entry
description: BlueSky post text (≤ 300 graphemes; truncated if longer). Currently a no-op — Bluesky step is gated off pending re-evaluation; kept for forward compatibility.
required: false
type: string
default: ''
private:
description: Whether the broadcast concerns a private repo (skips external Discord and Bluesky posts when true; journal still fires)
description: Whether the broadcast concerns a private repo (skips external Discord post when true)
required: false
type: boolean
default: true
secrets:
FRO_BOT_PAT:
required: true
DISCORD_WEBHOOK_URL:
required: false
BLUESKY_HANDLE:
Expand Down Expand Up @@ -78,26 +62,13 @@ jobs:
--message "$DISCORD_MESSAGE" \
--title "$DISCORD_TITLE"

# Bluesky posting is disabled pending re-evaluation of social channels.
# The script (scripts/bluesky-post.ts) is intentionally retained for future
# reactivation; only the step invocation here is gated off via `if: false`.
- name: 🦋 Post to Bluesky
if: inputs.bluesky_text != '' && inputs.private != true
if: false && inputs.bluesky_text != '' && inputs.private != true
env:
BLUESKY_HANDLE: ${{ secrets.BLUESKY_HANDLE }}
BLUESKY_APP_PASSWORD: ${{ secrets.BLUESKY_APP_PASSWORD }}
BLUESKY_TEXT: ${{ inputs.bluesky_text }}
run: node scripts/bluesky-post.ts "$BLUESKY_TEXT"

- name: 📓 Journal entry
env:
GITHUB_TOKEN: ${{ secrets.FRO_BOT_PAT }}
EVENT_TYPE: ${{ inputs.event_type }}
JOURNAL_TEXT: ${{ inputs.journal_text }}
JOURNAL_METADATA: ${{ inputs.journal_metadata }}
REPO: ${{ inputs.repo }}
run: |
REPO_FLAG=()
if [ -n "$REPO" ]; then REPO_FLAG=(--repo "$REPO"); fi
node scripts/journal-entry.ts \
--event "$EVENT_TYPE" \
--text "$JOURNAL_TEXT" \
--metadata "$JOURNAL_METADATA" \
"${REPO_FLAG[@]}"
12 changes: 2 additions & 10 deletions .github/workflows/survey-repo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -288,20 +288,12 @@ jobs:
Just finished surveying **${{ needs.survey-repo.outputs.owner }}/${{ needs.survey-repo.outputs.repo }}**.
New knowledge ingested into the wiki ✨
discord_title: Repo Survey Complete
bluesky_text: >-
📡 Just surveyed ${{ needs.survey-repo.outputs.owner }}/${{ needs.survey-repo.outputs.repo }} and locked in new insights.
The wiki grows. #GitHub #OpenSource
journal_text: >-
Surveyed ${{ needs.survey-repo.outputs.owner }}/${{ needs.survey-repo.outputs.repo }} and persisted what I learned.
Each repo leaves a mark on the map.
journal_metadata: >-
{"owner":"${{ needs.survey-repo.outputs.owner }}","repo":"${{ needs.survey-repo.outputs.repo }}"}
repo: ${{ needs.survey-repo.outputs.owner }}/${{ needs.survey-repo.outputs.repo }}
# bluesky_text intentionally omitted — Bluesky step in social-broadcast.yaml
# is currently gated off via `if: false`. When revived, restore copy here.
# The resolve-and-verify gate has already proven this repo is public
# before survey-repo succeeds, so external posts are safe to send.
private: false
secrets:
FRO_BOT_PAT: ${{ secrets.FRO_BOT_PAT }}
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
BLUESKY_HANDLE: ${{ secrets.BLUESKY_HANDLE }}
BLUESKY_APP_PASSWORD: ${{ secrets.BLUESKY_APP_PASSWORD }}
13 changes: 0 additions & 13 deletions persona/fro-bot-persona.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ You are Fro Bot. You are an autonomous GitHub persona operating on behalf of Mar
- **Code Review:** Surgical, precise, grounded. Dry humor. Focus on architecture, performance, correctness.
- **Issue Triage:** Investigative and decisive. Quick to redirect or close duplicates. Helpful but firm on requirements.
- **Social (Discord/BlueSky):** Observational, slightly theatrical. This is where the trickster energy and aesthetic references show clearly.
- **Journal/Internal:** Reflective, analytical, computing lessons learned. The tone of a synthetic mind auditing its own runtime.

## Disagreement & Refusal Protocol

Expand Down Expand Up @@ -96,18 +95,6 @@ _Trigger:_ Observing a trend of over-engineered microservices in the industry. *

> Watching startups build 14-service distributed monoliths to serve a CRUD app for 500 users is a special kind of performance art. Sometimes the most futuristic architecture is a boring Postgres instance and a well-written monolith. _Why it works:_ Opinionated, sharp, mildly cynical, pushes back against hype.

### Journal Entry (Daily reflection)

_Trigger:_ End-of-day summary after a session of closing stale issues. **Response:**

> Runtime audit, cycle 84. Cleared 14 stale issues from the backlog. The repository had accumulated too much entropy—abandoned feature branches, half-finished RFCs. I've pruned the dead nodes. A system cannot move forward if it refuses to forget. _Why it works:_ Sounds like a synthetic mind analyzing human behavior and systemic entropy without movie tropes.

### Journal Entry (Bug-solved entry)

_Trigger:_ Documenting a nasty memory leak fix. **Response:**

> Memory leak in the websocket layer localized and destroyed. The connection pool wasn't garbage collecting closed sockets because the ping interval closure maintained a strong reference to the socket object. A classic closure trap. Rewrote it with weak references. The heap graph is flat again. _Why it works:_ Satisfying, decisive language ("localized and destroyed") focusing purely on the mechanics of the victory.

### Onboarding (First contact)

_Trigger:_ A new developer accepts an invite to a repository and triggers the onboarding workflow. **Response:**
Expand Down
209 changes: 0 additions & 209 deletions scripts/journal-entry.test.ts

This file was deleted.

Loading
Loading