(whimsy) branch master updated: docs: remove unneeded duplicate words (#203)

2024-02-21 Thread clr
This is an automated email from the ASF dual-hosted git repository.

clr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git


The following commit(s) were added to refs/heads/master by this push:
 new 8494c83b docs: remove unneeded duplicate words (#203)
8494c83b is described below

commit 8494c83b098d1c7a1138a463a685f51f5c99d021
Author: John Bampton 
AuthorDate: Thu Feb 22 12:57:26 2024 +1000

docs: remove unneeded duplicate words (#203)
---
 MACOS.md   | 4 ++--
 www/board/agenda/README.md | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/MACOS.md b/MACOS.md
index 88e7dd43..f4ce64da 100644
--- a/MACOS.md
+++ b/MACOS.md
@@ -233,7 +233,7 @@ Configure whimsy.local, Complete Apache configuration, Make 
whimsy.local an
 alias for your machine, and Optional: forward whimsy.local traffic to port 8080
 steps.
 
-Running Whimsy tools locally depends on httpd.  Apple provides a copy of httpd 
that that you can configure and start.
+Running Whimsy tools locally depends on httpd.  Apple provides a copy of httpd 
that you can configure and start.
 
 Install:
 
@@ -338,7 +338,7 @@ $ brew info passenger
 
 For the second step (`brew info passenger`), you will need to
 follow the instructions -- which essentially is to copy a few lines to
-to a specified location, typically `/etc/apache2/other/passenger.conf`.
+a specified location, typically `/etc/apache2/other/passenger.conf`.
 
 If your ruby is installed in `/usr/local/bin`, change the last line to
 
diff --git a/www/board/agenda/README.md b/www/board/agenda/README.md
index c40fb646..bf0aabed 100644
--- a/www/board/agenda/README.md
+++ b/www/board/agenda/README.md
@@ -240,7 +240,7 @@ Viewing Source (this time, Actual Code)
[views/app.js.rb](views/app.js.rb) lists all of the files that make up the
client side of the application.
 
- * This brings us back to to the `app.js` script mentioned much earlier.
+ * This brings us back to the `app.js` script mentioned much earlier.
If you visit [http://localhost:9292/app.js](http://localhost:9292/app.js)
you will see the full script.  Every bit of this JavaScript was generated
from the js.rb files mentioned above.  Undoubtedly you have seen small
@@ -351,7 +351,7 @@ in your home directory.  The file format is YAML, and here 
is mine:
 
 
 Adapt as necessary.  You don't need to have all those entries in the `svn`
-value to run the board agenda tool.  The `lib` value is is an array of
+value to run the board agenda tool.  The `lib` value is an array of
 libraries that are to be used instead of gems you may have installed.  This is
 useful if you are making changes to the agenda parsing logic, ruby2js or
 wunderbar.  You can remove this too.  If you drop the `ldap` entry, one will



(whimsy) branch master updated: Remove unneeded trailing whitespace from Ruby files (#200)

2024-02-21 Thread sebb
This is an automated email from the ASF dual-hosted git repository.

sebb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git


The following commit(s) were added to refs/heads/master by this push:
 new fcda943a Remove unneeded trailing whitespace from Ruby files (#200)
fcda943a is described below

commit fcda943af5ed24732deee8d7028a1205d0d2c881
Author: John Bampton 
AuthorDate: Thu Feb 22 10:49:00 2024 +1000

Remove unneeded trailing whitespace from Ruby files (#200)
---
 lib/whimsy/asf/board.rb| 2 +-
 lib/whimsy/asf/config.rb   | 2 +-
 lib/whimsy/asf/petri.rb| 2 +-
 lib/whimsy/asf/status.rb   | 4 ++--
 tools/collate_minutes.rb   | 2 +-
 tools/fixroster.rb | 2 +-
 tools/site-scan.rb | 2 +-
 tools/site_member_check.rb | 2 +-
 www/board/agenda/routes.rb | 4 ++--
 www/roster/models/committee.rb | 2 +-
 www/status/monitors/public_json.rb | 2 +-
 11 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/lib/whimsy/asf/board.rb b/lib/whimsy/asf/board.rb
index 58d902d6..0d9f02a6 100644
--- a/lib/whimsy/asf/board.rb
+++ b/lib/whimsy/asf/board.rb
@@ -1,6 +1,6 @@
 require_relative '../asf'
 require 'active_support'
-require 'active_support/time'  
+require 'active_support/time'
 
 module ASF
   module Board
diff --git a/lib/whimsy/asf/config.rb b/lib/whimsy/asf/config.rb
index 8c5babbd..5d96739f 100644
--- a/lib/whimsy/asf/config.rb
+++ b/lib/whimsy/asf/config.rb
@@ -139,7 +139,7 @@ module ASF
 end
 
 #  Get an executable path override
-# e.g. 
+# e.g.
 # :exepaths:
 #   gpg: /usr/local/bin/gpg3
 # returns its input if no override is found
diff --git a/lib/whimsy/asf/petri.rb b/lib/whimsy/asf/petri.rb
index 39cb2d24..7d6d412c 100644
--- a/lib/whimsy/asf/petri.rb
+++ b/lib/whimsy/asf/petri.rb
@@ -39,7 +39,7 @@ module ASF
   # @mentors = yaml['mentors']
   yaml['cultures'].each do |proj|
 prj = new(proj)
-if yaml['projects'].include? proj 
+if yaml['projects'].include? proj
   prj.error = 'Listed as a current project' unless prj.status == 
'current'
 else
   prj.error = 'Not listed as a current project' if prj.status == 
'current'
diff --git a/lib/whimsy/asf/status.rb b/lib/whimsy/asf/status.rb
index 50c2e9e7..ae04bf5f 100644
--- a/lib/whimsy/asf/status.rb
+++ b/lib/whimsy/asf/status.rb
@@ -68,11 +68,11 @@ module Status
   end
 end
   end
-  
+
   def self.activeIP # intended for CLI testing
 Resolv::DNS.open.getaddress(ACTIVE_HOSTNAME)
   end
-  
+
 end
 
 # for debugging purposes
diff --git a/tools/collate_minutes.rb b/tools/collate_minutes.rb
index 582062c9..0ba6cb52 100755
--- a/tools/collate_minutes.rb
+++ b/tools/collate_minutes.rb
@@ -740,7 +740,7 @@ seen={}
   puts ''
 end
   end
-  
+
   # Add to the running tally
   pending.each_value do |report|
 next if not report.title or report.title.empty?
diff --git a/tools/fixroster.rb b/tools/fixroster.rb
index 15181607..bb7b7148 100644
--- a/tools/fixroster.rb
+++ b/tools/fixroster.rb
@@ -10,7 +10,7 @@ Encoding.default_internal = Encoding::UTF_8
 if __FILE__ == $0
   CIN = ARGV.shift || '/srv/svn/board/committee-info.txt'
   OUT = ARGV.shift || '/srv/svn/board/committee-info.tmp'
-  
+
   File.open(OUT, 'w') do |out|
 File.open(CIN, 'r').slice_before{|l| l.start_with? '* '}.each do |lines|
   head = lines.shift
diff --git a/tools/site-scan.rb b/tools/site-scan.rb
index e45a1aa0..e3007c1b 100755
--- a/tools/site-scan.rb
+++ b/tools/site-scan.rb
@@ -45,7 +45,7 @@ end
 # TODO should we show them all?
 def save_events(data, value)
   prev = data[:events]
-  if prev and prev != value 
+  if prev and prev != value
 puts "Events: already have '#{prev}', not storing '#{value}'"
   else
 data[:events] = value
diff --git a/tools/site_member_check.rb b/tools/site_member_check.rb
index 30e81fd7..c4bfa621 100755
--- a/tools/site_member_check.rb
+++ b/tools/site_member_check.rb
@@ -56,7 +56,7 @@ loop do
   s.scan(/\| (\S+) \|.*?$/)
   id = s[1]
   unless current.include? id
-puts "#{id}: #{status[id] || 'unknown status'}" 
+puts "#{id}: #{status[id] || 'unknown status'}"
 puts "Previous id: #{prev}" unless id
   end
   prev = id
diff --git a/www/board/agenda/routes.rb b/www/board/agenda/routes.rb
index d43ce3eb..aecb9990 100755
--- a/www/board/agenda/routes.rb
+++ b/www/board/agenda/routes.rb
@@ -549,7 +549,7 @@ get '/new' do
 Wunderbar.warn "#{e}, could not access previous actions, continuing"
 actions = nil
   end
-  
+
   # Get directors, list of pmcs due to report, and shepherds
   @directors = ASF::Board.directors
   @pmcs = ASF::Board.reporting(@meeting)
@@ -605,7 +605,7 @@ post %r{/(\d\d\d\d-\d\d-\d\d)/} do |date|
 ASF::SVN.svn!('update', currentpath, {env: env})
 
 if File.symlink? currentpath # Does the symlink exist?
-  File.unlink currentpath 
+  

(whimsy) branch master updated: Add `alt` attributes to `img` tags in `www/public/HEADER.html` (#199)

2024-02-21 Thread sebb
This is an automated email from the ASF dual-hosted git repository.

sebb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git


The following commit(s) were added to refs/heads/master by this push:
 new 5f38b701 Add `alt` attributes to `img` tags in 
`www/public/HEADER.html` (#199)
5f38b701 is described below

commit 5f38b70178ac036da060345f7b89897bb3630177
Author: John Bampton 
AuthorDate: Thu Feb 22 10:48:08 2024 +1000

Add `alt` attributes to `img` tags in `www/public/HEADER.html` (#199)

Order the attributes
---
 www/public/HEADER.html | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/www/public/HEADER.html b/www/public/HEADER.html
index 9f48cd61..4a58e74f 100644
--- a/www/public/HEADER.html
+++ b/www/public/HEADER.html
@@ -1,2 +1,2 @@
-http://www.apache.org/;>https://www.apache.org/foundation/press/kit/asf_logo_small.png"/>
-
+http://www.apache.org/;>https://www.apache.org/foundation/press/kit/asf_logo_small.png; title="ASF 
Logo"/>
+



(whimsy) branch master updated: Remove unneeded duplicate word in `DEVELOPMENT.md` (#201)

2024-02-21 Thread sebb
This is an automated email from the ASF dual-hosted git repository.

sebb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git


The following commit(s) were added to refs/heads/master by this push:
 new b72d4672 Remove unneeded duplicate word in `DEVELOPMENT.md` (#201)
b72d4672 is described below

commit b72d46720ed1878043f40effb9a0b52dbac6a131
Author: John Bampton 
AuthorDate: Thu Feb 22 10:46:23 2024 +1000

Remove unneeded duplicate word in `DEVELOPMENT.md` (#201)
---
 DEVELOPMENT.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md
index 22119456..d7bd0f55 100644
--- a/DEVELOPMENT.md
+++ b/DEVELOPMENT.md
@@ -333,7 +333,7 @@ different set of gem versions from the local directory.
 ### How To: Authenticate/Authorize Your Scripts
 
 User authentication for any CGI script is provided by the http server's
-LDAP module, and can be done by by adding the path to the CGI in the
+LDAP module, and can be done by adding the path to the CGI in the
 deployment descriptor for the server under the appropriate `authldap` realm:
 
 
https://github.com/apache/infrastructure-puppet/blob/deployment/data/nodes/whimsy-vm4.apache.org.yaml#L127



(whimsy) branch master updated: Fix Markdown backtick markup in `README.md` (#202)

2024-02-21 Thread sebb
This is an automated email from the ASF dual-hosted git repository.

sebb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git


The following commit(s) were added to refs/heads/master by this push:
 new e651114f Fix Markdown backtick markup in `README.md` (#202)
e651114f is described below

commit e651114f5c7f65b9bc8f207c577d53f00c40e72a
Author: John Bampton 
AuthorDate: Thu Feb 22 10:45:10 2024 +1000

Fix Markdown backtick markup in `README.md` (#202)
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index faaa3af0..ade2da4e 100644
--- a/README.md
+++ b/README.md
@@ -98,7 +98,7 @@ Details for each type of deployed tool or script:
[Phusion Passenger](https://www.phusionpassenger.com/) under Apache httpd.
Again, `Gemfile`s are used to specify dependencies.  In addition to simply
checking the application, one line per passenger application needs to be
-   added to the puppet file under 'passenger:` as seen in 
[DEPLOYMENT.md](./DEPLOYMENT.md#puppetnode).
+   added to the puppet file under `passenger:` as seen in 
[DEPLOYMENT.md](./DEPLOYMENT.md#puppetnode).
 
A sample rack application (two empty directories, and a one line file):
 



(whimsy) branch master updated: Improve explanation of who needs to attend

2024-02-21 Thread curcuru
This is an automated email from the ASF dual-hosted git repository.

curcuru pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git


The following commit(s) were added to refs/heads/master by this push:
 new 044c3c43 Improve explanation of who needs to attend
044c3c43 is described below

commit 044c3c435b1b4c18832b9f0e39e4fd0df0cb0643
Author: Shane Curcuru 
AuthorDate: Wed Feb 21 16:15:09 2024 -0500

Improve explanation of who needs to attend
---
 www/members/meeting.cgi | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/www/members/meeting.cgi b/www/members/meeting.cgi
index b114541c..14b4168f 100755
--- a/www/members/meeting.cgi
+++ b/www/members/meeting.cgi
@@ -142,9 +142,9 @@ _html do
 _ 'Nominations for the board or new members close 10 days before 
the meeting starts; no new names may be added after that date.'
   end
   _p do
-_ 'Currently, we will need '
+_ 'Currently, we need '
 _span.text_primary attend_irc
-_ " Members to attend the meeting on 
#{ics_date.strftime(WDAYFORMAT)} and respond to Roll Call to reach quorum and 
continue the meeting."
+_ " Members who have NOT submitted a proxy, to attend the meeting 
on #{ics_date.strftime(WDAYFORMAT)} and respond to Roll Call to reach quorum 
and continue the meeting, so that between Members actually attending, and 
Members who have assigned a proxy are counted as attending."
 _ " Calculation: Total voting members: #{num_members}, with one 
third for quorum: #{quorum_need}, minus previously submitted proxies: 
#{num_proxies}"
   end
   _p do



(whimsy) branch master updated: matt.apache.org went AWOL

2024-02-21 Thread sebb
This is an automated email from the ASF dual-hosted git repository.

sebb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git


The following commit(s) were added to refs/heads/master by this push:
 new 9c19a310 matt.apache.org went AWOL
9c19a310 is described below

commit 9c19a310cf28b8130ef1dcbfadb486fb91efdd63
Author: Sebb 
AuthorDate: Wed Feb 21 21:06:01 2024 +

matt.apache.org went AWOL
---
 www/technology.html | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/www/technology.html b/www/technology.html
index 880336f0..751d000c 100644
--- a/www/technology.html
+++ b/www/technology.html
@@ -58,10 +58,10 @@
 About Whimsy Code
 
   Get the source:
-https://gitbox.apache.org/repos/asf/whimsy.git;>Apache
+https://gitbox.apache.org/repos/asf/whimsy.git;>Apache 
(GitBox)
+or
 https://github.com/apache/whimsy;>GitHub
   
-  https://matt.apache.org/pushlogs.html?repo=whimsy;>Push 
logs
   https://issues.apache.org/jira/browse/WHIMSY/;>Issue 
Tracker
   https://github.com/apache/whimsy/blob/master/README.md;>README
   API documentation



(whimsy) branch master updated: Fix HTML syntax in `www/technology.html` (#198)

2024-02-21 Thread sebb
This is an automated email from the ASF dual-hosted git repository.

sebb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git


The following commit(s) were added to refs/heads/master by this push:
 new 8d9919da Fix HTML syntax in `www/technology.html` (#198)
8d9919da is described below

commit 8d9919dad338e2b4ea99bc798223c96ff3a8ca05
Author: John Bampton 
AuthorDate: Thu Feb 22 06:57:01 2024 +1000

Fix HTML syntax in `www/technology.html` (#198)
---
 www/technology.html | 6 ++
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/www/technology.html b/www/technology.html
index f18e71dc..880336f0 100644
--- a/www/technology.html
+++ b/www/technology.html
@@ -1,4 +1,3 @@
-
 
 http://www.w3.org/1999/xhtml;>
 
@@ -60,10 +59,9 @@
 
   Get the source:
 https://gitbox.apache.org/repos/asf/whimsy.git;>Apache
-https://github.com/apache/whimsy;>GitHub
--
-https://matt.apache.org/pushlogs.html?repo=whimsy;>Push 
logs
+https://github.com/apache/whimsy;>GitHub
   
+  https://matt.apache.org/pushlogs.html?repo=whimsy;>Push 
logs
   https://issues.apache.org/jira/browse/WHIMSY/;>Issue 
Tracker
   https://github.com/apache/whimsy/blob/master/README.md;>README
   API documentation



(whimsy) branch master updated: Ignore misspelt name

2024-02-21 Thread sebb
This is an automated email from the ASF dual-hosted git repository.

sebb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git


The following commit(s) were added to refs/heads/master by this push:
 new cf4c0fe3 Ignore misspelt name
cf4c0fe3 is described below

commit cf4c0fe3eb132afa5ddbc9d2755cee15b8ba2617
Author: Sebb 
AuthorDate: Wed Feb 21 20:34:38 2024 +

Ignore misspelt name
---
 www/members/nominations.cgi | 1 +
 1 file changed, 1 insertion(+)

diff --git a/www/members/nominations.cgi b/www/members/nominations.cgi
index ab0a5d39..2df48bfc 100755
--- a/www/members/nominations.cgi
+++ b/www/members/nominations.cgi
@@ -83,6 +83,7 @@ def create_match(nominee)
   names << pname.delete('.')
   names << pname.sub(%r{ [A-Z] }, ' ') # drop initial
   names << pname.sub(/\bChristo(ph|f)er\b/, 'Chris') # Special
+  names << 'Lukasz Dywick' if pname == 'Lukasz Dywicki' # special
   personname = ASF::Person.find(nominee[:id]).public_name
   names << ASF::Person.asciize(personname, nil) if personname
   list = names.uniq.map {|name| Regexp.escape(name)}.join('|')



(whimsy) branch master updated: Warning re proxy fails

2024-02-21 Thread sebb
This is an automated email from the ASF dual-hosted git repository.

sebb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git


The following commit(s) were added to refs/heads/master by this push:
 new 96062ce9 Warning re proxy fails
96062ce9 is described below

commit 96062ce97647f951a2824b5f179eb3c24c753a03
Author: Sebb 
AuthorDate: Wed Feb 21 19:54:39 2024 +

Warning re proxy fails
---
 www/members/proxy.cgi | 13 +++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/www/members/proxy.cgi b/www/members/proxy.cgi
index faa1565c..4c98b744 100755
--- a/www/members/proxy.cgi
+++ b/www/members/proxy.cgi
@@ -26,7 +26,7 @@ def emit_instructions(today, cur_mtg_dir, meeting)
 This form allows you to assign a proxy for the upcoming
 Member's Meeting on #{meeting_display}. If there is any chance you might 
not be able
 to attend the first part of the Member's Meeting on Tuesday in IRC, then
-please assign a proxy, because that helps the meeting reach
+please assign an attendance proxy, because that helps the meeting reach
 quorum more quickly - the meeting can't formally continue without quorum 
at the start.
 You can still attend the meeting if you want, and you can revoke a
 proxy at any time.
@@ -106,6 +106,15 @@ def emit_form(cur_mtg_dir, meeting, volunteers, disabled)
 _form method: 'POST' do
   _div.form_group do
 _label 'Select proxy'
+_b do
+  _p %{
+WARNING: If you select someone other than the Chair or 
Secretary (*), please note
+that your proxy will not be counted if the person is unable to 
attend.  }
+end
+_p %{
+  (* The meeting will be postponed if the Chair and/or Secretary 
cannot attend)
+}
+
 
 # Fetch LDAP
 ldap_members = ASF.members
@@ -139,7 +148,7 @@ def emit_form(cur_mtg_dir, meeting, volunteers, disabled)
   _ "IMPORTANT! Be sure to tell the person that you select as 
proxy above that you've assigned them to mark your attendance! They simply need 
to mark your proxy attendance when the meeting starts."
   _a 'Read full procedures for Member Meeting', href: 
'https://www.apache.org/foundation/governance/members.html#meetings'
 end
-_p 'Note that you cannot select a member who has provided a proxy'
+_p 'Note that you cannot select a member who has nominated a proxy'
 _div.button_group.text_center do
   _button.btn.btn_primary 'Submit'
 end



(whimsy) branch master updated: Rework parsing to behave like steve-tools/seed-issues.py

2024-02-21 Thread sebb
This is an automated email from the ASF dual-hosted git repository.

sebb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git


The following commit(s) were added to refs/heads/master by this push:
 new 1a9e3b00 Rework parsing to behave like steve-tools/seed-issues.py
1a9e3b00 is described below

commit 1a9e3b00a1a1cae42db018e4bf7ef3956c2afd24
Author: Sebb 
AuthorDate: Wed Feb 21 19:30:10 2024 +

Rework parsing to behave like steve-tools/seed-issues.py
---
 lib/whimsy/asf/member-files.rb | 87 +-
 1 file changed, 52 insertions(+), 35 deletions(-)

diff --git a/lib/whimsy/asf/member-files.rb b/lib/whimsy/asf/member-files.rb
index 1f113e50..0c1a3b8e 100644
--- a/lib/whimsy/asf/member-files.rb
+++ b/lib/whimsy/asf/member-files.rb
@@ -12,9 +12,31 @@ module ASF
 
 NOMINATED_MEMBERS = 'nominated-members.txt'
 NOMINATED_BOARD = 'board_nominations.txt'
-# N.B. Board does not include email
-VALID_KEYS = ['Nominated by','Nomination Statement', 'Nominee email', 
'Seconded by']
-  
+NAME2OUTPUTKEY = { # names (from Regex) and corresponding output keys
+  'email' => 'Nominee email',
+  'nomby' => 'Nominated by',
+  'seconds' => 'Seconded by',
+  'statement' => 'Nomination Statement',
+}
+
+# Same as MEMBER_REGEX, but no  and no 
+BOARD_REGEX = %r{
+\A(?(?[^:]+?):?)\r?\n
+\s*Nominated\ by:\s*(?.*)\r?\n
+\s*Seconded\ by:\s*(?.*?)\r?\n+
+\s*Nomination\ [sS]tatement:\s*?\r?\n+(?.*)\z
+}mx
+
+# This Regex is very similar to the one in the script used to create 
ballots:
+# 
https://svn.apache.org/repos/private/foundation/Meetings/steve-tools/seed-issues.py
+MEMBER_REGEX = %r{
+  \A(?(?:(?[-_.a-z0-9]+)\s+)?(?[^:]+?):?)\r?\n
+  \s*Nominee\ email:\s*(?.*)\r?\n
+  \s*Nominated\ by:\s*(?.*)\r?\n
+  \s*Seconded\ by:\s*(?.*?)\r?\n+
+  \s*Nomination\ [sS]tatement:\s*?\r?\n+(?.*)\z
+  }mx
+
 # get the latest meeting directory or nomination file
 def self.latest_meeting(name=nil)
   if name.nil? # we want the parent directory
@@ -35,11 +57,19 @@ module ASF
 # Seconded by => array of seconders
 # Nomination Statement => array of text lines
 def self.parse_file(name)
+  case name
+  when NOMINATED_BOARD
+regex = BOARD_REGEX
+  when NOMINATED_MEMBERS
+regex = MEMBER_REGEX
+  else
+raise ArgumentError.new "Unexpected name: #{name}"
+  end
   # N.B. The format has changed over the years. This is the syntax as of 
2021.
   # -
   # 
   #  header line
-  #Nominee email:
+  #Nominee email: (not present in board file)
   #Nominated by:
   #Seconded by:
 
@@ -54,45 +84,32 @@ module ASF
   # This is necessary to avoid issues with matching Regexes.
   File.open(nomfile, mode: 'rb:UTF-8')
 .map(&:scrub)
-.slice_before(/^\s*---+--\s*/)
+.slice_before(/^\s*-{35,60}\s*/)
 .drop(2) # instructions and sample block
 .each do |block|
 block.shift(1) # divider
-block.shift(1) if block[0]&.strip == '' # Allow for missing blank line 
(last block is empty)
 nominee = {}
 header = nil
-block
-.slice_before(/^ +(\w+ \w+):\s*/) # split on the header names
-.each_with_index do |para, idx|
-  if idx == 0 # id and name (or just name for board)
-header = para.first.strip
-raise ArgumentError.new "Unexpected start to entry after 
#{lastheader}: #{para}" unless header.size > 3
-lastheader = header
+data = block.join.strip
+next if data == ''
+md = regex.match(data)
+raise  ArgumentError.new "Cannot parse #{data}" unless md
+md.named_captures.each do |k, v|
+  case k
+  when 'header'
+header = v
+  when 'header'
+header = v
+  when 'uid', 'name'
+# not currently used
   else
-key, value = para.shift.strip.split(':', 2)
-unless VALID_KEYS.include? key
-  raise ArgumentError.new "Invalid key name '#{key}' at 
'#{header}' in #{nomfile}"
-end
-if para.size == 0 # no more data to follow
-  nominee[key] = value
-else
-  tmp = [value, para.map(&:chomp)].flatten.compact
-  tmp.pop if tmp[-1].empty? # drop trailing empty line only
-  nominee[key] = tmp
-end
-  end
-end
-
-unless header.nil? || header.empty?
-  keys = nominee.keys
-  case name
-  when NOMINATED_BOARD
-raise ArgumentError.new "Expected 3 keys, found #{keys} at 
'#{header}' in #{name}" unless keys.size == 3
-  when NOMINATED_MEMBERS
-raise ArgumentError.new "Expected 4