Compare commits

...

95 commits

Author SHA1 Message Date
6413b44def Add Dave to our Monday checkin 2024-11-18 11:24:56 -05:00
Louis Elkner-Alfaro
454675908a Update documentation on sending messages to Zulip stream via email. 2024-10-28 13:17:33 -07:00
cb082a937f Bring in and update roles from our internal docs 2024-05-30 23:55:02 -04:00
6f14a630df Format the training leads docs link actually as a markdown link 2024-05-24 12:23:10 -07:00
cb5a880271 Add link to trainings communication repo in a new lead communication page 2024-05-24 12:20:02 -07:00
1b6a134edb Add the operating agreement 2024-04-05 16:55:32 -07:00
98c6dfbdce Fix & title link to reference on filenaming 2024-04-02 05:11:23 -04:00
6685b7491d Add title to stub page that probably we should drop 2024-04-02 05:00:41 -04:00
75fe9ea67b Add days off and all our tools to index 2024-04-02 04:58:21 -04:00
c0ffc78ea8 Include a link to the MyST parser documentation in our documentation's documentation 2024-04-02 03:26:59 -04:00
aa42bd2205 Fix & update wednesday check-in some more 2024-04-02 02:49:13 -04:00
5a027cd5d7 Fix another link that needs to be very explicit 2024-04-02 02:48:51 -04:00
08a92ad9c0 Move IRC stuff out of intra-team comms to 'old' section 2024-04-02 02:48:31 -04:00
8c98755ddf Add copyright and trademarks to the main ToC 2024-04-02 02:48:03 -04:00
d0318ffca4 Update the documentation's documentation 2024-04-02 02:47:48 -04:00
096622fb56 Thoroughly overhaul the content styleguide 2024-04-02 02:47:25 -04:00
05c644234c Tell myst to ignore ambiguous :std:ref: :std:doc: references
at least, hope it only ignors it when it is identical ref and doc (title is same as filename for the same file)
2024-04-02 02:46:40 -04:00
b7625ccf4f Start with a level 1 heading like myst wants 2024-04-02 02:41:54 -04:00
0b9fbbd85b Crosslink to the content styleguide 2024-04-02 02:41:31 -04:00
33e8d82d0d Make reference more explicit so myst/sphinx work 2024-04-02 02:41:13 -04:00
ec1a362836 Combine/update duplicate worker-owner meeting templates 2024-04-02 02:36:12 -04:00
0072289c4e Explicitly tell myst to accept internal links to multiple levels of headings
Some dumb change requires this to be explicit now.
2024-04-02 02:25:21 -04:00
3cb64ae3d9 Replace HTML theme options url with main conf.py setting 2024-04-02 02:24:24 -04:00
c5065f1416 Move Big Blue Button docs to tools, add to index 2024-04-02 02:21:30 -04:00
c8d6382412 Update copyright to current year, use full co-op name, include Chris 2024-04-02 00:08:46 -04:00
89ebc2995b Update for Sphinx 5.3 based on warnings
$ sphinx-build -b html . _build/html
Running Sphinx v5.3.0
WARNING: Invalid configuration value found: 'language = None'. Update your configuration to a valid language code. Falling back to 'en' (English).
WARNING: The canonical_url option is deprecated, use the html_baseurl option from Sphinx instead.
2024-04-02 00:07:43 -04:00
3ec0e54e97 Add first of our making websites section, with a baseline styleguide 2024-04-01 23:17:12 -04:00
53b9c47546 Add document versioning & filenames to index 2024-04-01 23:02:26 -04:00
0870dddf72 Add a client communication section with document versioning as first part 2024-04-01 23:01:29 -04:00
9cee628bc8 Add our Certificate of Organization to our docs 2024-02-22 22:19:56 -05:00
6f5251e050 Update Nextcloud setup doc 2024-02-19 23:52:21 -05:00
06b9aed5dd Make style of code shown clearly HTML 2024-02-14 18:42:11 -05:00
9ae90b7500 Make our own easy to copy-paste 2024-02-14 18:41:40 -05:00
3cc00860c3 Offset the suggestion as code 2024-01-08 21:50:50 -05:00
852e207873 Add title so the link shows up on the index? 2024-01-08 21:44:26 -05:00
1ebe68102c Add our Drupal module project page template to tools section for now 2024-01-08 21:09:02 -05:00
c56866a503 Think i referenced this and forgot to include earlier 2024-01-08 20:06:00 -05:00
499707124a Remove talking to Nedjo he doesn't want to 2023-12-04 11:50:57 -05:00
bbde3e90a9 Update project placement instructions and more importantly add the git add 2023-12-01 22:51:36 -05:00
d4c782d879 Add template for new Drupal project description 2023-11-30 01:04:12 -05:00
ff48975204 Use recent values for OS and python while we are here 2023-11-14 18:49:02 -05:00
b9a41bdf06 Revert "Stop specifying OS version in our RTD config"
Had it backwards, the problem is with Drutopia under-specifying so the
simple way that used to work no longer does.  Ridiculous that
ReadTheDocs makes us specify the build operating system as if we
flipping care 99% of the time.

This reverts commit 6611ee36a1.
2023-11-14 18:47:09 -05:00
6611ee36a1 Stop specifying OS version in our RTD config
This is now exactly the same as Drutopia so i hope both will work.
2023-11-14 18:33:51 -05:00
Chris (wolcen) Thompson
b8eb469d47 Update project assignments 2023-11-14 14:27:43 -05:00
Chris (wolcen) Thompson
8676de2cc6 Update basic Drutopia documentation 2023-11-14 14:25:45 -05:00
f0485155be Include initial commit in startup copy-paste steps 2023-10-19 15:47:06 -04:00
a59c4f3e41 Start to switch default location in docs to our Forgejo 2023-10-19 15:46:47 -04:00
e060254e36 Add retain custom htaccess script (called from composer.json) 2023-10-19 12:37:37 -04:00
bb860d2532 Update 'create a site' instructions for Drupal 10 Drutopia 2023-10-19 12:32:23 -04:00
d61f414387 Fix gitlab links to documentation 2023-09-25 18:53:11 -04:00
d31516cf1c Revise to document what we do consistently that looks good, like sentence case for titles 2023-06-14 10:07:08 -04:00
7fecce43c1 Improve formatting and correct facts on weekly rhythm 2023-06-13 13:31:29 -04:00
ec7c14b634 Update Project Assignments 2023-05-02 16:57:55 +00:00
95cca5f28d Add May First to the days off list 2023-04-26 17:10:41 +00:00
4e27cddbce Fix link 2023-04-21 21:29:19 -04:00
9ce108b525 Add more old per-project docs to our general git usage 2023-04-21 18:32:29 -04:00
f75fba468c Add section on growth by splitting & reorganize docs TOC 2023-04-07 18:54:02 -04:00
75f61553db Add initial docs on Kuma uptime monitoring 2023-04-07 15:59:54 -04:00
21728870f6 Update our current note-taking tools in the descision-making doc 2023-04-07 13:58:10 -04:00
a2732d356b Update copyright & images section, and add sources 2023-04-06 00:49:01 -04:00
d8361b8093 Drop Sanjay from off-day meetings
Except blockers, we should think about Sanjay's blockers.
2023-03-24 12:10:42 -04:00
254a8ddc66 Add hours entered check to Wednesday and add leads scheduling reminder 2023-03-20 16:32:28 +00:00
7456fb57be Change wednesday checkin to operations meeting 2023-03-20 15:23:27 +00:00
Louis Elkner-Alfaro
3601cf04a8 Fix images by cropping 2023-02-24 12:32:17 -08:00
Louis Elkner-Alfaro
053aebddb5 Add line breaks where needed. 2023-02-24 20:19:10 +00:00
Louis Elkner-Alfaro
613766ec5b Update calendars.md 2023-02-24 20:14:22 +00:00
Louis Elkner-Alfaro
7ea2ff0e95 Edit import all calendars image 2023-02-24 11:23:26 -08:00
Louis Elkner-Alfaro
acf3f0ce27 Add calendar import images 2023-02-24 10:53:46 -08:00
c433fa6704 Add Louis to templates 2023-02-01 15:46:19 +00:00
e695e5894b Add days off 2023-01-06 12:39:34 -05:00
b87e19c6fd Update project assignments 2023-01-04 17:57:51 +00:00
caa96364e7 Add 'up-to-date' software to hyphen, improve em-dash examples 2022-12-08 03:07:24 -05:00
Sanjay Jain
ba6d8cadb2 Update monday-checkin.md 2022-11-08 14:28:39 +00:00
Sanjay Jain
19c5c9a40c Update setting-up-email.md 2022-10-14 16:28:29 +00:00
Sanjay Jain
65a2b14b52 Update monday-checkin.md 2022-10-10 15:35:14 +00:00
4476fd85c1 Document writing the docs 2022-10-03 16:49:41 -04:00
0eea0e5eb8 Adding the hash part of the link breaks the whole reference :-( 2022-10-03 16:49:28 -04:00
48d9dfa94d Add instructions to become member of platform project for access to private repos 2022-10-03 16:23:44 -04:00
5b89e1c795 Clarify recommended project locations and fix typo 2022-10-03 16:18:11 -04:00
9274fff813 Slightly update general develop instructions 2022-08-28 23:48:16 -04:00
138de26f48 Add new step to adding people to Nextcloud 2022-08-19 22:36:20 -04:00
4f6a9b4b01 Add note re: Drutopia office hours to ensure it is not forgotten 2022-08-09 17:56:41 +00:00
6c173745d1 Document syncing to test 2022-08-09 11:41:55 -04:00
Keegan Rankin
c32d50dacb Update syncing and config setup documentation 2022-07-20 19:42:55 +00:00
Sanjay Jain
7cdf10ba80 Update friday-review-and-planning.md 2022-07-08 15:24:19 +00:00
Sanjay Jain
346b665b69 Update monday-checkin.md 2022-07-08 15:23:51 +00:00
6171f52fc7 Fix and improve formatting 2022-05-31 15:29:12 -04:00
20e5744903 Clarify and correct new Drutopia site documentation
- update config directory
 - pull out 'notes'
 - tone down build_source messaging
2022-05-31 15:21:08 -04:00
489ebb24fa Fix typo in new DDEV database definition 2022-05-30 12:21:41 -04:00
2ac3d2187b Add reminder about domain setup 2022-05-27 09:54:47 -04:00
90561e9ec2 Add artifacts command to documentation 2022-05-27 09:32:32 -04:00
51597ae294 Update to DDEV's new approach for database version id 2022-05-26 11:37:11 -04:00
92c9cb77a6 Update copyright year 2022-05-03 00:36:51 -04:00
b64d381d1f Put ahoy deploy steps into block; add notes on git merge/rebase 2022-04-01 16:58:18 -04:00
ac1ca32288 Merge branch 'wolcen-main-patch-08376' into 'main'
Updated primary projects list

See merge request agaric/documentation!2
2022-03-07 22:09:13 +00:00
42 changed files with 1065 additions and 449 deletions

View file

@ -1,9 +1,8 @@
version: 2 version: 2
build: build:
os: ubuntu-20.04 os: ubuntu-22.04
tools: tools:
python: "3.9" python: "3.10"
sphinx: sphinx:
configuration: conf.py configuration: conf.py
python: python:

6
README.md Normal file
View file

@ -0,0 +1,6 @@
Test changes to this documentation locally:
```bash
pip install -r requirements.txt
sphinx-build -b html . _build/html
```

View file

@ -2,7 +2,7 @@
*Or, a guide to Agaric's experimental branch of Drutopia.* *Or, a guide to Agaric's experimental branch of Drutopia.*
First, familiarize yourself with Agaric's tone and voice as described in [Agaric's content style guide](content-style-guide). First, familiarize yourself with Agaric's tone and voice as described in [Agaric's content style guide](/content-style-guide.md).
Second, add content! Most commonly, this will be blog posts. Second, add content! Most commonly, this will be blog posts.

View file

@ -12,3 +12,7 @@ Agaric's main web site is built on [Drutopia](https://drutopia.org/) and most of
* The main image, like the summary, is used only for teasers (blog listings, search results). It is therefore requested that you incorporate this image into the early content of your * The main image, like the summary, is used only for teasers (blog listings, search results). It is therefore requested that you incorporate this image into the early content of your
* Do *not* use a title paragraph for blogs, in general, as we don't currently have a way of showing the author and date posted information. * Do *not* use a title paragraph for blogs, in general, as we don't currently have a way of showing the author and date posted information.
```{seealso}
[Agaric's Content Style Guide](/content-style-guide.md)
```

View file

