Skip to content

Commit 14c0ca7

Browse files
authored
Merge branch 'main' into generalize-maturity-model
2 parents b5fbcae + c435b58 commit 14c0ca7

325 files changed

Lines changed: 19181 additions & 4738 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
---
2+
name: analyze-innersource-video
3+
description: Analyze an InnerSource conference talk transcript and relate it to the InnerSourcePatterns library. Identifies which existing patterns the talk instantiates (Known Instance candidates), where it suggests clarifications to an existing pattern, and whether it justifies drafting a new pattern. Use when given a transcript of an InnerSource-related talk and asked to relate it to this repo's pattern library.
4+
---
5+
6+
# Analyze InnerSource Video
7+
8+
## When to use
9+
10+
The user provides a transcript of an InnerSource talk — plus whatever metadata comes with it (speaker, org, event, date) — and asks you to compare it to the patterns in this repo.
11+
12+
Goals: surface known instances, propose surgical clarifications to existing patterns, and identify genuinely new InnerSource pattern candidates.
13+
14+
## Default behavior
15+
16+
**Propose, never auto-edit.** Always present analysis and use `AskUserQuestion` to confirm direction before making file changes. Never commit or PR without explicit confirmation.
17+
18+
## Workflow
19+
20+
### Step 1 — Confirm the transcript and metadata
21+
22+
You need the transcript text, plus speaker, organization, event/channel, and date. If any of that's missing, ask the caller for it before guessing — a placeholder in a Known Instance citation is worse than asking (see Step 7).
23+
24+
**If you still need to pull a transcript from a video**, get it with the `youtube-transcript-api` Python library (already available; pip-installable if not). Do *not* try `WebFetch` on a YouTube watch page — it returns only the footer.
25+
26+
Write a script to `.tmp/fetch_transcript.py`:
27+
28+
```python
29+
from youtube_transcript_api import YouTubeTranscriptApi
30+
31+
video_id = "<VIDEO_ID>"
32+
api = YouTubeTranscriptApi()
33+
transcript = api.fetch(video_id)
34+
with open(".tmp/transcript_raw.txt", "w", encoding="utf-8") as f:
35+
for s in transcript:
36+
f.write(f"[{s.start:.1f}] {s.text}\n")
37+
```
38+
39+
Then collapse it to a flat readable form in `.tmp/transcript_flat.txt` (strip timestamps, join, normalize whitespace).
40+
41+
**If speaker/org/date are still missing** and the transcript came from a video, pull them with `yt-dlp` via `python -m yt_dlp` (the `yt-dlp` binary may not be on PATH on Windows even when the package is installed). Write `.tmp/fetch_metadata.py`:
42+
43+
```python
44+
import json, yt_dlp
45+
opts = {"quiet": True, "skip_download": True, "no_warnings": True}
46+
with yt_dlp.YoutubeDL(opts) as ydl:
47+
info = ydl.extract_info("<URL>", download=False)
48+
keys = ["title", "uploader", "channel", "upload_date", "duration", "description", "tags"]
49+
out = {k: info.get(k) for k in keys}
50+
with open(".tmp/video_metadata.json", "w", encoding="utf-8") as f:
51+
json.dump(out, f, ensure_ascii=False, indent=2)
52+
print(out["title"]); print(out["channel"]); print(out["description"])
53+
```
54+
55+
**The description usually contains speaker name and affiliation when the transcript does not** — this is the single most important reason to fetch metadata even when you have the transcript. Speakers often introduce themselves with just a first name or nickname.
56+
57+
**Fallback for title + channel only:** the YouTube oEmbed endpoint (`https://www.youtube.com/oembed?url=<URL>&format=json`) works through `WebFetch`.
58+
59+
### Step 2 — Summarize the talk
60+
61+
Produce a brief synthesis covering:
62+
63+
- **Title** (from metadata, not from the transcript's spoken title — they often differ)
64+
- **Speaker** — full name; note any nickname the speaker uses in the talk
65+
- **Organization**
66+
- **Event** — typically an InnerSource Commons community call; note the specific summit or webinar if named
67+
- **Date** — useful for citation
68+
- **Core thesis** in one or two sentences
69+
- **Main artifacts / frameworks** the speaker introduces (named structures, checklists, blueprints, mantras)
70+
- **Memorable lines** — verbatim quotes can become useful in the pattern's Known Instance description
71+
72+
### Step 3 — Survey adjacent patterns
73+
74+
Read the "List of Patterns" section of the repo's own `README.md` — it already has every pattern's title and patlet, grouped by maturity level, kept current as patterns are added. Read it in full; you want the patlet, not just the title, to judge relevance.
75+
76+
Then pick the 3–6 patterns whose patlets sit closest to the talk's theme and read those files in full. Don't rely solely on patlets to judge a match: the talk's content may overlap meaningfully with parts of a pattern that the patlet doesn't surface.
77+
78+
### Step 4 — Categorize the talk's content
79+
80+
For each substantive point in the talk, assign it to one of:
81+
82+
**A. Known Instance candidate** — the talk validates, exemplifies, or vividly re-derives an existing pattern's solution. The right action: add a citation under the pattern's `## Known Instances` section.
83+
84+
**Before citing a match, re-read the pattern's `## Problem` and `## Solution` sections, not just its patlet or title.** A talk can share a topic word with a pattern — "developer environment," "onboarding," "platform" — while doing something structurally different from what that pattern actually solves. Internal Developer Platform is a real trap here: it's specifically about a centralized, deployed, org-run self-service system (a portal, CI/CD orchestration, infrastructure provisioning) — not any tool that touches "developer environments." A story about a contributor's local setup (a containerized dev kit they run on their own laptop) is not a Known Instance of it, however similar the vocabulary sounds. The test is whether the talk's example does the same thing the pattern's Solution describes, not whether it shares a theme with the patlet.
85+
86+
**B. Clarification candidate** — the talk surfaces a real gap or vagueness in an existing pattern. The right action: a small, surgical edit that fills the gap without reframing the pattern. Bias toward additions over rewrites; bias toward concrete guidance over editorial framing.
87+
88+
**C. New pattern candidate** — the talk presents a problem/solution pair that no existing pattern covers. The right action: propose drafting a new pattern using the AI-assisted prompt in `meta/pattern-drafts-with-ai.md`.
89+
90+
### Step 5 — Apply the "uniquely InnerSource" filter
91+
92+
**This is the most important judgment call and the easiest mistake to make.** A talk can contain genuinely good engineering advice that is *not* uniquely InnerSource. Examples that look like new patterns but probably aren't:
93+
94+
- "Treat docs like code" — general dev advice; well-trodden outside InnerSource.
95+
- "Write better READMEs" — general OSS / dev advice.
96+
- "Use linters / CI / automation" — general engineering.
97+
98+
What *is* uniquely InnerSource — the signal you're looking for:
99+
100+
- It addresses the specific dynamic of **contributors who are not on the host team** (no shared context, no shared OKRs, no shared manager).
101+
- It addresses **cross-team collaboration friction** inside one company (Trusted Committers, escalation, ownership ambiguity, dual-line-management tension).
102+
- It addresses **incentive misalignment** between a developer's team goals and contributing to a shared project.
103+
- It addresses **scaling InnerSource adoption** across an organization (ambassadors, ISPO, governance levels).
104+
105+
If the talk's central insight would be equally at home in a generic "good engineering" talk, it is not new-pattern material. It may still be a Known Instance or a clarification.
106+
107+
### Step 6 — Present analysis
108+
109+
Present a clear, three-part writeup to the user:
110+
111+
1. **Talk summary** (5–10 lines: speaker, org, thesis, blueprint)
112+
2. **Mapping to existing patterns** with confidence labels (strong match, partial match, tangential)
113+
3. **Candidate actions** organized as: Known Instances to add, clarifications to make, new pattern candidates (with the "uniquely InnerSource" filter applied)
114+
115+
Then use `AskUserQuestion` to confirm which actions to take. **Do not edit any file before this confirmation.** If the user is non-committal ("you decide"), make a confident recommendation in your own voice rather than asking again.
116+
117+
### Step 7 — Apply chosen actions
118+
119+
**For Known Instance citations:**
120+
121+
- Match the existing style of that pattern's Known Instances section — typically `* **<Organization>** - <one-or-two-sentence description>` with the URL inline.
122+
- The lead bold should be the speaker's *organization*, not "Community talk" or similar meta-labels — the existing entries are all organizational, so use the same convention. If you cannot find an organization, ask the user before defaulting to a placeholder.
123+
- Quote a memorable line or describe the framework concisely. Cite the source link.
124+
125+
**For clarifications:**
126+
127+
- Stay surgical. Prefer adding a new subsection or bullet over rewriting an existing one.
128+
- If the change touches the pattern's templates (e.g. `templates/README-template.md`), edit those too.
129+
- Cross-link to other related patterns when distinguishing what the talk adds vs. what's already covered (e.g. distinguishing a contributor-facing system map from ADRs).
130+
131+
**For new patterns:**
132+
133+
- Use the prompt in `meta/pattern-drafts-with-ai.md` as the basis for drafting.
134+
- File name: lowercase, hyphenated, matching the title. Place in `patterns/1-initial/`.
135+
- Set Status to `Initial`, Known Instances to the talk itself, Author to TBD, omit Acknowledgments.
136+
- **One talk is enough to draft at Initial — don't hold back.** Per `meta/contributor-handbook.md`, maturity level 1 (Initial) has no validation requirement at all; it's explicitly for a single unstructured idea, even a "donut" with missing sections. One known instance clears the bar for level 2 (Structured); only 3+ instances need level 3 (Validated). So a genuine new-pattern candidate from one talk should be drafted at Initial, not held back for more evidence that this process — one talk at a time — will never accumulate on its own.
137+
138+
### Step 8 — Git workflow
139+
140+
- **Always branch off `main`**, not whichever branch the user is currently on. Confirm with `git status` and `git branch --show-current` first.
141+
- **One talk = one PR.** Bundle everything the analysis found for a single talk into one PR — Known Instance citations across several patterns, clarifications, a new pattern draft, whatever applies — the way #909 added Thales as a Known Instance across five patterns in one PR. Only split into separate PRs when the changes come from genuinely different source talks, not because they touch different patterns or different candidate types.
142+
- Match the repo's commit message style: sentence-case subject, no conventional-commit prefix (check `git log --oneline -5` for recent style).
143+
- Write the commit message body to `.tmp/commit_msg.txt` and use `git commit -F` (per user's no-heredocs rule).
144+
- Open the PR against `InnerSourceCommons/InnerSourcePatterns` upstream `main` (the user's fork is `origin`).
145+
- Include a `## Test plan` checklist in the PR body — the repo's convention.
146+
- Ask the user before pushing/PRing rather than auto-proceeding.
147+
148+
## Anti-patterns to avoid
149+
150+
- Don't use `WebFetch` on YouTube watch pages — it returns only the footer. Use `youtube-transcript-api` and `yt-dlp` instead.
151+
- Don't trust the spoken introduction for the speaker's organization — get it from the video description.
152+
- Don't add a Known Instance entry labeled "Community talk" or similar generic placeholder — the convention is to lead with the speaker's organization.
153+
- Don't propose "Treat docs like code" or similar generic-engineering ideas as new InnerSource patterns. Apply the Step 5 filter.
154+
- Don't split one talk's findings across multiple PRs — bundle Known Instances, clarifications, and new pattern drafts from the same talk into one PR (see Step 8).
155+
- Don't auto-commit or auto-push without confirmation from the user, even on "high confidence" calls — community library content warrants a human in the loop.
156+
- Don't write the commit message via heredoc — write to `.tmp/commit_msg.txt` and use `git commit -F`.
157+
158+
## Output format for the user-facing analysis
159+
160+
Structure the final writeup as:
161+
162+
```
163+
## Talk summary
164+
<5–10 lines>
165+
166+
## How it maps to the existing pattern library
167+
168+
### Strong match — Known Instance candidate
169+
**[Pattern Name](patterns/.../file.md)**
170+
<why this talk is a known instance>
171+
172+
### Partial / adjacent match
173+
**[Pattern Name](patterns/.../file.md)**
174+
<what overlaps, what differs>
175+
176+
### Candidate new patterns
177+
**Candidate A — "<name>"**
178+
<problem/solution; "uniquely InnerSource" rationale or honest reason it's borderline>
179+
180+
## Recommendation
181+
<which actions to take, in confident voice>
182+
```
183+
184+
Then `AskUserQuestion` to confirm.

‎.gitbook.yaml‎

Lines changed: 0 additions & 5 deletions
This file was deleted.

‎.github/CODEOWNERS‎

Lines changed: 16 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5,40 +5,20 @@
55
# Each line is a file pattern followed by one or more owners.
66

77
# These owners will be the default owners for everything in
8-
# the repo. Unless a later match takes precedence,
9-
# @global-owner1 and @global-owner2 will be requested for
8+
# the repo. Unless a later match takes precedence, they will be requested for
109
# review when someone opens a pull request.
11-
* @lenucksi @NewMexicoKid @cewilliams @spier @robtuley
12-
13-
# Trying out folder-specific CODEOWNERS permissions, by example of our Japanese book
14-
/translation/ @yuhattor
15-
/book/ @yuhattor
16-
17-
# Order is important; the last matching pattern takes the most
18-
# precedence. When someone opens a pull request that only
19-
# modifies JS files, only @js-owner and not the global
20-
# owner(s) will be requested for a review.
21-
# *.js @js-owner
22-
23-
# You can also use email addresses if you prefer. They'll be
24-
# used to look up users just like we do for commit author
25-
# emails.
26-
# *.go docs@example.com
27-
28-
# In this example, @doctocat owns any files in the build/logs
29-
# directory at the root of the repository and any of its
30-
# subdirectories.
31-
# /build/logs/ @doctocat
32-
33-
# The `docs/*` pattern will match files like
34-
# `docs/getting-started.md` but not further nested files like
35-
# `docs/build-app/troubleshooting.md`.
36-
# docs/* docs@example.com
37-
38-
# In this example, @octocat owns any file in an apps directory
39-
# anywhere in your repository.
40-
# apps/ @octocat
41-
42-
# In this example, @doctocat owns any file in the `/docs`
43-
# directory in the root of your repository.
44-
# /docs/ @doctocat
10+
* @lenucksi @NewMexicoKid @cewilliams @spier @robtuley @yuhattor
11+
12+
# These people ar familiar with the translation of our patterns to a specific language:
13+
/translation/ja/ @yuhattor
14+
/book/ja/ @yuhattor
15+
/translation/zh/ @WillemJiang
16+
/book/zh/ @WillemJiang
17+
/translation/pt-br/ @jrcosta @zilio
18+
/book/pt-br/ @jrcosta @zilio
19+
/pattern-categorization/pt-br/ @jrcosta @zilio
20+
/translation/gl/ @psanxiao
21+
/book/gl/ @psanxiao
22+
/pattern-categorization/gl/ @psanxiao
23+
/translation/es/ @ovas04
24+
/book/es/ @ovas04

‎.github/ISSUE_TEMPLATE/config.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
blank_issues_enabled: true
22
contact_links:
33
- name: Slack
4-
url: https://innersourcecommons-inviter.herokuapp.com
4+
url: https://innersourcecommons.org/slack
55
about: Join our Community on Slack for help and a casual chat.
66
- name: Patterns Book
77
url: https://patterns.innersourcecommons.org

‎.github/ISSUE_TEMPLATE/pattern-draft.md‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,20 @@ assignees: ''
77

88
---
99

10-
This is the most basic template for a new pattern.
11-
See our full pattern syntax [here](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/meta/pattern-template.md).
10+
If you don't know how to get started, try to [draft an InnerSource Pattern with AI](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/meta/pattern-drafts-with-ai.md).
11+
Then you can paste the result into the issue below, do manual edits as you see fit and submit it.
12+
13+
Below you see a basic template for a new pattern.
14+
For the full details, see our [pattern template](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/meta/pattern-template.md).
1215

1316
## Title
1417

1518
Short Title Here
1619

1720
## Patlet / Summary
1821

19-
Concise 1-2 sentence description of the problem and solution.
22+
Concise 2 sentence description of the problem and solution.
23+
The 1st sentence describes the problem. The 2nd sentence describes the solution.
2024

2125
## Problem
2226

@@ -59,7 +63,7 @@ May mention:
5963
* A particular business
6064
* Anonymized instances ex: "3 companies have proven that this is a good solution" or "A large financial services org...".
6165

62-
## Status
66+
## Status
6367

6468
Initial
6569

‎.github/config.yml‎

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Configuration for welcome - https://github.com/behaviorbot/welcome
2+
3+
# Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome
4+
5+
# Comment to be posted to on first time issues
6+
newIssueWelcomeComment: >
7+
[![Welcome Banner](https://zenodo.org/api/iiif/record:3695300:BannerWelcome.jpg/full/!750,750/0/default.jpg)](https://zenodo.org/record/3695300)
8+
9+
:tada: Welcome to _The InnerSource Commons_ community, and in particular to our patterns! :tada:
10+
We're really excited to have your input into the project! :sparkling_heart:
11+
12+
<br>If you haven't done so already, please check out our [Contributing Guidelines](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/CONTRIBUTING.md).
13+
If you need to connect more synchronously with members of _The InnerSource Commons_ community, come chat with us in our [Slack workspace](https://innersourcecommons.org/slack).
14+
15+
# Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome
16+
17+
# Comment to be posted to on PRs from first time contributors in your repository
18+
newPRWelcomeComment: |
19+
[![Thank You Banner](https://zenodo.org/api/iiif/record:3695300:BannerThanks.jpg/full/!750,750/0/default.jpg)](https://zenodo.org/record/3695300)
20+
21+
:sparkling_heart: Thanks for opening this pull request! :sparkling_heart: _The InnerSource Commons_ community really appreciates your time and effort to contribute to the project. Please make sure you have read our [Contributing Guidelines](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/CONTRIBUTING.md).
22+
23+
If you are submitting a **new pattern**, the following things will help get your pull request across the finish line! :checkered_flag:
24+
25+
- Confirm that you have used our [pattern template](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/meta/pattern-template.md). Please remove any placeholder text and sections that your pattern did not need.
26+
- We run a number of automated checks on your PR. Please review the output of those checks on the PR itself, and see if any issues got flagged that you can fix yourself.
27+
- Make sure you have added your new pattern to the list of patterns in the main [README.md](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/README.md). If you are unsure where to add your pattern, just let us know by commenting on your PR and we will help you.
28+
29+
This project has a small number of maintainers, volunteering their time to this project. So please be patient and we will get back to you as soon as we can. If we don't acknowledge this pull request after 7 days, feel free to chat to us about it in our [Slack workspace](https://innersourcecommons.org/slack).
30+
31+
# Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge
32+
33+
# Comment to be posted to on pull requests merged by a first time user
34+
firstPRMergeComment: >
35+
[![Congratulations Banner](https://zenodo.org/api/iiif/record:3695300:BannerCongratulations.jpg/full/!750,750/0/default.jpg)](https://zenodo.org/record/3695300)
36+
37+
Congrats on merging your first pull request! :tada:
38+
We here at _The InnerSource Commons_ are proud of you! :sparkling_heart:
39+
Thank you so much for your contribution :gift:

‎.github/dependabot.yml‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: "github-actions"
4+
directory: "/"
5+
schedule:
6+
interval: "weekly"
7+
- package-ecosystem: "bundler"
8+
directory: "/"
9+
schedule:
10+
interval: "weekly"

lint/pattern-template.js renamed to .github/lint-pattern-syntax/pattern-template.js

File renamed without changes.

lint/pattern-template.yml renamed to .github/lint-pattern-syntax/pattern-template.yml

File renamed without changes.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
## For pattern: Maturity Model
2+
Adyen
3+
4+
## For pattern: InnerSource Hackathon
5+
Ingka
6+
Manoharan
7+
Shanmugapriya
8+
Kickstarting
9+
Contribfest
10+
Baumgarten
11+
Trin
12+
El

0 commit comments

Comments
 (0)