@ -22,11 +22,26 @@
![Dropdown list starting with 'Show All Calendars' with 'New Calendar...' selected.](images/add-new-calendar.png) ![Dropdown list starting with 'Show All Calendars' with 'New Calendar...' selected.](images/add-new-calendar.png)
2. Choose the **On the Network** option and press the **Next** button 2. Choose the **On the Network** option and press the **Next** button
![A dialog to 'Create a new calendar' with two radio button options and the second, 'On the Network' selected.](images/new-calendar-on-network.png) ![A dialog to 'Create a new calendar' with two radio button options and the second, 'On the Network' selected.](images/new-calendar-on-network.png)
3. Choose the **CalDAV** option, paste the private link from the first step in the **Location** text field (leave the username blank) and press the **Next** button 3. Enter your username and the calendar link copied in step 0. Leave 'This location doesn't require credentials' unchecked. The 'Offline Support' option enables calendar use when offline.
![A dialog to 'Create a new calendar' showing four radio buttons, the second one, 'CalDAV', is selected, and a URL is present in a text field labeled 'Location'.](images/thunderbird-add-nextcloud-calendar.png) ![A dialog to 'Create a new calendar' with a username text field option, a location text field expecting a calendar(s) url, and two checkboxes 'This location doesn't require credentials' and 'Offline Support' with 'Offline Support' selected.](images/mayfirst-specific-calendar.png)
4. Give your calendar a name, sticking to the name used in NextCloud to the extent practical, and save the dialog, and you're done! 4. Choose the **CalDAV** option, select the calendar requested from the url in the previous step and press the 'Subscribe button'
5. Ensure your calendar is associated with the e-mail address with which you want to receive invites. ![A dialog to 'Create New calendar' showing a Calendar Type dropdown with, the second option, 'CalDAV', selected, and a checkbox option with the requested calendar](images/choose-caldav-and-calendar.png)
5. Give your calendar a name, sticking to the name used in NextCloud to the extent practical, and save the dialog, and you're done!
6. Ensure your calendar is associated with the e-mail address with which you want to receive invites.
### Subscribe to all Calendars at Once
You can subscribe to all calendars that have been shared with you by using the https://share.mayfirst.org rather than a specific calendar's url.
0. Repeat instructions 1 and 2 from the 'Subscribe to a NextCloud calendar' section.
1. Add your username in the username field and 'https://share.mayfirst.org' in the location field.
![A dialog to 'Create a new calendar' with a username text field option, a location text field expecting a calendar(s) url, and two checkboxes 'This location doesn't require credentials' and 'Offline Support' with 'Offline Support' selected.](images/import-all-calendars.png)
2. Your calendar and all calendars shared with you are listed in the checkboxes. Choose the calendars you would like to import into your Thunderbird calendar.
![A dialog to 'Create New calendar' with checkboxes listing your calendar and all calendars shared with you.](images/choose-calendars-to-import.png)
```{note} ```{note}
Members of Agaric can share their private calendar links to the [internal Agaric wiki](https://gitlab.com/agaric/internal/-/wikis/calendars ). Members of Agaric can share their private calendar links to the [internal Agaric wiki](https://gitlab.com/agaric/internal/-/wikis/calendars ).
``` ```
```{note}
More documentation here: https://support.mozilla.org/en-US/kb/creating-new-calendars
```

View file

@ -0,0 +1,19 @@
# Document versioning and filenames
Please use the following file naming convention for all client-facing filenames:
```
agaric-[client-name]-[purpose]-[yyyy-mm-dd].ext
```
For example:
```
agaric-acme-jetpacks-proposal-2024-05-23.pdf
```
Always use dates, do not use revision numbers, and never use 'final' in a file name. A final-final-FINAL doc is only funny a couple times.
This applies to the final sent versions of files, typically PDFs. The word processing document (.odt, .doc) or Markdown (.md) working versions should follow the same format for their file names, for convenience, but leave off the date.
For more on document naming reasoning see [Orr Shtuhl in *A List Apart* on avoiding trouble by making deliverables easy to find](https://alistapart.com/article/looking-for-trouble/#section2).

15
conf.py
View file

@ -19,9 +19,10 @@
# -- Project information ----------------------------------------------------- # -- Project information -----------------------------------------------------
project = u'Agaric Collective' project = u'Agaric Technology Collective'
copyright = u'2006—2021, Agaric, LLC' copyright = u'2006—2024, Agaric, LLC'
author = u'Benjamin Melançon, Michele Metts, Mauricio Dinarte, David Valdez, Clayton Dewey' author = u'Benjamin Melançon, Michele Metts, Christopher Thompson, Mauricio Dinarte, David Valdez, Clayton Dewey'
html_baseurl = 'https://docs.agaric.coop/'
# The short X.Y version # The short X.Y version
version = u'' version = u''
@ -46,6 +47,9 @@ extensions = [
'sphinx_rtd_theme', 'sphinx_rtd_theme',
] ]
myst_heading_anchors = 5
suppress_warnings = ["myst.xref_ambiguous"]
# Add any paths that contain templates here, relative to this directory. # Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates'] templates_path = ['_templates']
@ -72,7 +76,7 @@ release = u''
# #
# This is also used if you do content translation via gettext catalogs. # This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases. # Usually you set "language" from the command line for these cases.
language = None language = 'en'
# List of patterns, relative to source directory, that match files and # List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files. # directories to ignore when looking for source files.
@ -101,7 +105,6 @@ html_css_files = [
# TIP: If it starts with `html_` it belongs directly as a conf.py option and # TIP: If it starts with `html_` it belongs directly as a conf.py option and
# NOT in html_theme_options. # NOT in html_theme_options.
html_theme_options = { html_theme_options = {
'canonical_url': 'https://docs.agaric.coop/',
'logo_only': True, 'logo_only': True,
} }
@ -125,7 +128,7 @@ html_context = {
"display_gitlab": True, # Integrate Gitlab "display_gitlab": True, # Integrate Gitlab
"gitlab_user": "agaric", # Organization "gitlab_user": "agaric", # Organization
"gitlab_repo": "documentation", # Repo name "gitlab_repo": "documentation", # Repo name
"gitlab_version": "master", # Version "gitlab_version": "main", # Version
"conf_py_path": "/", # Path in the checkout to the docs root "conf_py_path": "/", # Path in the checkout to the docs root
} }

View file

@ -8,32 +8,22 @@ Good content is authentic, useful, and appropriate to its context.
Agaric's voice is straightforward, bold, and irreverant. Agaric's voice is straightforward, bold, and irreverant.
[Write for translation](#writing-for-translation) by writing clear, straightforward English. [Write for accessibility](#writing-for-accessibility) by doing the same and by organizing information, steering clear of distractions, and being mindful of alternative ways of processing information (including non-visual).
### Writing about people * Group related ideas together with descriptive headers and subheaders.
* Lead with the main point.
We write and build apps with a person-first perspective. Being aware of the impact of language is one way for us to live out our [values](values).
* Do not reference age or ability unless it is immediately relevant.
* Avoid gendered language and use the singular they.
* When writing about a person, use their preferred pronouns; if you do not know those, use their name.
* Related resource: [The Conscious Style Guide](https://consciousstyleguide.com/).
### Grammar and mechanics
Some people will read every word you write. Others will just scan. Help everyone by grouping related ideas together and using descriptive headers and subheaders.
Focus your message, and create a hierarchy of information. Lead with the main point or the most important content.
* Use active voice and positive language. * Use active voice and positive language.
* Use short words and sentences. * Use short words and sentences.
* Avoid unnecessary modifiers. * Avoid unnecessary modifiers.
* Use specific examples. * Use specific examples; avoid vague language.
* Avoid vague language. * Be consistent. (This guide is here to help!).
* Be consistent. Adhere to the copy patterns and style points outlined in this guide.
* Do not use contractions as they cheapen the content and provide difficulty for readers of other languages. * Do not use contractions as they cheapen the content and provide difficulty for readers of other languages.
* Use the serial comma. Otherwise, use common sense. (Also known as the Oxford comma, it helps clarify when items in a list of three, four, or more things are their own items.) * Use the serial comma. (Also known as the Oxford comma, it helps clarify when items in a list of three, four, or more things are their own items.)
* Do not use underline for emphasis, and do not use any combination of italic, bold, caps, and underline. * Do not use underline or all-uppercase capitalization for emphasis.
* Avoid combining *italics* and **bold** (***except as last-resort extra emphasis***).
* Skip unnecessary images and when including pictures or graphics provide alt text (image descriptions).
* Lower barriers to taking action by ensuring links are descriptive and that in forms all fields have labels that are present and clear with a minimum of required fields.
* Leave out irrelevent characterizations, especially when [writing about people](#writing-about-people).
* When in doubt, read your writing out loud. * When in doubt, read your writing out loud.
Many of these repeat or reinforce George Orwell's six rules from his essay "Politics and the English Language" (1946), and it is worth keeping all of them in mind, especially the last: Many of these repeat or reinforce George Orwell's six rules from his essay "Politics and the English Language" (1946), and it is worth keeping all of them in mind, especially the last:
@ -45,30 +35,9 @@ Many of these repeat or reinforce George Orwell's six rules from his essay "Poli
> (v) Never use a foreign phrase, a scientific word, or a jargon word if you can think of an everyday English equivalent. > (v) Never use a foreign phrase, a scientific word, or a jargon word if you can think of an everyday English equivalent.
> (vi) Break any of these rules sooner than say anything barbarous. > (vi) Break any of these rules sooner than say anything barbarous.
[Much more on grammar and mechanics](#grammar-and-mechanics).
### Writing for accessibility ## Goals and Principles when writing
* Create a hierarchy, with the most important information first.
Place similar topics in the same paragraph, and clearly separate different topics with headings.
* Use plain language. Write short sentences and familiar words.
* Links should provide information on the associated action or destination. Avoid saying “click here” or “learn more.”
* Avoid using images when descriptive text will do.
* Avoid directional instructions or language that requires the reader to see the layout or design of the page.
* Label inputs on forms with clear names and use appropriate tags. Think carefully about what fields are necessary, and especially which ones you mark as required.
### Writing for translation
* Use active voice.
* Avoid double negatives.
* Do not use contractions as they cheapen the content and provide difficulty for readers that do not speak English of other languages.
* Avoid using synonyms for the same word in a single piece of writing.
* Write briefly, but do not sacrifice clarity for brevity. You may need to repeat or add words to make the meaning of your sentences clear to a translator.
* Avoid slang, idioms, and cliches.
* Avoid unnecessary abbreviations.
## Writing Goals and Principles
With every piece of content we publish, we aim to: With every piece of content we publish, we aim to:
@ -91,7 +60,7 @@ We strive to have the same voice all the time, but our tone changes to suit the
Agaric's voice is: Agaric's voice is:
* Straightforward and earnest. * Straightforward and earnest.
* Unafraid of bold and even visionary calls to action. * Unafraid of bold, perhaps visionary, calls to action.
* Irreverant; the human condition is too serious to take anything too seriously. * Irreverant; the human condition is too serious to take anything too seriously.
### Tone ### Tone
@ -106,9 +75,15 @@ Agaric has a sense of humor, so feel free to be funny when it is appropriate and
We have been saying it from the beginning and are only half-serious about it. We have been saying it from the beginning and are only half-serious about it.
## Writing About People ## Writing about people
We write the same way we build software: with a person-first perspective. Whether writing for an internal or external audience, write for and about other people in a way that is compassionate, inclusive, and respectful. Being aware of the impact of our language will help make Agaric a better place to work and a better steward of our values in the world. We write the same way we build software: with a person-first perspective. Being aware of the impact of language is one way for us to live out our [values](values.md).
* Do not reference age or ability unless it is immediately relevant.
* Avoid gendered language and use the singular they.
* When writing about a person, use their preferred pronouns; if you do not know those, use their name.
Write for and about other people in a way that is compassionate, inclusive, and respectful.
### Age ### Age
@ -173,8 +148,9 @@ Use the adjective "blind" to describe a person who is unable to see. Use "low vi
## Grammar and mechanics ## Grammar and mechanics
Adhering to certain rules of grammar and mechanics helps us keep our writing clear and consistent. This section will lay out our house style, which applies to all of our content unless otherwise noted in this guide. (We cover a lot of ground in this section—the search feature will help if you are looking for something in particular.) Adhering to certain rules of grammar and mechanics helps us keep our writing clear and consistent. This section will lay out our house style, which applies to all of our content unless otherwise noted in this guide. (We cover a lot in this section— search if you are looking for something in particular.)
(grammar-and-mechancis-basics)=
### Basics ### Basics
Write for all readers. Some people will read every word you write. Others will just skim. Help everyone read better by grouping related ideas together and using descriptive headers and subheaders. Write for all readers. Some people will read every word you write. Others will just skim. Help everyone read better by grouping related ideas together and using descriptive headers and subheaders.
@ -219,18 +195,15 @@ One exception is when you want to specifically emphasize the action over the sub
#### Capitalization #### Capitalization
We use a few different forms of capitalization. Title case capitalizes the first letter of every word except articles, prepositions, and conjunctions. We use title case for the titles of pages, including blog posts and basic pages. Sentence case capitalizes the first letter of the first word. We use sentence case for headlines, subheads, and headings as well as every other sentence. (We do **not** use title case, which capitalizes the first letter of every word except articles, prepositions, and conjunctions. Instead, we let the formatting of titles carry the weight and use the more natural sentence case.)
Sentence case capitalizes the first letter of the first word.
When writing out an e-mail address or website URL, use all lowercase. When writing out an e-mail address or website URL, use all lowercase.
micky@agaric.com
micky@agaric.coop
agaric.com agaric.com
Do not capitalize random words in the middle of sentences. Here are some words that we never capitalize in a sentence. For more, see the Word list. Do not capitalize words in the middle of sentences that are not proper nouns. We do not capitalize internet, web, or e-mail. For more, see the [word list](#word-list-specialized-vocabulary).
website
internet
online
e-mail
#### Contractions #### Contractions
@ -256,25 +229,25 @@ Numbers over 3 digits get commas:
1,000 1,000
150,000 150,000
Write out big numbers in full. Abbreviate them if there are space restraints, as in a tweet or a chart: 1k, 150k. Write out big numbers in full. Abbreviate them if there are space restraints, as in a microblog post or a chart: 1k, 150k.
#### Dates #### Dates
Generally, spell out the day of the week and the month. Abbreviate only if space is an issue in the app. Generally, spell out the day of the week and the month. Abbreviate only if space is an issue.
Saturday, January 24 Saturday, January 24
Sat., Jan. 24 Sat., Jan. 24
#### Decimals and fractions #### Decimals and fractions
Spell out fractions. Spell out fractions.
Yes: two-thirds
No: 2/3 No: 2/3
Yes: two-thirds
Best: ⅔ Best: ⅔
Use decimal points when a number cant be easily written out as a fraction, like 1.375 or 47.2. Use decimal points when a number cant be easily written out as a fraction, like 1.375 or 47.2.
#### Percentages #### Percentages
This depends on context - use the % symbol or spell out "percent" depending on which looks best. This depends on context use the % symbol or spell out "percent" depending on which looks best.
#### Ranges and spans #### Ranges and spans
@ -327,6 +300,7 @@ the 90s
When referring to decades more than 100 years ago, be more specific: When referring to decades more than 100 years ago, be more specific:
the 1650s the 1650s
the 1890s the 1890s
the 1910s
#### Punctuation #### Punctuation
@ -365,15 +339,16 @@ Otherwise, use common sense. If you are unsure, read the sentence out loud. Wher
Use a hyphen (-) without spaces on either side to link words into single phrase Use a hyphen (-) without spaces on either side to link words into single phrase
* first-time user * first-time user
* up-to-date software
To indicate a span or range, use an n-dash (). To indicate a span or range, use an n-dash ().
* MondayFriday * MondayFriday
Use an em dash (—) with a space after the dash to offset an aside. Use a true em dash, not hyphens (- or --). Use an em dash (—) with a space after the dash to offset an aside. Use a true em dash, not hyphens (- or --). If the set-off phrase has the main part of the sentence continuing, do not include spaces around the em dash. If the set-off phrase ends the sentence, leave a space after the em dash.
* Multivariate testing—just one of our new Pro features—can help you grow your business. * We could build immensely powerful movements from the ground up, if we had a way to agree how shared resources of movements—including communication channels—would be controlled.
* Austin thought Brad was the doughnut thief, but he was wrong— it was Lain. * Migrate does almost all the work for us— we just need to create a Migration class and configure it using the constructor.
##### Ellipses ##### Ellipses
@ -421,7 +396,7 @@ Use single quotation marks for quotes within quotes.
##### Semicolons ##### Semicolons
Go easy on semicolons; they usually support long, complicated sentences that could be simplified. Try an em dash (—) instead, or simply start a new sentence. Go easy on semicolons; they usually support long, complicated sentences that could be simplified. Try an em dash (—) instead, or simply start a new sentence.
##### Ampersands ##### Ampersands
@ -435,23 +410,25 @@ Do not use ampersands unless one is part of a company or brand name.
When referring generally to a file extension type, use all uppercase without a period. Add a lowercase s to make plural. When referring generally to a file extension type, use all uppercase without a period. Add a lowercase s to make plural.
* GIF
* PDF * PDF
* HTML * PNG
* JPGs * JPGs
When referring to a specific file, the filename should be lowercase: When referring to a specific file, the filename should be lowercase:
* slowclap.gif
* agaric-example-org-website-proposal.pdf * agaric-example-org-website-proposal.pdf
* ben-twitter-profile.jpg * micky-twitter-profile.jpg
```{seealso}
Agaric's [document versioning and filename conventions]().
```
##### Pronouns ##### Pronouns
If your subject's gender is unknown or irrelevant, use "they," "them," and "their" as a singular pronoun. Use "he/him/his" and "she/her/her" pronouns as appropriate. Do not use "one" as a pronoun. If your subject's gender is unknown or irrelevant, use "they," "them," and "their" as a singular pronoun. Use "he/him/his" and "she/her/her" pronouns as appropriate. Do not use "one" as a pronoun.
```{seealso} ```{seealso}
For more on writing about gender, see [Writing about people](writing-about-people). For more on writing about gender, see [Writing about people](#writing-about-people).
``` ```
##### Quotations ##### Quotations
@ -468,7 +445,7 @@ Marketing team
Support department Support department
Capitalize individual job titles when referencing to a specific role. Do not capitalize when referring to the role in general terms. Capitalize individual job titles when referencing to a specific role. Do not capitalize when referring to the role in general terms.
Our new Marketing Manager starts today. Our new Marketing Manager starts today.
All the managers ate donuts. All the managers ate doughnuts.
Do not refer to someone as a “guru,” “rockstar,” or “wizard” unless they literally are one. Do not refer to someone as a “guru,” “rockstar,” or “wizard” unless they literally are one.
**Schools** **Schools**
@ -516,8 +493,8 @@ Do not use underline formatting, which typically indicates a link, and do not us
## Write positively ## Write positively
Use positive language rather than negative language. One way to detect negative language is to look for words like "cannot" or "do not" (or the contractions we want to remove anyway, "can't" and "don't"). Use positive language rather than negative language. One way to detect negative language is to look for words like "cannot" or "do not" (or the contractions we want to remove anyway, "can't" and "don't").
Yes: To get a donut, stand in line. Yes: To get a doughnut, go to the kitchen.
No: You can't get a donut if you don't stand in line. No: You can't get a doughnut if you don't go to the kitchen.
## Content Types ## Content Types
@ -604,11 +581,13 @@ Example: Agaric Launches Data Visualization Platform for Healthcare Providers
Every piece of content we publish is supported by a number of smaller pieces. This section lays out our style in regards to these web elements, and explains our approach to the tricky art of SEO. Every piece of content we publish is supported by a number of smaller pieces. This section lays out our style in regards to these web elements, and explains our approach to the tricky art of SEO.
(web-elements-guidelines)=
### Guidelines ### Guidelines
#### Alt text #### Alt text
Alt text is a way to label images, and it is especially important for people who cant see the images on our website. Alt text should describe the image in a brief sentence or two. Alt text is a way to label images, and it is especially important for people who cant see the images on our website. Alt text should describe the image in a brief sentence or two.
For more on how and why we use alt text, read the Accessibility section. For more on how and why we use alt text, read the [Accessibility section](#writing-for-accessibility).
#### Buttons #### Buttons
@ -649,18 +628,19 @@ Use title case, unless the heading is a punctuated sentence. If the heading is a
#### Links #### Links
Provide a link whenever youre referring to something on an external website. Use links to point users to relevant content and trusted external resources. Provide a link when you refer to anything web-accessible that is relevant and hosted by a trusted external resources.
Do not include preceding articles (a, an, the, our) when you link text. For example: Do not include preceding articles (a, an, the, our) when you link text. For example:
Yes: Read the [content style guide](content-style-guide#links) for details. Yes: Read the [content style guide](content-style-guide.md#links) for details.
No: Read [the content style guide](content-style-guide#links) for details. No: Read [the content style guide](content-style-guide.md#links) for details.
If a link comes at the end of a sentence or before a comma, dont link the punctuation mark. If a link comes at the end of a sentence or before a comma, do not link the punctuation mark.
Do not say things like “Click here!” or “Click for more information” or “Read this.” Write the sentence as you normally would, and link relevant keywords. Do not say things like "Click here!" or "Click for more information" or "Read this." Write the sentence as you normally would, and link relevant keywords.
Links should look different than regular copy, strong text, or emphasis text. They should have a hover state that communicates they are interactive, and should have a distinct active and visited state. When setting the hover state of links, be sure to include focus state as well, to help readers using assistive technologies and touch devices.
```{seealso}
[Baseline Styleguide: Links](making-websites/baseline-styleguide.md#links)
```
#### Lists #### Lists
@ -706,7 +686,7 @@ Give every image descriptive alt text.
Agaric blog posts are written by people from all over the company, not just those with “writer” in their job titles. We love having people who know the most about what they do blog about their work. The person most familiar with the subject is in the best position to convey it, and other Agarics can help with brainstorming and editing as needed. Agaric blog posts are written by people from all over the company, not just those with “writer” in their job titles. We love having people who know the most about what they do blog about their work. The person most familiar with the subject is in the best position to convey it, and other Agarics can help with brainstorming and editing as needed.
(writing-blog-posts-basics)=
### Basics ### Basics
We update the main Agaric blog a couple times every month. We generally publish: We update the main Agaric blog a couple times every month. We generally publish:
@ -892,7 +872,7 @@ People should be able to keep up with Agaric however they choose, so we should i
### Guidelines ### Guidelines
E-mail newsletters use our [voice and tone](#id1) and follow our [grammar and mechanics](grammar-and-mechanics), in addition to these newsletter-specific considerations. E-mail newsletters use our [voice and tone](#voice-and-tone) and follow our [grammar and mechanics](#grammar-and-mechanics), in addition to these newsletter-specific considerations.
### Consider all elements ### Consider all elements
@ -967,7 +947,7 @@ Agaric has a presence on most major social media platforms. Here are our most ac
### Guidelines ### Guidelines
Our writing for social media should generally follow the style points outlined in the [Voice and tone](#id1) and [Grammar and mechanics](#id3) sections. Here are some additional pointers. Our writing for social media should generally follow the style points outlined in the [Voice and tone](#voice-and-tone) and [Grammar and mechanics](#grammar-and-mechanics) sections. Here are some additional pointers.
#### Write concisely, but clearly #### Write concisely, but clearly
@ -1005,8 +985,9 @@ We employ hashtags rarely and deliberately. We may use them to promote an event
## Writing for Accessibility ## Writing for Accessibility
We are always working to make our content more accessible and usable to the widest possible audience. Writing for accessibility goes way beyond making everything on the page available as text. It also affects the way you organize content and guide readers through a page. Depending on the audience and country, there may be laws governing the level of accessibility required. At minimum, an accessible version should be available. Accessibility includes users of all mental and physical capacities, whether situational (broken glasses!) or more permanent. We are always working to make our content more accessible and usable to the widest possible audience. Writing for accessibility goes way beyond making everything on the page available as text. It also affects the way you organize content and guide readers through a page. Depending on the audience and country, there may be laws governing the level of accessibility required. At minimum, an accessible version should be available. Accessibility includes users of all mental and physical capacities, whether situational (broken glasses, circling helicopters) or more permanent.
(accessibility-basics)=
### Basics ### Basics
We write for a diverse audience of readers who all interact with our content in different ways. We aim to make our content accessible to anyone using a screen reader, keyboard navigation, or Braille interface, and to users of all cognitive capabilities. We write for a diverse audience of readers who all interact with our content in different ways. We aim to make our content accessible to anyone using a screen reader, keyboard navigation, or Braille interface, and to users of all cognitive capabilities.
@ -1021,6 +1002,16 @@ As you write, consider the following:
Many of the best practices for writing for accessibility echo those for writing technical content, with the added complexity of markup, syntax, and structure. Many of the best practices for writing for accessibility echo those for writing technical content, with the added complexity of markup, syntax, and structure.
* Some people will read every word you write. Others will scan. Help everybody by grouping related ideas together and by using descriptive headers and subheaders.
* Create a hierarchy, with the most important information first.
Place similar topics in the same paragraph, and clearly separate different topics with headings.
* Use plain language. Write short sentences and familiar words.
* Links should provide information on the associated action or destination. Avoid writing "click here" or "learn more."
* Avoid using images when descriptive text will do.
* Avoid directional instructions or language that requires the reader to see the layout or design of the page.
* Label inputs on forms with clear names and use appropriate tags. Think carefully about what fields are necessary, and especially which ones you mark as required.
(accessibility-guidelines)=
### Guidelines ### Guidelines
* Avoid directional language * Avoid directional language
@ -1057,13 +1048,13 @@ Write short sentences and use familiar words. Avoid jargon and slang. If you nee
### Use alternative text ### Use alternative text
The alt tag is the most basic form of image description, and it should be included on all images. The language will depend on the purpose of the image: The alt tag is the most basic form of image description, and it should be included on all images. The wording will depend on the purpose of the image:
* If it is a creative photo or supports a story, describe the image in detail in a brief caption. * If it is a creative photo or supports a story, describe the image in detail in a brief caption.
* If the image is serving a specific function, describe what is inside the image in detail. People who do not see the image should come away with the same information as if they had. * If the image is serving a specific function, describe what is inside the image in detail. People who do not see the image should come away with the same information as if they had.
* If you are sharing a chart or graph, include the data in the alt text so people have all the important information. * If you are sharing a chart or graph, include the data in the alt text so people have all the important information.
Each browser handles alt tags differently. Supplement images with standard captions when possible. Supplement images with standard captions when you realize .
### Make sure closed captioning is available ### Make sure closed captioning is available
@ -1075,6 +1066,7 @@ Aim for high contrast between your font and background colors. Tools in the reso
Images should not be the only method of communication, because images may not load or may not be seen. Avoid using images when the same information could be communicated in writing. Images should not be the only method of communication, because images may not load or may not be seen. Avoid using images when the same information could be communicated in writing.
(accessibility-resources)=
### Resources ### Resources
* [Accessibility evaluation for web writers](http://www.4syllables.com.au/2013/05/writers-accessibility-evaluation/) * [Accessibility evaluation for web writers](http://www.4syllables.com.au/2013/05/writers-accessibility-evaluation/)
@ -1084,10 +1076,19 @@ Images should not be the only method of communication, because images may not lo
## Writing for Translation ## Writing for Translation
* Use active voice.
* Avoid double negatives.
* Do not use contractions as they cheapen the content and provide difficulty for readers that do not speak English of other languages.
* Avoid using synonyms for the same word in a single piece of writing.
* Write briefly, but do not sacrifice clarity for brevity. You may need to repeat or add words to make the meaning of your sentences clear to a translator.
* Avoid slang, idioms, and cliches.
* Avoid unnecessary abbreviations.
Agaric serves users in several countries and territories, not just the United States. As our user base grows, it becomes more and more important that our content is accessible to people around the world. Agaric serves users in several countries and territories, not just the United States. As our user base grows, it becomes more and more important that our content is accessible to people around the world.
We call the process of writing copy for translation "internationalization." This section will address things you can do to help international audiences, including translators, better comprehend your text. We call the process of writing copy for translation "internationalization." This section will address things you can do to help international audiences, including translators, better comprehend your text.
(writing-for-translation-basics)=
### Basics ### Basics
We try to write all of our content in standard, straightforward English that can be understood by users with limited English proficiency. It is much easier for a translator to clearly communicate ideas written in straightforward, uncomplicated sentences. We try to write all of our content in standard, straightforward English that can be understood by users with limited English proficiency. It is much easier for a translator to clearly communicate ideas written in straightforward, uncomplicated sentences.
@ -1102,9 +1103,10 @@ Use positive words when talking about positive situations. For example, because
Avoid contractions. Avoid contractions.
(writing-for-translation-guidelines)=
### Guidelines ### Guidelines
When writing for international audiences, we generally follow what is outlined in the Voice and tone and Grammar and mechanics sections. But in this section more than others, some style points contradict what is stated elsewhere in the guide. If you are writing something to be translated, the guidelines in this section should take precedence. When writing for international audiences, we generally follow what is outlined in the Voice and tone and [Grammar and mechanics](#grammar-and-mechanics) sections. But in this section more than others, some style points contradict what is stated elsewhere in the guide. If you are writing something to be translated, the guidelines in this section should take precedence.
#### Consider cultural differences #### Consider cultural differences
@ -1189,31 +1191,31 @@ No: From our backyard, we could hear the planes taking off from the airport.
* Slang, idioms, and cliches * Slang, idioms, and cliches
* Contractions (English contractions may be harder to translate) * Contractions (English contractions may be harder to translate)
* Shortened words, even if they are common in English (use “application,” not “app”) * Shortened words, even if they are common in English (use "application," not "app")
* Uncommon foreign words (use "genuine,” not “bona fide”) * Uncommon foreign words (use "genuine," not "bona fide")
* Unnecessary abbreviations (use "for example,” not “e.g.”) * Unnecessary abbreviations (use "for example," not "e.g.")
* Converting one part of speech into another if it isnt already commonly used (use "Send us an e-mail” instead of “message us”) * Verbing nouns (or otherwise converting one part of speech into another) if the usage is not common (use "Send us an e-mail" instead of "message us")
* Non-standard or indirect verb usage (use “he says,” not “hes like” or “he was all”) * Non-standard or indirect verb usage (use "he said," not "he was like" or "he was all")
* Double negatives * Double negatives
* Synonyms, generally. Do not use a lot of different words for the same thing in a single piece of writing. Instead of mixing it up with “campaign,” “newsletter,” “bulletin,” etc., pick one term and stick with it. * Using multiple different words for the same thing in a single piece of writing. Instead of mixing it up with "campaign," "newsletter," "bulletin," etc., pick one term and stick with it.
#### Beware words with multiple meanings #### Beware words with multiple meanings
“Once” (could mean “one time,” “after,” “in the past,” or “when”) "Once" (could mean "one time," "after," "in the past," or "when")
Yes: After you log in, you will see your account's Dashboard. No: Once you log in, you will see your account's dashboard.
No: Once you log in, you will see your account's Dashboard. Yes: After you log in, you will see your account's dashboard.
“Right” (could mean “correct,” “the opposite of left,” “politically conservative,” etc.) "Right" (could mean "correct," "the opposite of left," or "reactionary")
Yes: In the File Manager, click the correct image and drag it to the pane at right. No: Click the right image and drag it to the right pane.
No: In the File Manager, click the right image and drag it to the right pane. Yes: Click the correct image and drag it to the pane at right.
“Since” (could refer to a point in time, or a synonym of “because”) "Since" (could refer to a point in time, or a synonym of "because")
Yes: Because you already have a complete mailing list, you can send your campaign at any time. No: Since you already registered, this information will be filled out for you.
No: Since you already have complete mailing list, you can send your campaign at any time. Yes: Because you already registered, this information will be filled out for you.
“Require” plus an infinitive (could confuse the relationship between subject and object) "Require to" (could confuse the relationship between subject and object)
Yes: Autoresponders can be configured and sent from paid accounts. No: A registered account is required to post to the forum. (This could imply that people with paid accounts are required to send autoresponders.)
No: A paid account is required to send autoresponders. (This could imply that users with paid accounts are required to send autoresponders.) Yes: An account
“Has” or “have” plus past participle (could confuse the relationship between subject and object) “Has” or “have” plus past participle (could confuse the relationship between subject and object)
Yes: The folder contains sent campaigns. Yes: The folder contains sent campaigns.
@ -1225,9 +1227,9 @@ No: The folder has sent campaigns.
When writing for an international audience, use the metric system. Spell out all units and avoid abbreviation. When writing for an international audience, use the metric system. Spell out all units and avoid abbreviation.
**Currency** **Currency**
Many countries call their currency "the dollar," but the value is going to differ between countries. The US dollar is not the same as the Canadian dollar, for example. So its important to specify. Many countries call their currency "the dollar," but the value is going to differ between countries. The US dollar is not the same as the Canadian dollar, for example. So it is important to specify.
Avoid colloquial phrases that relate to money, like “five-and-dime,” “greenbacks,” or “c-notes.” These will not translate well. Avoid colloquial phrases that relate to money, like "five-and-dime," "greenbacks," or "c-notes." These will not translate well.
## Word list (specialized vocabulary) ## Word list (specialized vocabulary)
@ -1287,13 +1289,6 @@ Originally adapted from [Mailchimp's content style guide](https://styleguide.mai
* [Marketing documentation](marketing). * [Marketing documentation](marketing).
* Information about [copyrights and trademarks](copyright-and-trademarks). * Information about [copyrights and trademarks](copyright-and-trademarks).
* [Baseline Styleguide](making-websites/baseline-styleguide.md)
* [Agaric website basics](agaric-website/basics) and [content entry on Agaric's sites](agaric-website/agaric-site-content-entry). * [Agaric website basics](agaric-website/basics) and [content entry on Agaric's sites](agaric-website/agaric-site-content-entry).
``` ```
```{toctree}
---
caption: See also
---
copyright-and-trademarks
```

View file

@ -10,34 +10,43 @@ Copyright protection begins when the work is first created and it doesnt requ
Copyright notice on the work is not required but it is recommended, since it cuts off a defense of innocent infringement. Copyright notice on the work is not required but it is recommended, since it cuts off a defense of innocent infringement.
### Copyright at Agaric ### Copyright at Agaric
We default to a Creative Commons license whenever possible. We default to a Creative Commons license whenever possible.
### Other creators copyrights ### Other creators copyrights
We respect the copyright of other creators. If we want to use someone elses copyrighted work, we have to obtain a license from the owners.
A copyright license spells out these terms:
Where we can use the work
How long we can use it for
How much well pay them for the use
Whether or not were the only ones who can use the work
What we can do with the work
Any restrictions on our use (for example, that we can use it online but not on a billboard)
A common license will read something like this:
“You grant Agaric a perpetual, worldwide, non-exclusive, royalty free license to display, distribute, and publish the Work in our marketing in any medium now known or later developed.”
### Social media and copyright We respect the copyright of other creators. If we want to use someone else's copyrighted work, we have to obtain a license from the owners.
This is an area where the letter of the law and common practice sometimes differ. A copyright license spells out these terms:
Social media posts often include copyrighted elements like pictures, GIFs, or pieces of writing. If youre using a copyrighted element in a commercial manner on social media, you should request permission from the copyright holder. Since Agaric is a company, we defer to the position that our use will be perceived as commercial. But if youre using it in a more informative or commentary way, like sharing a meme to indicate how you feel about a news story, you may not need to request permission.
- Where we can use the work
- How long we can use it for
- How much we'll pay them for the use
- Whether or not were the only ones who can use the work
- What we can do with the work
- Any restrictions on our use (for example, that we can use it online but not on a billboard)
For example:
"You grant Agaric a perpetual, worldwide, non-exclusive, royalty free license to display, distribute, and publish the Work in our marketing in any medium now known or later developed."
Regardless, you should always link to the source of the copyrighted element youre using, and never make it look like you created work that belongs to someone else.
### Image use and copyright ### Image use and copyright
Agaric oftentimes uses original images in our blog posts. If you use an image, photo, or other design element made by someone outside Agaric, get permission first. Once you have permission, always give the copyright owner credit and link back to the original source.
Images retrieved via Google image search are not licensed for fair use, but many images are available under license through stock photo websites, or open for use under a Creative Commons license. Flickr has a great search feature for images available under Creative Commons licenses. Agaric prefers using original images in our blog posts. Ben has a lot of random images and you can check with him on subjects. We also have a relationship with [Martin Owens to commission digital vector art made with Inkscape](https://www.patreon.com/doctormo).
If you use an image, photo, or other design element made by someone outside Agaric, get permission first. Once you have permission, always give the copyright owner credit and link back to the original source.
Attribution goes for Creative Commons also, and we have an attribution field built into our website for blog posts.
Good sources of Creative Commons or open access (public domain) images include:
- Flickr: https://www.flickr.com/search/?license=4%2C5%2C6%2C9%2C10
- Smithsonian Institute: https://www.si.edu/openaccess
### Other licenses ### Other licenses
#### Creative Commons licenses #### Creative Commons licenses
Instead of the standard “all rights reserved,” some creators choose to make their work available for public use with different levels of attribution required. Thats what weve done with this style guide. Find a breakdown of licenses on the Creative Commons website. Instead of the standard “all rights reserved,” some creators choose to make their work available for public use with different levels of attribution required. Thats what weve done with this style guide. Find a breakdown of licenses on the Creative Commons website.
We love to share our work and use these licenses frequently. We love to share our work and use these licenses frequently.

24
days-off.md Normal file
View file

@ -0,0 +1,24 @@
# Days off
Collective-wide holidays.
Federal holidays:
* New Year's Day
* Martin Luther King Jr. Day
* Presidents' Day
* Memorial Day
* Juneteenth
* Independence Day
* Labor Day
* Columbus Day
* Armistice Day (kids these days call it Veterans Day)
* Thanksgiving Day
* Christmas Day
And the real labor day:
* May First
Source: [opm.gov/policy-data-oversight/pay-leave/federal-holidays](https://www.opm.gov/policy-data-oversight/pay-leave/federal-holidays/)
Given that most of these move around year to year to be the closest Monday, we have added the .ics file OPM provided (goes through 2030) to the [Agaric shared calendar](calendars) via Thunderbird's "Events & Tasks » Import".

View file

@ -21,6 +21,6 @@ Choose facilitator at start of meeting, or by predetermined system
Facilitator's job is to keep things moving. Facilitator's job is to keep things moving.
Someone other than the facilitator should be designated for taking notes, but everyone can help (we will always do meeting notes on a text pad allowing real-time collaborative note-taking, such as [Etherpad](https://etherpad.org/). Someone other than the facilitator should be designated for taking notes, but everyone can help (we will always do meeting notes on a text pad allowing real-time collaborative note-taking, such as [Etherpad](https://etherpad.org/), the shared notes built into [Big Blue Button](https://bigbluebutton.org/), or [HedgeDoc](https://hedgedoc.org/) (this is our current main tool for notes, which we self-host).
See template at [worker-owner meeting](worker-owner-meeting). See template at [worker-owner meeting](worker-owner-meeting).

View file

@ -2,7 +2,7 @@
Welcome to the meta section of our documentation where we document how to do documentation! Welcome to the meta section of our documentation where we document how to do documentation!
Edit or add. That's the primary instruction. You can edit directly on [gitlab.com/agaric/documentation](https://gitlab.com/agaric/documentation) (for example, the edit link on this page takes you to [gitlab.com/agaric/documentation/blob/master/documentation.md](https://gitlab.com/agaric/documentation/blob/master/documentation.md)). If you aren't a member of Agaric, GitLab will helpfully offer to fork the documentation to your own namespace so that you can make a merge request with your documentation suggestion. Edit or add. That's the primary instruction. You can edit directly on [gitlab.com/agaric/documentation](https://gitlab.com/agaric/documentation) (for example, the edit link on this page takes you to [gitlab.com/agaric/documentation/blob/main/documentation.md](https://gitlab.com/agaric/documentation/blob/main/documentation.md)). If you aren't a member of Agaric, GitLab will helpfully offer to fork the documentation to your own namespace so that you can make a merge request with your documentation suggestion.
```{tip} ```{tip}
This documentation page is a good one to copy or refer to for an example of MyST formatting. And of course anyone can come and clean up formatting later. This documentation page is a good one to copy or refer to for an example of MyST formatting. And of course anyone can come and clean up formatting later.
@ -15,7 +15,7 @@ We like [Gitlab's approach](https://about.gitlab.com/handbook/git-page-update/#w
Somewhere is better than nowhere. Somewhere is better than nowhere.
Don't worry about [translation](translation). Don't worry about [translation](translation.md).
## Guidelines ## Guidelines
@ -25,22 +25,51 @@ Don't worry about [translation](translation).
* Topics which are of general application can be abstracted, put in this repository, and linked to at this documentation. * Topics which are of general application can be abstracted, put in this repository, and linked to at this documentation.
```{note} ```{note}
In doing documentation we are living our [values](values) of encouraging continuous learning, appreciating new ideas, giving back to the communities we are part of, and valuing long-term relationships. In doing documentation we are living our [values](values.md) of encouraging continuous learning, appreciating new ideas, giving back to the communities we are part of, and valuing long-term relationships.
``` ```
## Local preview ## This documentation
### Setup * Written primarily in Markdown, enhanced by Sphinx.
* Uses the [MyST parser for cross-referencing](https://myst-parser.readthedocs.io/en/latest/syntax/cross-referencing.html).
### Local preview
#### Setup
```bash ```bash
sudo apt install python3-sphinx sudo apt install python3-sphinx
pip3 install -r requirements.txt pip3 install -r requirements.txt
``` ```
### Generating #### Generating
Running this documentation locally: Running this documentation locally:
```bash ```bash
sphinx-build -b html . _build/html sphinx-build -b html . _build/html
``` ```
### Useful examples
#### Including the table of contents of another page
```
```{toctree}
---
caption: See also
---
copyright-and-trademarks
```
```
Produces this:
```{toctree}
---
caption: See also
---
copyright-and-trademarks
```

View file

@ -1,7 +1,7 @@
# Friday Shipping Meeting # Friday Shipping Meeting
```md ```md
# 2021 {Date}, Friday shipping # 2023 {Date}, Friday shipping
## Major Accomplishments/Hurdles Cleared? ## Major Accomplishments/Hurdles Cleared?
@ -22,17 +22,9 @@
### Micky ### Micky
* *
### Sanjay ### Louis
* *
### Hours Entered
* Ben -
* Chris -
* Keegan -
* Mauricio -
* Micky -
* Sanjay -
## Availability ## Availability
@ -53,5 +45,5 @@
* Keegan - * Keegan -
* Mauricio - * Mauricio -
* Micky - * Micky -
* Sanjay - * Louis
``` ```

5
growth.md Normal file
View file

@ -0,0 +1,5 @@
# Growing Agaric
As a mushroom, Agaric has several options for growth. We don't want to become [the largest organism on the planet](https://www.scientificamerican.com/article/strange-but-true-largest-organism-is-fungus/) so our approach is [mitosis](https://www.sciencedirect.com/science/article/abs/pii/S0074769608600790)— dividing.
If or when Agaric grows to more than about a dozen worker-owners, we plan to split into two equal groups, opearting under the banner of Agaric and sharing resources, but federating as small worker cooperatives rather than changing our basic internal structure to scale.

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View file

@ -32,9 +32,11 @@ maxdepth: 2
roles roles
intra-team-communication intra-team-communication
lead-communication
calendars calendars
project-management-with-gitlab project-management-with-gitlab
weekly-rhythm weekly-rhythm
days-off
``` ```
@ -45,42 +47,62 @@ maxdepth: 2
--- ---
tools/git-setup tools/git-setup
tools/git-usage
tools/setting-up-nextcloud tools/setting-up-nextcloud
tools/securely-sending-files-nextcloud
tools/setting-up-email tools/setting-up-email
tools/big-blue-button
tools/recommended-local-project-locations
tools/creating-new-drutopia-site tools/creating-new-drutopia-site
tools/deploying-drutopia-updates tools/deploying-drutopia-updates
tools/ddev-local-development-environment tools/ddev-local-development-environment
tools/drutopia-member-server-access tools/drutopia-member-server-access
tools/upgrading-drutopia-platform-elizabeth-sites
tools/uptime-monitoring
tools/inspecting-logs
templates/drupal-module-project
``` ```
```{toctree} ```{toctree}
--- ---
caption: Agaric.coop caption: Writing for Agaric
maxdepth: 2 maxdepth: 2
--- ---
content-style-guide
agaric-website/basics agaric-website/basics
agaric-website/agaric-site-content-entry agaric-website/agaric-site-content-entry
agaric-website/tags-and-taxonomy-terms agaric-website/tags-and-taxonomy-terms
agaric-website/translation agaric-website/translation
agaric-website/short-urls agaric-website/short-urls
marketing
copyright-and-trademarks
``` ```
```{toctree} ```{toctree}
--- ---
caption: Important other topics caption: How We Work
maxdepth: 2 maxdepth: 2
--- ---
content-style-guide
marketing
decision-making decision-making
reference-docs growth
client-communication/document-versioning-filenames
```
```{toctree}
---
caption: Documentation
maxdepth: 2
---
documentation documentation
shared-technical-notes shared-technical-notes
reference-docs
``` ```
--- ---
If you've found your here way to Agaric's internal documentation but don't know about the [Agaric technology collective](https://agaric.coop/) itself yet, please check out our [development and consulting services](https://agaric.coop/services), [our trainings](https://agaric.coop/training), and [our initiatives](https://agaric.coop/initiatives) or read [about Agaric](https://agaric.coop/about-agaric) and [ask us for help or collaboration](https://agaric.coop/ask). If you've found your here way to Agaric's internal documentation but don't know about the [Agaric technology collective](https://agaric.coop/) itself yet, please check out our [development and consulting services](https://agaric.coop/services), [our trainings](https://agaric.coop/training), and [our initiatives](https://agaric.coop/initiatives) or read [about Agaric](https://agaric.coop/about-agaric) and [ask us for help or collaboration](https://agaric.coop/ask).

View file

@ -17,7 +17,7 @@ Our primary tool for internal communication is now [Zulip](https://zulipchat.com
### E-mailing messages to Zulip ### E-mailing messages to Zulip
When BCCing a Zulip stream on a message to someone, Use the default that can be found under stream settings (click the gear icon you can get to from the down caret): When BCCing a Zulip stream on a message to someone, Use the default that can be found under stream settings. First press 'Channel settings' menu item in 'Main menu' (gear icon in top right), then filter for your channel and finally press the 'Generate email address' to reveal the address. Although the button says 'Generate email address' the same addresses are used so it is more a revelation than a generation:
``` ```
project.785f16fc671a5d8c0f2d4fbb161f16b3.show-sender@streams.zulipchat.com project.785f16fc671a5d8c0f2d4fbb161f16b3.show-sender@streams.zulipchat.com
@ -29,6 +29,8 @@ When forwarding an e-mail to a Zulip stream, swap out `.show-sender` for `.inclu
project.785f16fc671a5d8c0f2d4fbb161f16b3.include-footer.include-quotes.prefer-html@streams.zulipchat.com project.785f16fc671a5d8c0f2d4fbb161f16b3.include-footer.include-quotes.prefer-html@streams.zulipchat.com
``` ```
The subject of the email message will be used as the topic name in the stream.
```{info} ```{info}
More about [sending a message to a Zulip stream by e-mail](https://zulipchat.com/help/message-a-stream-by-email) More about [sending a message to a Zulip stream by e-mail](https://zulipchat.com/help/message-a-stream-by-email)
``` ```
@ -38,31 +40,14 @@ Hover over a stream in the lefthand column to get to stream settings; there's al
Stream settings pages are also key for getting the e-mail address for sending e-mail to streams, https://agaric.zulipchat.com/help/message-a-stream-by-email (their help is lightly customized to organization, so that "Your streams" link will work) Stream settings pages are also key for getting the e-mail address for sending e-mail to streams, https://agaric.zulipchat.com/help/message-a-stream-by-email (their help is lightly customized to organization, so that "Your streams" link will work)
### Zulip <-> IRC bridge ## Real-time meetings with BigBlueButton
This package has been installed using (sort-of) the instructions at https://agaric.zulipchat.com/integrations/doc/irc Agaric uses BigBlueButton (BBB) video chat for our daily Stand Up meetings and for client meetings. We have an account with [meet.coop](https://meet.coop) but currently primarily use our own instance, [meet.agaric.coop](https://meet.agaric.coop).
The bot currently lives on irc.agaric.com under the zulip account with software at /srv/zulip. Regular meetings include [Monday](monday-checkin.md), [Wednesday](wednesday-checkin.md), and [Friday](friday-review-and-planning.md) [weekly rhythm meetings](weekly-rhythm.md). More irregular meetings include as-needed [worker-owner meetings](worker-owner-meeting.md).
To launch the bot, login as root, and then:
```
su - zulip # become user for bot for agaric
startzulip
ctrl+d # switch back to root
su - zulip-nichq # become user for bot for nichq
startzulip
```
This should start zulip in the background and you can now disconnect. If there are errant processes, use `ps aux|grep zulip` to locate PIDs and `kill {pid}` of each. Also, you can `kick bot_zulip` on IRC if you are an IRC operator, which should also kill an existing process.
## BBB - BigBlueButton video chat
Agaric uses BigBlueButton for our daily Stand Up meetings and for client meetings. We have an account with http://meet.coop and you can find our room is here: https://ca.meet.coop/b/aga-52x-qa8
## IRC ## IRC
\#agaric \#agaric
Agaric also maintains a channel for worker-owners only. NOTE: We have not been using IRC sine Zulip arrived, but some of us still hang out there and use it to connect with other developers that are not in Zulip. Agaric also maintains a channel for worker-owners only. NOTE: We have not been using IRC sine Zulip arrived, but some of us still hang out there and use it to connect with other developers that are not in Zulip.
@ -76,103 +61,6 @@ Freenode has given us operator privileges for this channel. To use it, we need
Some of our best clients are also on IRC, as are our partners at [May First Movement Technology (#mayfirst on irc.indymedia.org)](https://support.mayfirst.org/wiki/faq/chat). Some of our best clients are also on IRC, as are our partners at [May First Movement Technology (#mayfirst on irc.indymedia.org)](https://support.mayfirst.org/wiki/faq/chat).
### IRC Bouncer ###
**This is currently not active. There is an admin account installed/configured, but not auto-starting, and currently not running. If any member wants to restore the service for themselves, feel free!**
In order to acquire a 1.7 edition of ZNC, the backports for stretch were added and utilized for this package.
ZNC 1.7 is an IRC bouncer listening on port 1025 of irc.agaric.com.
A web interface is available for management at: https://irc.agaric.com:1025 that enables module maintenance, etc.
The entire app runs under the local system user znc-admin (just run `znc` as the znc-admin user).
### Web-based IRC client: The Lounge
We can access our IRC (and any other IRC) through:
https://irc.agaric.com
#### The Lounge Management
[The Lounge is a self-hosted web IRC client](https://thelounge.github.io/) we're using to provide https://irc.agaric.com
Everyone in [SSH_public_keys](https://gitlab.com/agaric/internal/-/wikis/SSH-Public-Keys) as of 2017 August has access to the Digital Ocean droplet (1cpu/512mb) hosting it:
`ssh root@irc.agaric.com`
##### Upgrading
TheLounge is installed manually via dpkg as there is no current apt source for it.
To upgrade via dpkg:
- Go to https://github.com/thelounge/thelounge/releases/ and select your release
- Copy the link to the deb file at the bottom of the releases page.
- `ssh root@irc.agaric.com` and run `wget -L -o thelounge.deb <copied link>`
- Install the new package with `dpkg -i thelounge.deb`
- The service should restart, but if it does not, `systemctl restart thelounge`
There is also an option to use `thelounge update` but it is unclear if this is preferable to using dpkg.
##### Configuration
TheLounge is bound to the loopback address at port 9000 and reverse proxied via NGINX. The configuration and user files are located at `/srv/lounge/`. The configuration is pointed at via an Environment variable (the variable can be inspected/changed via `systemctl edit thelounge`).
##### TLS(/SSL)
NGINX will bounce HTTP connections to HTTPS and handle encryption via reverse proxy. Certbot is installed and should be handling automatic renewals with reload of NGINX as needed.
##### Management
Note that because the ENV var is depended upon for our configuration, and it runs as thelounge user. In order to facilitate simpler management, an alias is defined for thelounge under the root account.
This is configured for you (as root):
```
alias thelounge='sudo -u thelounge THELOUNGE_HOME=/srv/lounge thelounge'
```
List users:
```
thelounge list
```
Addin a user:
```
thelounge add username
```
Where `username` is the IRC nick for the user you are adding.
reset pwd:
```
thelounge reset username
```
Additional management commands can be found in [TheLounge documentation](https://thelounge.chat/docs/users).
### IRC Bot (Limnoria aka Supybot)
#### History
Stefan Freudenberg selected and installed Supybot as Agaric's general-purpose information bot (in particular expanding issue numbers to issue titles) circa 2010. Early in 2018 Chris Thompson upgraded Supybot — "a robust (it doesn't crash), user friendly (it's easy to configure) and programmer friendly (plugins are extremely easy to write) Python IRC bot. It aims to be an adequate replacement for most existing IRC bots. It includes a very flexible and powerful ACL system for controlling access to commands, as well as more than 50 builtin plugins providing around 400 actual commands" — to Limnoria — a project which continues development of Supybot.
It is installed on Simone.
#### Common commands
@later tell username A message
(until we override @tell to use the far more useful 'later' flavor)
#### Official documentation
* https://github.com/ProgVal/Limnoria
* http://doc.supybot.aperio.fr/en/latest/index.html
## Internal notes ## Internal notes
Agarics can get more detail [on communication channels in the wiki](https://gitlab.com/agaric/internal/wikis/Communication-Channels). Agarics can get more detail [on communication channels in the wiki](https://gitlab.com/agaric/internal/wikis/Communication-Channels).

4
lead-communication.md Normal file
View file

@ -0,0 +1,4 @@
# Lead communication
## Trainings
For members of Agaric, tips on what needs to be communicated with people who have requested training can be found here: [Training leads communication document](https://gitlab.com/agaric/trainings)

View file

@ -0,0 +1,11 @@
# Baseline Styleguide
A styleguide with no style of its own, but nevertheless providing the basic requirements any look-and-feel guidelines must conform to.
```{seealso}
For writing (rather than presentation), see [Agaric's Content Style Guide](/content-style-guide.md).
```
## Links
Links should look different than regular text, strong text, or emphasized text. They should have a hover state that communicates they are interactive, and should have a distinct active and visited state. When setting the hover state of links, be sure to include focus state as well, to help readers using assistive technologies and touch devices.

View file

@ -10,7 +10,7 @@ The Monday checkin ensures everyone is on the same page starting the week. It i
Here is a template that can be pasted into a text pad (ideally markdown-aware). Here is a template that can be pasted into a text pad (ideally markdown-aware).
```md ```md
# 2021 MONTH XXth Monday Checkin # 2024 MONTH XXth Monday Checkin
## Checkins ## Checkins
@ -19,27 +19,54 @@ Here is a template that can be pasted into a text pad (ideally markdown-aware).
* Mauricio * Mauricio
* Chris * Chris
* Micky * Micky
* Sanjay
* Ben * Ben
* Keegan * Keegan
* Louis
* Dave
## Leads, or important projects ## Leads, or important projects
*Remember to discuss scheduling for any leads meetings*
### Hours Entered (previous week)
* Ben -
* Chris -
* Keegan -
* Mauricio -
* Micky -
* Louis -
* Dave -
## Pair programming avilability for the week
* Ben -
* Chris -
* Keegan -
* Mauricio -
* Micky -
* Louis -
* Dave -
* Drutopia Office Hours - anything to do with Nedjo this week?
### Project assignments ### Project assignments
* MASS Design Group - MASS Continuous Improvement (Ben/Dave)
* Tulane - Therapy Fidelity App (Chris/Keegan)
* Spry Group - Type Network (Keegan/Chris)
* Agaric e.K. - C-Team support (Zeit) (Mauricio/Ben)
* Action Information - Green Calendar (Sanjay/Chris)
* BMOP - bmop.org site upgrade (Keegan/Mauricio)
* Portside - Portside (Ben/Chris) * Portside - Portside (Ben/Chris)
* DrupalEasy.com - Training assistance (Mauricio/Keegan) * UC Irvine - PECE (Ben/Keegan)
* CRLA - CRLA.org Development & Support (Ben/Keegan) * Vermont Housing Finance Agency - VHFA (Chris/Ben)
* Eliot School of Fine & Applied Arts - Eliot School Site & CRM (Ben/Keegan) * HousingWorks, Inc. - HousingWorks (Louis/Ben)
* MASS Design Group - MASS Continuous Improvement (Ben/Keegan) * Teachers with GUTS - Project GUTS/TWIG/Making Sense of Models (Ben/Louis)
* Grassroots Economic Organizing (GEO) - GEO Support (Micky/Ben) * Sahara Reporters - Sahara Reporters site migration (Ben/Sanjay)
* UC Davis - Patient HM Brain Science Website (Sanjay/Keegan) * NC Housing Finance Agency - NCHFA Maintenance (Louis/Ben)
* Agaric e.K. - C-Team support (Zeit) (Mauricio/Louis)
* UPenn - Jacket2 Upgrade to D10 (Mauricio/Keegan)
* Kalamuna - Outsourcing (Mauricio/Ben)
* CRLA - CRLA.org Development & Support (Keegan/Ben)
* Action Information - Green Calendar (Sanjay/Louis)
* Grassroots Economic Organizing (GEO) - GEO Support (Ben/Louis)
* Eliot School of Fine & Applied Arts - Eliot School Site & CRM (Keegan/Ben)
Only listed @ score of 2+ for others see https://share.mayfirst.org/f/11573025 Only listed @ score of 2+ for others see https://share.mayfirst.org/f/11573025
@ -51,8 +78,7 @@ Only listed @ score of 2+ for others see https://share.mayfirst.org/f/11573025
* Sanjay * Sanjay
* Ben * Ben
* Keegan * Keegan
* Louis
## Availability
## Task allocation ## Task allocation

View file

@ -0,0 +1,17 @@
# Certificate of Organization
Agaric Technology Collective's Certificate of Organization filed with the Commonwealth of Massachusetts (most states call the equivalent document "Articles of Organization") reads:
> 1. The exact name of the limited liability company is: **AGARIC, LLC**
> 3. The general character of business, and if the limited liability company is organized to render professional service, the service to be rendered:
>
> **AGARIC HELPS PEOPLE CREATE AND USE ONLINE TOOLS AND PLATFORMS THAT MEET
THEIR AND THEIR COMMUNITIES' NEEDS. THE COLLECTIVE GOAL IS THE MOST POWER
POSSIBLE FOR ALL PEOPLE OVER THEIR OWN LIVES, AND TOWARD THAT GOAL THE
COLLECTIVE TAKES ON WEB DEVELOPMENT PROJECTS THAT CONNECT IDEAS,
RESOURCES, AND PEOPLE. WE USE AND CONTRIBUTE TO OPEN SOURCE FREE SOFTWARE
AND ENSURE EVERYTHING WE BUILD IS FREE, AND THE WAY WE BUILD IT OPEN, FOR OUR
CLIENTS TO TRULY OWN.**
In Massachusetts, member-management is the default structure for an LLC. (Other state forms would have required choosing between member-managed and manager-managed.)

117
old/irc.md Normal file
View file

@ -0,0 +1,117 @@
# IRC
### Zulip <-> IRC bridge
This package has been installed using (sort-of) the instructions at https://agaric.zulipchat.com/integrations/doc/irc
The bot currently lives on irc.agaric.com under the zulip account with software at /srv/zulip.
To launch the bot, login as root, and then:
```
su - zulip # become user for bot for agaric
startzulip
ctrl+d # switch back to root
su - zulip-nichq # become user for bot for nichq
startzulip
```
This should start zulip in the background and you can now disconnect. If there are errant processes, use `ps aux|grep zulip` to locate PIDs and `kill {pid}` of each. Also, you can `kick bot_zulip` on IRC if you are an IRC operator, which should also kill an existing process.
### IRC Bouncer ###
**This is currently not active. There is an admin account installed/configured, but not auto-starting, and currently not running. If any member wants to restore the service for themselves, feel free!**
In order to acquire a 1.7 edition of ZNC, the backports for stretch were added and utilized for this package.
ZNC 1.7 is an IRC bouncer listening on port 1025 of irc.agaric.com.
A web interface is available for management at: https://irc.agaric.com:1025 that enables module maintenance, etc.
The entire app runs under the local system user znc-admin (just run `znc` as the znc-admin user).
### Web-based IRC client: The Lounge
We can access our IRC (and any other IRC) through:
https://irc.agaric.com
#### The Lounge Management
[The Lounge is a self-hosted web IRC client](https://thelounge.github.io/) we're using to provide https://irc.agaric.com
Everyone in [SSH_public_keys](https://gitlab.com/agaric/internal/-/wikis/SSH-Public-Keys) as of 2017 August has access to the Digital Ocean droplet (1cpu/512mb) hosting it:
`ssh root@irc.agaric.com`
##### Upgrading
TheLounge is installed manually via dpkg as there is no current apt source for it.
To upgrade via dpkg:
- Go to https://github.com/thelounge/thelounge/releases/ and select your release
- Copy the link to the deb file at the bottom of the releases page.
- `ssh root@irc.agaric.com` and run `wget -L -o thelounge.deb <copied link>`
- Install the new package with `dpkg -i thelounge.deb`
- The service should restart, but if it does not, `systemctl restart thelounge`
There is also an option to use `thelounge update` but it is unclear if this is preferable to using dpkg.
##### Configuration
TheLounge is bound to the loopback address at port 9000 and reverse proxied via NGINX. The configuration and user files are located at `/srv/lounge/`. The configuration is pointed at via an Environment variable (the variable can be inspected/changed via `systemctl edit thelounge`).
##### TLS(/SSL)
NGINX will bounce HTTP connections to HTTPS and handle encryption via reverse proxy. Certbot is installed and should be handling automatic renewals with reload of NGINX as needed.
##### Management
Note that because the ENV var is depended upon for our configuration, and it runs as thelounge user. In order to facilitate simpler management, an alias is defined for thelounge under the root account.
This is configured for you (as root):
```
alias thelounge='sudo -u thelounge THELOUNGE_HOME=/srv/lounge thelounge'
```
List users:
```
thelounge list
```
Addin a user:
```
thelounge add username
```
Where `username` is the IRC nick for the user you are adding.
reset pwd:
```
thelounge reset username
```
Additional management commands can be found in [TheLounge documentation](https://thelounge.chat/docs/users).
### IRC Bot (Limnoria aka Supybot)
#### History
Stefan Freudenberg selected and installed Supybot as Agaric's general-purpose information bot (in particular expanding issue numbers to issue titles) circa 2010. Early in 2018 Chris Thompson upgraded Supybot — "a robust (it doesn't crash), user friendly (it's easy to configure) and programmer friendly (plugins are extremely easy to write) Python IRC bot. It aims to be an adequate replacement for most existing IRC bots. It includes a very flexible and powerful ACL system for controlling access to commands, as well as more than 50 builtin plugins providing around 400 actual commands" — to Limnoria — a project which continues development of Supybot.
It is installed on Simone.
#### Common commands
@later tell username A message
(until we override @tell to use the far more useful 'later' flavor)
#### Official documentation
* https://github.com/ProgVal/Limnoria
* http://doc.supybot.aperio.fr/en/latest/index.html

178
operating-agreement.md Normal file
View file

@ -0,0 +1,178 @@
## Operating agreement for Agaric, LLC
[Note: For a corporation, these would be called bylaws.]
## ARTICLE I: Company Formation
### 1.1 FORMATION.
The Members hereby form a worker owned and run Limited Liability Company ("Collective") subject to the provisions of the Limited Liability Company Act as currently in effect as of this date, 2011 May 18. Articles of Organization shall be filed with the Secretary of the Commonwealth.
### 1.2 NAME.
The name of the Collective shall be Agaric.
### 1.3 REGISTERED AGENT.
Up-to-date information can be found at:
https://corp.sec.state.ma.us/CorpWeb/CorpSearch/CorpSummary.aspx?sysvalue=HjjIHbOP890XgjC6fWoReGpnXzMPqiTgvN_a5t8CxoA-
### 1.4 TERM.
The Collective shall continue for a perpetual period.
(a) Members whose capital interest as defined in Article 2.2 exceeds 50 percent vote for
dissolution; or
(b) Any event which makes it unlawful for the business of the Collective to be carried on
by the Members; or
(c) The death, resignation, expulsion, bankruptcy, retirement of a Member or the
occurrence of any other event that terminates the continued membership of a Member
of the Collective; or
(d) Any other event causing dissolution of this Limited Liability Company under the laws
of the Commonwealth of Massachusetts.
### 1.5 CONTINUANCE OF COMPANY.
Notwithstanding the provisions of ARTICLE 1.4, in the event of an occurrence described in ARTICLE 1.4(c), if there are at least two remaining Members, said remaining Members shall have the right to continue the business of the Collective. Such right can be exercised only by the unanimous vote of the remaining Members within ninety (90) days after the occurrence of an event described in ARTICLE 1.4(c). If not so exercised, the right of the Members to continue the business of the Collective shall expire.
### 1.6 BUSINESS PURPOSE.
The purpose of the Collective is to help people create and use tools and platforms that meet their needs. The Collective goal is the most power possible for all people over their own lives, and toward that goal the Collective takes on projects that connect ideas, resources, and people. The Collective uses and contributes to open source free software and ensure everything built free from restrictions, and the way it is built open, for clients to truly own.
### 1.7 PRINCIPAL PLACE OF BUSINESS.
The location of the principal place of business of the Collective shall be:
Boston, MA 02134
Principal place of business may be changed from time to time to a location the Managers select. Members may also use home-offices or any other workplace of their choice.
### 1.8 THE MEMBERS.
The name and place of residence of each Member is located at https://corp.sec.state.ma.us/CorpWeb/CorpSearch/CorpSummary.aspx?sysvalue=HjjIHbOP890XgjC6fWoReGpnXzMPqiTgvN_a5t8CxoA-
### 1.9 ADMISSION OF ADDITIONAL MEMBERS.
Except as otherwise expressly provided in the Agreement, no additional members may be admitted to the Collective through issuance by the Collective of a new interest in the Collective, without the prior unanimous written consent of the Members.
## ARTICLE II Capital Contributions
### 2.1 INITIAL CONTRIBUTIONS.
The Members initially shall contribute to the Company capital as described in Exhibit 3 attached to this Agreement. The agreed total value of such property and cash is $18,000.
### 2.2 ADDITIONAL CONTRIBUTIONS.
Except as provided in ARTICLE 6.2, no Member shall be obligated to make any additional contribution to the Company's capital.
## ARTICLE III Profits, Losses and Distributions
### 3.1 PROFITS/LOSSES.
For financial accounting and tax purposes the Company's net profits or net losses shall be determined on an annual basis and shall be allocated to the Members in proportion to each Member's relative capital interest in the Company as set forth in Exhibit 2 as amended from time to time in accordance with Treasury Regulation 1.704-1.
### 3.2 DISTRIBUTIONS.
The Members shall determine and distribute available funds annually or at more frequent intervals as they see fit. Available funds, as referred to herein, shall mean the net cash of the Company available after appropriate provision for expenses and liabilities, as determined by the Managers. Distributions in liquidation of the Company or in liquidation of a Member's interest shall be made in accordance with the positive capital account balances pursuant to Treasury Regulation 1.704-l(b)(2)(ii)(b)(2). To the extent a Member shall have a negative capital account balance, there shall be a qualified income offset, as set forth in Treasury Regulation 1.704-l(b)(2)(ii)(d).
### ARTICLE IV: Management
### 4.1 MANAGEMENT OF THE BUSINESS.
The name and place of residence of each Manager is located at https://corp.sec.state.ma.us/CorpWeb/CorpSearch/CorpSummary.aspx?sysvalue=HjjIHbOP890XgjC6fWoReGpnXzMPqiTgvN_a5t8CxoA-
Each Member is automatically a Manager. By a vote of the Members holding a majority of the capital interests in the Collective, as set forth in Schedule 2 as amended from time to time, shall elect so many additional non-Member Managers as the Members determine.
### 4.2 MEMBERS.
The liability of the Members shall be limited as provided pursuant to applicable law. No Member shall be an agent of any other Member of the Collective solely by reason of being a Member.
### 4.3 POWERS OF MANAGERS.
The Managers are authorized on the Collective's behalf to make all decisions as to
(a) the sale, development lease or other disposition of the Collective's assets;
(b) the purchase or other acquisition of other assets of all kinds;
(c) the management of all or any part of the Collective's assets;
(d) the borrowing of money and the granting of security interests in the Collective's assets;
(e) the pre-payment, refinancing or extension of any loan affecting the Company's assets;
(f) the compromise or release of any of the Collective's claims or debts; and,
(g) the employment of persons, firms or corporations for the operation and management of the company's business.
In the exercise of their management powers, the Collective are authorized to execute and deliver
(a) all contracts, conveyances, assignments leases, sub-leases, franchise agreements, licensing agreements, management contracts and maintenance contracts covering or affecting the Collective's assets;
(b) all checks, drafts and other orders for the payment of the Collective's funds;
(c) all promissory notes, loans, security agreements and other similar documents; and,
(d) all other instruments of any other kind relating to the Collective's affairs, whether like or unlike the foregoing.
### 4.4 NOMINEE.
Title to the Collective's assets shall be held in the Collective's name or in the name of any nominee that the Managers may designate. The Managers shall have power to enter into a nominee agreement with any such person, and such agreement may contain provisions indemnifying the nominee, except for his willful misconduct.
### 4.6 COMPANY INFORMATION.
Upon request, the Managers shall supply to any member information regarding the Collective or its activities. Each Member or his authorized representative shall have access to and may inspect and copy all books, records and materials in the Manager's possession regarding the Company or its activities. The exercise of the rights contained in this ARTICLE 4.6 shall be at the requesting Member's expense.
### 4.7 EXCULPATION.
Any act or omission of the Managers, the effect of which may cause or result in loss or damage to the Company or the Members if done in good faith to promote the best interests of the Company, shall not subject the Managers to any liability to the Members.
### 4.8 INDEMNIFICATION.
The Company shall indemnify any person who was or is a party defendant or is threatened to be made a party defendant, pending or completed action, suit or proceeding, whether civil, criminal, administrative, or investigative (other than an action by or in the right of the Company) by reason of the fact that he is or was a Member of the Company, Manager, employee or agent of the Company, or is or was serving at the request of the Company, for instant expenses (including attorney's fees), judgments, fines, and amounts paid in settlement actually and reasonably incurred in connection with such action, suit or proceeding if the Members determine that he acted in good faith and in a manner he reasonably believed to be in or not opposed to the best interest of the Company, and with respect to any criminal action proceeding, has no reasonable cause to believe his/her conduct was unlawful. The termination of any action, suit, or proceeding by judgment, order, settlement, conviction, or upon a plea of "no lo Contendere" or its equivalent, shall not in itself create a presumption that the person did or did not act in good faith and in a manner which he reasonably believed to be in the best interest of the Company, and, with respect to any criminal action or proceeding, had reasonable cause to believe that his/her conduct was lawful.
### 4.9 RECORDS.
The Managers shall cause the Company to keep at its principal place of business the following:
(a) a current list in alphabetical order of the full name and the last known street address
of each Member;
(b) a copy of the Certificate of Formation and the Company Operating Agreement and all
amendments;
(c) copies of the Company's federal, state and local income tax returns and reports, if
any, for the three most recent years;
(d) copies of any financial statements of the limited liability company for the three most
recent years.
## ARTICLE V: Compensation
### 5.1 MANAGEMENT FEE.
Any Manager rendering services to the Collective shall be entitled to compensation commensurate with the value of such services.
### 5.2 REIMBURSEMENT.
The Collective shall be able to establish policies for full or partial reimbursement to the Managers or Members for direct out-of-pocket expenses incurred by them in managing the Company.
## ARTICLE VI: Bookkeeping
### 6.1 BOOKS.
The Managers shall maintain complete and accurate books of account of the Collective's affairs at the Collective's principal place of business. Such books shall be kept on such method of accounting as the Managers shall select. The company's accounting period shall be the calendar year.
### 6.2 MEMBER'S ACCOUNTS.
The Managers shall maintain separate capital and distribution accounts for each member. Each member's capital account shall be determined and maintained in the manner set forth in Treasury Regulation 1.704-l(b)(2)(iv) and shall consist of his initial capital contribution increased by:
(a) any additional capital contribution made by him/her;
(b) credit balances transferred from her distribution account to her capital account;
and decreased by:
(c) distributions to him/her in reduction of Collective capital;
(d) the Member's share of Collective losses if charged to his/her capital account.
### 6.3 REPORTS.
The Managers shall close the books of account after the close of each calendar year, and shall prepare and send to each member a statement of such Member's distributive share of income and expense for income tax reporting purposes.
## ARTICLE VII: Transfers
### 7.1 ASSIGNMENT.
If at any time a Member proposes to sell, assign or otherwise dispose of all or any part of her interest in the Collective, such Member shall first make a written offer to sell such interest to the other Members at a price determined by mutual agreement. If such other Members decline or fail to elect such interest within thirty (30) days, and if the sale or assignment is made and the Members fail to approve this sale or assignment unanimously then, pursuant to the applicable law, the purchaser or assignee shall have no right to participate in the management of the business and affairs of the Collective. The purchaser or assignee shall only be entitled to receive the share of the profits or other compensation by way of income and the return of contributions to which that Member would otherwise be entitled.
## LISTING OF MEMBERS
An up-to-date list of Members of the Collective is located at:
https://corp.sec.state.ma.us/CorpWeb/CorpSearch/CorpSummary.aspx?sysvalue=HjjIHbOP890XgjC6fWoReGpnXzMPqiTgvN_a5t8CxoA-

134
roles.md
View file

@ -2,28 +2,148 @@
## Rotating cooperative-wide roles ## Rotating cooperative-wide roles
In the interest of distributing types of work equitably and skill-sharing, a number of tasks rotate monthly or somewhat randomly. In the interest of distributing types of work equitably and skill-sharing, a number of tasks ideally rotate— weekly, or monthly, or somewhat randomly.
### Standup facilitator ### Meeting facilitator
### Monday planning facilitator * Standup facilitator (all regular meetings)
* Monday/Friday planning facilitator (can be different than facilitator in standup part).
* Worker-owner meeting facilitator
### Friday shipping facilitator In practice standup facilitator has been Keegan 95% of the time, with Chris and Sanjay a bit more likely to pick up the planning facilitation.
### Worker-owner meeting facilitator
### Timecop ### Timecop
* Checks to ensure people get their time in each day by the end of Monday planning, mid-week daily standup, and Friday shipping. Works with people individually after the meeting to * Checks to ensure people get their time in each day by the end of Monday planning, mid-week daily standup, and Friday shipping. Works with people individually after the meeting to get the time in.
In practice, we have not done this for a while.
### Scribe ### Scribe
* Write one sentence about each person's main activity in a week, summarizing our activities in an accessible way in blog posts such as "The Week That Was: Agaric's March 30th to April 3rd" * Write one sentence about each person's main activity in a week, summarizing our activities in an accessible way in blog posts such as "The Week That Was: Agaric's March 30th to April 3rd"
* As our main storyteller for the month, think about ways to weave the work we're doing every week into a narrative; if we can't fit our work into a narrative we're probably straying from our strategic goals. * As our main storyteller for the month, think about ways to weave the work we're doing every week into a narrative; if we can't fit our work into a narrative we're probably straying from our strategic goals.
Never put into practice and we really need to.
### Trainer/Educator
* Write informative blog posts
* Create curricula for trainings
* Submit speaking and training sessions
* Speak/training at events
* Help organize trainings, camps and conferences
Primary: Mauricio, Chris
Secondary: Keegan, Ben
### Infrastructure
* Create and support working development environment for each project
* Create and support staging site for each project
* Maintain deployment workflows for each project
Primary: Chris
Secondary: Louis, Ben
### Leads
* Cold calls (we have never done this)
* Future event scanner - list events of interest in advance
* Respond to requests received by contact form or email
* Write proposals
* Coordinate estimates
* Manage marketing-oriented pages on website
## Marketing
* Write blog posts
* Post to social media
* Coordinate sponsorship of events
* Network at events
* Take pictures and video
* Promote events we are part of
## Contractor Relations
* Communicate hours and progress with contractors
* Make sure contractors send invoice each month
* Make sure contractors get paid each month
* Check in on how contractors are feeling about their work and projects
* Check in with Agaric team on how things are going with contractors they work with
Currently making no effort to rotate.
Primary: Sanjay
Secondary: Micky
### Team Management
* Review planned time usage on a weekly basis (start of week, based on reports in Monday team tempo meeting)
* Make suggestions to try to ensure Agaric worker-owners combine for at least 60 billed hours a week (60x4x150=$36K/mo=clearing payroll).
* Works with project leads to find recommended tasks.
* Pairs with contractor relations for overall use of available Agaric time.
* Implement Team Tempo process
Unfilled since Clayton left.
## Project-specific roles ## Project-specific roles
### Lead ### Lead
#### Client Relations
* Hold monthly [sensing](https://gitlab.com/agaric/internal/wikis/meetings/sensing) and sprint planning/review meetings
* Send monthly ROS and project update
* Make sure payments from client are happening on time
* Update Agaric team on how a client is doing and how their projects are going in worker-owner meetings
This role as described has not really been filled since Clayton was here.
### Developer/Designer ### Developer/Designer
#### Design
* Create wireframes/prototypes
* Create design mockups
* Create styleguide using HTML and SASS
Primary: Unfilled
#### Development
* Use contributed and custom modules to implement functionality
* Translate styleguide into working website
* Review others' code
* Test code
* Deploy approved changes
Primary: Ben, Mauricio, Louis
Secondary: Chris, Keegan
### User Research
* Define and measure project goals and key performance indicators (KPIs
* Define key user groups
* Conduct research to learn users' needs and motivations
### Project Manager
* Plan sprints
* Ensure issues have acceptance criteria and relevant info
* Facilitate project meetings
* Facilitate key milestones such as security updates, redesigns and launches
## Responding to Inadequate Performance of a Role's Duties
* Person noticing an issue address directly. If issue persists, call a meeting with the whole group to discuss a resolution/change.
## Suggestions for role-fluidity
* Define documentation requirements and tool usage for the role (e.g. effective use of GitLab for developers, detailed tracking in CMS tool)
* Specific email addresses for particular roles
* Document requirements of a role - hard skills, soft skills, and required resources (e.g. excellent communication, GnuCash familiarity, etc).
* "Pair-programming" approach
```{note}
Related: <a href="https://gitlab.com/agaric/internal/wikis/worker-owners">Worker Owners</a>
```

View file

@ -0,0 +1,36 @@
# Drupal Module Project Page template
*This is what Drupal provides as a prompt for the description of a new module:*
```html
Here, write an introduction that summarizes the purpose and function of this project with a focus on users brand new to Drupal. Answer the question: What solution does this module provide? The first 200 characters of this will be shown when browsing projects. Alternatively, you can click “Edit summary” above and enter the exact summary you want (it should be 200 characters or less).
<h3 id="module-project--features">Features</h3>
Here, answer the following questions: What is the basic functionality? What unique features does enabling this project add? When and why would someone use this module? What use cases are there?
<h3 id="module-project--post-installation">Post-Installation</h3>
How does this module actually work once I install it? Should I go to a config page? Should I look for a new content type? Should I go and manage my text formats? Provide an overview of the configuration process and any other special considerations for the module.
<h3 id="module-project--additional-requirements">Additional Requirements</h3>
Does this project need anything beyond Drupal core? Include any dependent modules, libraries, APIs, etc., that are required for this project to work.
<h3 id="module-project--recommended-libraries">Recommended modules/libraries</h3>
Are there any projects that enhance or improve the functionality of this project?
<h3 id="module-project--similar-projects">Similar projects</h3>
If there are modules providing similar functionality, please describe what differentiates them.
<h3 id="module-project--support">Supporting this Module</h3>
If you have a Patreon, OpenCollective, etc. you can put links here to describe how people can support development.
<h3 id="module-project--community-documentation">Community Documentation</h3>
A great place to add links to YouTube walkthroughs, external documentation, or a demo site (use DrupalPod!).
You may continue to put additional information below here, if there are other things you think people need to know about your module!
```
*For financial support, a good default for our modules is:*
```html
You can support <a href="https://agaric.coop/">Agaric's</a> overall contributions to Drupal and a bit beyond <a href="https://opencollective.com/drutopia">by supporting Drutopia at opencollective.com/drutopia</a>. Thanks!!
```

View file

@ -5,11 +5,11 @@ Agaric manages a large number of Drupal, primarily [Drutopia](https://drutopia.o
Please see [the Drutopia Platform README for an overview of hosting and deploying Drutopia sites](https://gitlab.com/drutopia-platform/drutopia_host#introduction ) Please see [the Drutopia Platform README for an overview of hosting and deploying Drutopia sites](https://gitlab.com/drutopia-platform/drutopia_host#introduction )
If you won't be deploying, skip overall setup. If you won't be deploying, skip overall setup.
Following this guide requires a working [DDEV](https://ddev.readthedocs.io/en/latest/) installation. See also the [general Git setup](git-setup) if you have not yet. Following this guide requires a working [DDEV](https://ddev.readthedocs.io/en/latest/) installation. Deploying to Drutopia will require a locally installed composer, as well as ansible. See also the [general Git setup](git-setup) if you have not yet.
## Overall setup ## Overall setup
Strongly recommended to set up locally like this: In line as much as possible with [recommended locations](recommended-local-project-locations), the local setup can be done like this:
``` ```
mkdir -p ~/Projects/drutopia-platform mkdir -p ~/Projects/drutopia-platform
@ -29,31 +29,28 @@ Commands for copying throughout will assume this above setup.
## Create a new site project ## Create a new site project
Ordinarily this will live under https://gitlab.com/agaric/sites (for Agaric clients) or https://gitlab.com/drutopia-platform/sites (for direct Drutopia platform members). For Agaric clients, the online home for the project will usually be at [Agaric's Forgejo project hosting site](https://git.agaric.com), first creating an organization (such as `example-client`, the short name that Forgejo takes first must be treated as a machine name) and then the project (such as `example-org`) that would live a URL such as `https://git.agaric.com/example-client/example-org`.
Copy the `composer.json`, `composer.lock`, and `.gitignore` files used by the appropriate build source, such as the [default build source for the Drutopia Platform](https://gitlab.com/drutopia-platform/build_source). Copy the part of the URL after `git.agaric.com` so the namespace will be consistent on your local machine and create the directory at `~/Projects`. With the examples above it would be `mkdir -p ~/Projects/example-client/example-org` and `cd ~/Projects/example-client/example-org`.
Replace "example" below with name of the site, usually derived from the main domain name, for instance `example-com`: Once you have created and are in this directory, wherever you want your project to live within that namespace, you can copy-paste these commands for a quick start:
``` ```
MY_SITE="example" wget https://gitlab.com/drutopia-platform/build_source/-/raw/main/composer.json
mkdir -p ~/Projects/agaric/sites/$MY_SITE wget https://gitlab.com/drutopia-platform/build_source/-/raw/main/composer.lock
cd ~/Projects/agaric/sites/$MY_SITE wget https://gitlab.com/drutopia-platform/build_source/-/raw/main/.gitignore
```
Once you have created and are in this directory, whether `agaric/sites` or `drutopia-platform/sites` or wherever you want your project to live within the GitLab namespace, you can copy-paste these commands for a quick start:
```
wget https://gitlab.com/drutopia-platform/build_source/-/raw/master/composer.json
wget https://gitlab.com/drutopia-platform/build_source/-/raw/master/composer.lock
wget https://gitlab.com/drutopia-platform/build_source/-/raw/master/.gitignore
mkdir -p scripts mkdir -p scripts
wget -O scripts/pull.sh https://gitlab.com/drutopia-platform/build_source/-/raw/master/scripts/pull.sh wget -O scripts/pull.sh https://gitlab.com/drutopia-platform/build_source/-/raw/main/scripts/pull.sh
wget -O scripts/retain-custom-htaccess.sh https://gitlab.com/drutopia-platform/build_source/-/raw/main/scripts/retain-custom-htaccess.sh
chmod +x scripts/pull.sh chmod +x scripts/pull.sh
ddev config --docroot=web --project-type=drupal9 --composer-version=2 --webserver-type=apache-fpm --mariadb-version=10.5 --php-version=7.4 --create-docroot chmod +x scripts/retain-custom-htaccess.sh
ddev config --docroot=web --project-type=drupal10 --webserver-type=apache-fpm --database=mariadb:10.8 --php-version=8.1 --create-docroot
ddev start ddev start
ddev auth ssh ddev auth ssh
ddev composer install ddev composer install
git init
git add .
git commit -m "Begin repository based on build_source main"
``` ```
```{note} ```{note}
@ -64,7 +61,11 @@ Webserver, PHP, and MySQL versions and types are selected here to match those us
In order to get a configuration that has the proper site key, it is easiest to first deploy the site to the eventual live location, and sync that database locally. In order to get a configuration that has the proper site key, it is easiest to first deploy the site to the eventual live location, and sync that database locally.
If you are creating a specialized build of Drutopia, you will have to add that to the host vars, and build that prior to deploying the site. `ahoy vars-edit` and `ahoy deploy-build <build_target>` are used for this. Note that new builds should be added ONLY as absolutely required. Configuration, and themes should be leveraged as much as possible prior to resorting to a new build. If additional/different modules are required, a new build is required - do *NOT* add them to `build_source` except when they are known to be required for *ALL* Drutopia basic sites. If you are creating a specialized build of Drutopia, you will have to add that to the host vars, and build that prior to deploying the site. `ahoy vars-edit` and `ahoy deploy-build <build_target>` are used for this.
```{note}
New builds should be added **only** as absolutely required. Configuration, and themes should be leveraged as much as possible prior to resorting to a new build. If additional modules are required, consider adding them to `build_source`, knowing they will be available for *all* Drutopia SaaS sites.
```
Create a new site (member entry) per instructions in Drutopia hosting. The simplest method is to use `ahoy new-site <member-slug>` and follow its output to get started. Then use `ahoy deploy-site <member-instance>` to deploy one. Because the install using `drush site-install` that would be run when `drupal_install: true` is set in the site settings in Drutopia hosting, it is currently recommended to set this to false and use the UI installer or run `php docroot/core/scripts/drupal quick-start drutopia --no-interaction` when ssh'd into the server. Create a new site (member entry) per instructions in Drutopia hosting. The simplest method is to use `ahoy new-site <member-slug>` and follow its output to get started. Then use `ahoy deploy-site <member-instance>` to deploy one. Because the install using `drush site-install` that would be run when `drupal_install: true` is set in the site settings in Drutopia hosting, it is currently recommended to set this to false and use the UI installer or run `php docroot/core/scripts/drupal quick-start drutopia --no-interaction` when ssh'd into the server.
@ -72,7 +73,7 @@ Create a new site (member entry) per instructions in Drutopia hosting. The simpl
The [drush site aliases file](https://github.com/drush-ops/drush/blob/9.5.x/examples/example.site.yml) can be used to provide easy access to the live/test instances of a site. From the root of your project directory (e.g. `agaric/sites/example/`), you may create one with: The [drush site aliases file](https://github.com/drush-ops/drush/blob/9.5.x/examples/example.site.yml) can be used to provide easy access to the live/test instances of a site. From the root of your project directory (e.g. `agaric/sites/example/`), you may create one with:
``` ```bash
MY_SITE="example-com" MY_SITE="example-com"
SERVER="drutopia.org" SERVER="drutopia.org"
mkdir -p drush/sites/ mkdir -p drush/sites/
@ -94,24 +95,30 @@ test:
EOF EOF
``` ```
This will create a self.site.yml using the expected pattern of "site_name_INSTANCE" (e.g. example_com_live for the example-com live instance). Supply the URL form of the site name for the MY_SITE variable (i.e. with dashes, rather than underscores). This will create a self.site.yml using the expected pattern of `site_name_INSTANCE` (e.g. `example_com_live` for the example-com live instance). Supply the URL form of the site name for the `MY_SITE` variable (i.e. with dashes, rather than underscores).
### Syncing, and setting up configuration ### Syncing, and setting up configuration
Drutopia releases will expect the configuration in `$project_root/config/sync`. Be sure to set the appropriate variable in `settings.php` for it to be stored/retrieved from there. Note not to use `settings.ddev.php`, as this will be generated during `ddev start`: Our standard is to place configuration exports in `$project_root/config`. Set the this in `settings.php`:
```php ```php
$settings['config_sync_directory'] = '../config/sync'; $settings['config_sync_directory'] = '../config';
``` ```
While in `web/sites/default/settings.php` also prevent site administrators being told they can install new modules when they can't and add: While in `web/sites/default/settings.php` also prevent site administrators being told they can install new modules when they can't and add:
```php ```php
$conf['allow_authorize_operations'] = FALSE; $settings['allow_authorize_operations'] = FALSE;
``` ```
This `settings.php` file is only being used for local development. Drutopia host is responsible for creating all settings during deployment.
(All this should be updated to use a distribution-wide settings.php when we have that. Until the, use `git add -f web/sites/default/settings.php` to include this in your repo) (All this should be updated to use a distribution-wide settings.php when we have that. Until the, use `git add -f web/sites/default/settings.php` to include this in your repo)
```{note}
Do not to use `settings.ddev.php`, as this will be re-generated during `ddev start`.
```
Once you also have a working Drush installation and a live instance, you can then aquire and export the initial configuration with: Once you also have a working Drush installation and a live instance, you can then aquire and export the initial configuration with:
``` ```

View file

@ -2,19 +2,19 @@
## Prerequsites ## Prerequsites
A bit more PHP than you need, but this will definitely get you ready for composer and friends: Ensure you have at least PHP 7.2.5 installed. An 8.x version is recommended.
```bash ```shell
sudo apt-get install ansible rsync php7.4 php7.4-gd php7.4-mysql php7.4-xml php7.4-curl php7.4-fpm php7.4-sqlite3 php7.4-cli sudo apt-get install ansible rsync php8.1-cli
``` ```
Then follow the commands from: Then follow the commands from:
[getcomposer.org/download](https://getcomposer.org/download/) [getcomposer.org/download](https://getcomposer.org/download/)
And then: Including the recommended:
```bash ```shell
sudo mv composer.phar /usr/local/bin/composer sudo mv composer.phar /usr/local/bin/composer
``` ```
@ -22,45 +22,126 @@ To make working with [Drutopia Platform's recommended Ansible setup](https://git
[github.com/ahoy-cli/ahoy](https://github.com/ahoy-cli/ahoy) [github.com/ahoy-cli/ahoy](https://github.com/ahoy-cli/ahoy)
Finally, [clone needed Drutopia repositories locally according to the recommended setup](creating-new-drutopia-site#overall-setup). Get yourself added to the [Drutopia Platform project on GitLab](https://gitlab.com/groups/drutopia-platform/-/group_members) if you are not already, and [ensure your public SSH key is on Gitlab](https://gitlab.com/-/profile/keys).
Finally, [clone needed Drutopia repositories locally according to the recommended setup](creating-new-drutopia-site).
Now you are ready for deploying Drutopia updates on a regular basis. Now you are ready for deploying Drutopia updates on a regular basis.
## Ensure you are up-to-date ## Configure live to reach test instance
```bash **These instructions are no longer recommended. The Drutopia member role will set up the SSH connection along with the sync script (`sync_to_test.sh`).**
Log into the server on the live side, and check if you can reach the test side from there:
```shell
ssh {site}_live@drutopia.org # If using our ssh-config: d-{site}-live
ssh {site}_test@drutopia.org # d-{site}-test is not available here!
# If that command fails, create an ssh key:
ssh-keygen
cat ~/.ssh/id_rsa.pub
```
Copy the output of the cat command and disconnect (ctrl+d). Then add that public key to the authorized_hosts on the test side:
```shell
ssh {site}_test@drutopia.org
vi ~/.ssh/authorized_hosts
```
`shift+g` to get to the bottom, `o` to get into add mode on a new line, `ctrl+shift+p` (or appropriate) to paste the key, then `{esc}` to exit insert more, and `:wq` to write changes and quit.
Re-test reaching the server from the live side. This time you will have to accept the host key verification for drutopia.org which should be: `SHA256:MQXYY1PcuEgnIdyYawJSNZHbvLMwBXOx5CyDBvNSBmI.`
## Perform a sync to test
Log into the live version of the site and perform a sync of the db and files to the test instance:
```shell
ssh {site}-live@drutopia.org # If using our ssh-config: d-{site}-live
sync_to_test.sh
```
## Ensure you are up-to-date with all hosting repositories
```shell
cd ~/Projects/drutopia-platform/drutopia_host/hosting_private cd ~/Projects/drutopia-platform/drutopia_host/hosting_private
ahoy git-pull-all ahoy git-pull-all
``` ```
``` ## Creating new site hosting entries
You can use ahoy to build a templated YAML snippet for yourself:
```shell
ahoy new-site example ahoy new-site example
``` ```
And, following the instructions that provides, copy the Following the instructions this command provides to pull the newly created file into the vault.
``` ## Finding the site name and identify builds
ansible-vault edit host_vars/elizabeth.mayfirst.org/vault.yml
```shell
## Determine the build to deploy
ahoy vault-view
# Without ahoy:
ansible-vault view host_vars/elizabeth.mayfirst.org/vault.yml
``` ```
## Prepare appropriate base Search for the site you are deploying. The `drutopia_version: ` key will identify the build to deploy in the next step.
``` If using typical `sitename-test.drutopia.org` and `sitename-live.drutopia.org` domains pending the real site domain, add the subdomains to drutopia.org through the [May First control panel](https://members.mayfirst.org/cp/)
## Prepare the appropriate base build
Using ahoy, specify the name of the build to create as an argument to `ahoy deploy-build`:
```shell
ahoy deploy-build next ahoy deploy-build next
``` ```
## Deploy your site ## Deploy your site
``` ```shell
ahoy deploy-site example_test ahoy deploy-site example_test
``` ```
And you can then share back the record of the deployments in the `build_artifacts` repository with:
```shell
ahoy artifacts
```
## Putting it all together
```shell
cd ~/Projects/drutopia-platform/drutopia_host/hosting_private
ahoy git-pull-all
ahoy deploy-build stable
ahoy deploy-site example_live
ahoy artifacts
```
## If you need to override site configuration:
```shell
ahoy deploy-site-force example_test
```
## Sync live database to test
If you have new content on the live site that you want to see how your code works with, or if you have created entities on the test site that block the removal of configuration you changed your mind about, you will want to sync from live to test.
```shell
ssh d-example-live
sync_to_test.sh
```
This handles making a paranoia dump of the test site in `~/backups`, dropping the test database to ensure no tables are left to clutter and interfere, skipping the content of cache tables, and bringing over user files (skipping cache files like the twig folder).
## Bonus: Keep Drutopia builds with similar available modules ## Bonus: Keep Drutopia builds with similar available modules
To try to keep various Drutopia-based distributions from diverging too much, at least insofar as available modules, even if they aren't installed, we can use the **meld** (`sudo apt-get install meld`) diff tool to compare and share when posssible. To try to keep various Drutopia-based distributions from diverging too much, at least insofar as available modules, even if they aren't installed, we can use the **meld** (`sudo apt-get install meld`) diff tool to compare and share when posssible.
```bash ```shell
meld ~/Projects/agaric/sites/crla/crla-org/composer.json ~/Projects/agaric/sites/geo/composer.json ~/Projects/drutopia-platform/build_source/composer.json ~/Projects/agaric/sites/agaric-com/composer.json meld ~/Projects/agaric/sites/crla/crla-org/composer.json ~/Projects/agaric/sites/geo/composer.json ~/Projects/drutopia-platform/build_source/composer.json ~/Projects/agaric/sites/agaric-com/composer.json
``` ```

View file

@ -38,7 +38,7 @@ Patterns which a user wants git to ignore in all situations (e.g., backup or tem
## Develop ## Develop
Pick a ticket, create a branch referencing the ticket number, e.g. `git checkout -b project-123`. Commit your code in small chunks capturing logical steps and follow the [Drupal coding standards](https://drupal.org/coding-standards) and the [guidelines for commit messages](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). All configuration that accompanies your code, e.g. creating fields and content types, must be in the `config` directory or scripted in an update hook. Once your work is done request a review and eventually your code will get merged into the master branch. Pick a ticket, create a branch referencing the ticket number, e.g. `git checkout -b project-123`. Commit your code in small chunks capturing logical steps and follow the [Drupal coding standards](https://drupal.org/coding-standards) and the [guidelines for commit messages](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). All configuration that accompanies your code, e.g. creating fields and content types, must be in the `config` directory or scripted in an update hook. Once your work is done request a review (merge request) for your code will get merged into the main branch.
Note: you may need to add your ssh key in the virtual machine. To do so with DDEV: Note: you may need to add your ssh key in the virtual machine. To do so with DDEV:

View file

@ -1,8 +1,28 @@
# Git Usage # Git usage
## Getting in sync with other developers
To bring in changes from other developers into the branch you are
working on, from main `git pull` and then `git checkout your-branch-name` and `git rebase main`
## Git troubleshooting
If you've accidentally made commits to main and cannot pull in other's changes as a result.
To get rid of a commit (the most recent one),
```
git reset HEAD^
```
to then be able to `git stash` changes from the commit, now local changes. To just throw everything in the commit away, `git reset --hard HEAD^`
See [sethrobertson.github.io/GitFixUm/fixup.html](https://sethrobertson.github.io/GitFixUm/fixup.html)
## When NOT to manually resolve merge conflicts ## When NOT to manually resolve merge conflicts
When it's an automatically generated file! When it is an automatically generated file!
For `composer.lock`, for example: For `composer.lock`, for example:
@ -12,3 +32,14 @@ ddev composer update
git add composer.lock git add composer.lock
git commit git commit
``` ```
## Bringing feature branches into main
It is OK to do git merges rather than rebase on top of the main branch, especially when in the GitLab UI where merge is the only option— but be absolutely certain "Squash commits" is **not** checked.
### Discussion
Hmm git GUIs would show all the commits in the branch they were worked on when there are merge requests, right? (if not squashed?) Maybe better to prefer merges than rebases for feature branches, for preserving the history of where the work was done. My problem with git merge commits is they can rewrite history inside them, like have changes not shown in any other commit, and they make it hard to see what happened— does not show up in git log -p for instance. (You can see the history but if the stack overflow explanation does not fit on one page i don't want it as part of my daily workflow. https://stackoverflow.com/a/40986893/1028376 )

View file

@ -2,6 +2,6 @@
With the exception of the note below, follow the [May First documentation on how to configure Thunderbird](https://support.mayfirst.org/wiki/faq/email/setup-thunderbird) or [other e-mail clients](https://support.mayfirst.org/wiki/faq/email/pop-vs-imap). With the exception of the note below, follow the [May First documentation on how to configure Thunderbird](https://support.mayfirst.org/wiki/faq/email/setup-thunderbird) or [other e-mail clients](https://support.mayfirst.org/wiki/faq/email/pop-vs-imap).
For Server Name, Agaric team members use `sojourner.mayfirst.org` for incoming e-mail (POP or IMAP) and the May First standard, `mail.mayfirst.org` for outgoing (SMTP). For Server Name, Agaric team members use `mail.mayfirst.org` for incoming e-mail (POP or IMAP) and the May First standard, `mail.mayfirst.org` for outgoing (SMTP).
For extra security, Agaric worker-owners are advised to set up a separate account for e-mail as for administrative duties within May First's control panel. A separate account could also be used for [Nextcloud](setting-up-nextcloud). This is probably unnecessary complexity for most clients. One account can be used for all services available through May First. For extra security, Agaric worker-owners are advised to set up a separate account for e-mail as for administrative duties within May First's control panel. A separate account could also be used for [Nextcloud](setting-up-nextcloud). This is probably unnecessary complexity for most clients. One account can be used for all services available through May First.

View file

@ -6,18 +6,31 @@ It is not possible to add accounts or change passwords in May First's Nextcloud
Log into [May First's control panel](https://members.mayfirst.org/cp/) with the organization's May First account and create a new User Account to use exclusively for Nextcloud, for instance `exampleorg-nextcloud`, with a strong password. It is not necessary to provide an e-mail address. Log into [May First's control panel](https://members.mayfirst.org/cp/) with the organization's May First account and create a new User Account to use exclusively for Nextcloud, for instance `exampleorg-nextcloud`, with a strong password. It is not necessary to provide an e-mail address.
Also here, create user accounts for any people who will be using Nextcloud and do not already have May First accounts (either in the organization *or* anywhere else— May First accounts are universal across most tools provided by May First, including Nextcloud). Also here at the **User Account** vertical tab, create user accounts for any people who will be using Nextcloud and do not already have May First accounts (either in the organization *or* anywhere else— May First accounts are universal across most tools provided by May First, including Nextcloud). Checkmark "Add a nextcloud item to this user account"
Be sure to set the disk space quota to something that would cover each person's expected use of Nextcloud (and e-mail, if that person will be using May First's e-mail also).
Now go to the **Nextcloud** vertical tab and adjust the quota allocated for their expected Nextcloud use, if more than 1GB. You can also add any of the user accounts for your organization to your Nextcloud for which you did not check the Nextcloud box when creating.
0. Log into [share.mayfirst.org](https://share.mayfirst.org/) with this new Nextcloud-only account. 0. Log into [share.mayfirst.org](https://share.mayfirst.org/) with this new Nextcloud-only account.
1. Go to [Circles](https://share.mayfirst.org/apps/circles/) 1. Press the + sign under **Circles** to create a new circle under [Contacts](https://share.mayfirst.org/apps/contacts/All%20contacts)
2. Type a no-spaces version of the clients name (for instance, `exampleorg`) into the "Create a new circle" box at the top left, under the Nextcloud logo. 2. Type a no-spaces version of the clients name (for instance, `exampleorg`) into the box for the name at the top center.
3. For *Select a circle type* choose "Create a new personal circle". 3. Under **Invites**, probably do not checkmark anything. Under **Visibility**, *do **not** select visible to everyone.
Ask the people with accounts on May First to use the same username and password to sign into Nextcloud at [share.mayfirst.org](https://share.mayfirst.org/) Ask the people for whom you created accounts on May First to use the same username and password to sign into Nextcloud at [share.mayfirst.org](https://share.mayfirst.org/)
Add each of those people to the personal circle (use the same username as they have in the user account in the May First control panel, but they do need to sign into Nextcloud before you can add them). Once they have confirmed they have done that, add each of those people to the circle (use the same username as they have in the user account in the May First control panel).
Under [Files](https://share.mayfirst.org/apps/files/) on Nextcloud create a folder named after the organization (for instance `exampleorg`). Share that folder with the personal circle you previously created. ```{admonition} You cannot share a folder or calendar with someone who has not yet logged in on share.mayfirst.org
Send an email to the client with instructions to log into NextCloud at https://share.mayfirst.org with their MayFirst username and password.
You can send a password reset email by using the "Password Reset" vertical tab in the left hand sidebar and
After a client has logged in to share.mayfirst.org, you will be able to share folders and files— and add them to the organization circle for access to anything you add it to.
```
Under [Files](https://share.mayfirst.org/apps/files/) on Nextcloud create a folder named after the organization (for instance `exampleorg`). Share that folder with the personal circle you previously created, by typing the circle name in the "Search for share recipients" box in the **Sharing** tab.
Now every folder you create *within* that folder will be available to everyone in the organization (the people you added to the circle). And even if a person has multiple affiliations on May First's Nextcloud, the files related to the organization will be clearly namespaced. Now every folder you create *within* that folder will be available to everyone in the organization (the people you added to the circle). And even if a person has multiple affiliations on May First's Nextcloud, the files related to the organization will be clearly namespaced.
@ -30,28 +43,8 @@ Now every folder you create *within* that folder will be available to everyone i
We create an organizaton account so that it's clear people are being invited to organization resources and there is no problem if an individual leaves an organization. We create an organizaton account so that it's clear people are being invited to organization resources and there is no problem if an individual leaves an organization.
Because the account will have the same password for Nextcloud and for everything else in May First, we create an account through the May First control panel that will be used only for Nextcloud. This way credentials used, even rarely, for logging into Nextcloud are not also used to control web hosting, e-mail, and other Because the account will have the same password for Nextcloud and for everything else in May First, we create an account through the May First control panel that will be used only for Nextcloud. This way credentials used, even rarely, for logging into Nextcloud are not also used to control web hosting, e-mail, and other critical resources.
## Original documentation to reconcile
When Agaric hosts a new client on MayFirst, the client gains access to the free software tools on the MayFirst platform.
Any user account in the MayFirst control panel can login to nextcloud with their MayFirst.org username and password.
NextCloud - https://share.mayfirst.org
Setup Client Access to NextCloud:
1. Login to NextCloud and create a client-nextcloud-admin user for the puprose of creating circles and organizing the nextcloud folders for the group.
2. Login to the Members Control Panel and create a user account for each person you will be sharing with.
2a. You can send them a password reset email (click "Password Reset") in the left hand side bar.
3. Create a secret circle in NextCloud using the circles icon on the toolbar
4. Send an email to the client with instructions to log into NextCloud at https://share.mayfirst.org with their MayFirst username and password.
5. After a client has logged in, you will be able to share folders and files.
Be sure everyone in the secret circle logs into NexCloud https://share.mayfirst.org/ so you can share folders with them.
You cannot share a folder or calendar with someone who has not yet logged in.
MayFirst suggestions for how groups can effectively use nextcloud to share. The steps are here: https://support.mayfirst.org/wiki/nextcloud#CanIcreategroupsofpeopletosharewith MayFirst suggestions for how groups can effectively use nextcloud to share. The steps are here: https://support.mayfirst.org/wiki/nextcloud#CanIcreategroupsofpeopletosharewith
Our steps are now largely in sync with May First's own recommendations; perhaps we can merge documentation.

View file

@ -1,4 +1,4 @@
# Upgrading Drutopia sites on the Elizabeth Drutopia platform
1. Ensure BAT and BEE are not in use, and are uninstalled. 1. Ensure BAT and BEE are not in use, and are uninstalled.
1. Ensure Markdown is not in use, and uninstalled. 1. Ensure Markdown is not in use, and uninstalled.

View file

@ -0,0 +1,7 @@
# Uptime monitoring
We presently monitor that our sites and services are running correctly with [Uptime Kuma](https://uptime.kuma.pet/).
A public status report for Agaric sites is available here:
https://monitor.ocean.agaric.coop/status/agaric

View file

@ -1,14 +1,12 @@
# Wednesday Checkin # Wednesday operations
The Monday checkin ensures everyone is on the same page starting the week. It is: * No longer than half-an-hour, maximum.
* No longer than one hour, maximum.
* Tasks should be [added to GitLab](https://gitlab.com/agaric/internal/-/boards/) as the meeting takes place. * Tasks should be [added to GitLab](https://gitlab.com/agaric/internal/-/boards/) as the meeting takes place.
Here is a template that can be pasted into a text pad (ideally markdown-aware). Here is a template that can be pasted into a text pad (ideally markdown-aware).
```md ```md
# 2021 Juluary 19th Wednesday Checkin # 2024 Juluary 19th Wednesday Checkin
## Updates ## Updates
@ -18,6 +16,28 @@ Here is a template that can be pasted into a text pad (ideally markdown-aware).
* Sanjay * Sanjay
* Ben * Ben
* Keegan * Keegan
* Louis
## Invoice status
### Hours Entered (previous week)
* Ben -
* Chris -
* Keegan -
* Mauricio -
* Micky -
* Sanjay -
* Louis -
## Pair programming availability
* Ben
* Chris
* Keegan
* Mauricio
* Micky
* Sanjay
* Louis
## Blockers ## Blockers
@ -27,6 +47,9 @@ Here is a template that can be pasted into a text pad (ideally markdown-aware).
* Sanjay * Sanjay
* Ben * Ben
* Keegan * Keegan
* Louis
## Availability
## Task allocation ## Task allocation

View file

@ -7,13 +7,13 @@ Agaric's weekly communication is structured like this:
* [Wednesday check-in](wednesday-checkin) * [Wednesday check-in](wednesday-checkin)
* [Friday review & planning](friday-review-and-planning) * [Friday review & planning](friday-review-and-planning)
We meet every day at 4 pm, except for Thursday which is meeting-free. One hour is the maximum time for any meeting.
One hour is the maximum time for any meeting (including Friday review & planning and Monday checkin).
No (internal co-op-wide) meetings on Thursdays. No (internal co-op-wide) meetings on Thursdays.
The worker-owner meeting happens weekly with an agenda in advance. If there are no topics put forward to discuss it is skipped. There is no check-in (stand up) meeting on Tuesday. Check-in meetings are at 11:30am.
Tuesday worker-owner meetings are *as needed* at 1pm. The worker-owner meeting happens weekly with an agenda in advance. If there are no topics put forward to discuss by the day before it is skipped. There is no check-in (stand up) meeting on Tuesday.
```{toctree} ```{toctree}
--- ---

View file

@ -1,9 +1,13 @@
# Worker Owner Meeting # Worker-Owner Meeting
Copy-pastable template: Copy-pastable template:
The worker-owner meeting should mostly be populated with agenda items.
It replaces the daily standup if it falls on the same day as one, but ideally we would separate daily items to the daily/weekly rythm pad and leave the worker-owner notes with only the higher-level subjects. Switching pads during the meeting is too disruptive but maybe moving check-ins and work updates to the daily pad after the meeting would work.
``` ```
# 2020 November 24 # 2024 November 24
## Check-ins (i.e. how are you, generally?) ## Check-ins (i.e. how are you, generally?)
@ -13,22 +17,13 @@ Copy-pastable template:
* Mauricio * Mauricio
* Micky * Micky
* Keegan * Keegan
* Louis
## General Updates (work items)
* Ben
* Chris
* Sanjay
* Mauricio
* Micky
* Keegan
## Financial ## Financial
Checking: Checking:
Savings: Savings:
Credit: Credit:
https://pad.drutopia.org/p/private_financial-transaction-of-note
### Payable ### Payable
### Receivable ### Receivable
@ -36,6 +31,7 @@ https://pad.drutopia.org/p/private_financial-transaction-of-note
## Marketing ## Marketing
### Blog Posts ### Blog Posts
## Training ## Training
@ -43,10 +39,11 @@ https://pad.drutopia.org/p/private_financial-transaction-of-note
## Decisions to make ## Decisions to make
## Good News ## Good News
* Ben * Ben
* Chris * Chris
* Sanjay * Sanjay
* Mauricio * Mauricio
* Micky * Micky
* Keegan * Keegan
* Louis
``` ```

View file

@ -1,42 +0,0 @@
# Worker-Owner Meeting
The worker-owner meeting should mostly be populated with agenda items.
It replaces the daily standup, but ideally we would separate daily items to the daily/weekly rythm pad and leave the worker-owner notes with only the higher-level subjects. Switching pads during the meeting is too disruptive but maybe moving check-ins and work updates to the daily pad after the meeting would work.
```
# 2020 September 29
## Check-ins (i.e. how are you, generally?)
* Ben -
* Chris -
* David -
* Mauricio -
* Micky -
## General Updates (work items)
* Ben
* Chris
* David
* Mauricio overloaded, but managing to get word done.
* Micky
## Financial
Checking:
Savings:
Credit:
## Marketing
## Training
```