                    The Apache Software Foundation

                  Board of Directors Meeting Agenda

<%= @meeting.strftime('%B %d, %Y').center(70).rstrip %>


 1. Call to order

    The meeting is scheduled for <%= @time %> Pacific and will begin as
    soon thereafter that a sufficient attendance to constitute a
    quorum is recognized by the chairman.

            Other Time Zones: <%= @tzlink %>

    The meeting will be held via teleconference, hosted by the Secretary
    via Zoom:

            https://zoom.us/j/880929668

            One tap mobile
            +19294362866,,880929668# US (New York)
            +16699006833,,880929668# US (San Jose)

            Dial by your location
                    +1 929 436 2866 US (New York)
                    +1 669 900 6833 US (San Jose)
            Meeting ID: 880 929 668
            Find your local number: https://zoom.us/u/aeTYHU0QL

    IRC #asfboard on irc.freenode.net will be used for backup
    purposes.

 2. Roll Call

    ASF members are welcome to attend board meetings. Please
    add your name under "guests" below, or just join the call and
    announce your presence during the roll call at the beginning
    of the meeting.

    Directors (expected to be) Present:

<% @directors.each do |director| %>
        <%= director %>
<% end %>

    Directors (expected to be) Absent:

        none

    Executive Officers (expected to be) Present:

        Sally Khudairi
        David Nalley
        Tom Pappas
        Sam Ruby
        Matt Sicker

    Executive Officers (expected to be) Absent:

        none

    Guests (expected):

        Daniel Gruno
        Greg Stein

 3. Minutes from previous meetings

    Minutes (in Subversion) are found under the URL:

        https://svn.apache.org/repos/private/foundation/board/

<% @minutes.zip('A'..'Z').each do |date, index| %>
    <%= index %>. The meeting of <%= date.strftime('%B %d, %Y') %>

       See: board_minutes_<%= date.strftime('%Y_%m_%d') %>.txt

       [ approved:
         comments:
         ]

<% end %>
 4. Executive Officer Reports

    A. Chairman [Craig]

    B. President [Sam]

       Additionally, please see Attachments 1 through 9.

       [ comments:
         ]

    C. Treasurer [Myrle]

    D. Secretary [Matt]

    E. Executive Vice President [David]

    F. Vice Chairman [Shane]

 5. Additional Officer Reports

    A. VP of W3C Relations [<%=
       @owner.for(ASF::Committee.find('W3C Relations')) %>]

       See Attachment 10

       [ approved:
         comments:
         ]

    B. Apache Legal Affairs Committee [<%=
       @owner.for(ASF::Committee.find('Legal Affairs')) %>]

       See Attachment 11

       [ approved:
         comments:
         ]

    C. Apache Security Team Project [<%=
       @owner.for(ASF::Committee.find('Security Team')) %>]

       See Attachment 12

       [ approved:
         comments:
         ]

    A. VP of Jakarta EE Relations [<%=
       @owner.for(ASF::Committee.find('Jakarta EE Relations')) %>]

       See Attachment 13

       [ approved:
         comments:
         ]

 6. Committee Reports

    Summary of Reports

     The following reports require further discussion:

<% @pmcs.zip('A'..'ZZ').each do |pmc, index| %>
    <%= index %>. Apache <%= pmc.display_name %> Project [<%=
       @owner.for(pmc) %>]

       See Attachment <%= index %>

       [ <%= pmc.display_name %>.
         approved:
         comments:
         ]

<% end %>
 7. Special Orders

 8. Discussion Items

 9. Review Outstanding Action Items

10. Unfinished Business

11. New Business

12. Announcements

13. Adjournment

    Scheduled to adjourn by 12:30pm (Pacific)


============
ATTACHMENTS:
============

-----------------------------------------
Attachment 1: Report from the VP of Brand Management  [<%=
ASF::Committee.find('Brand Management').chair.public_name %>]


-----------------------------------------
Attachment 2: Report from the VP of Fundraising  [<%=
ASF::Committee.find('Fundraising').chair.public_name %>]


-----------------------------------------
Attachment 3: Report from the VP of Marketing and Publicity  [<%=
ASF::Committee.find('Marketing and Publicity').chair.public_name %>]


-----------------------------------------
Attachment 4: Report from the VP of Infrastructure  [<%=
ASF::Committee.find('Infrastructure').chair.public_name %>]


-----------------------------------------
Attachment 5: Report from the VP of Conferences  [<%=
ASF::Committee.find('Conferences').chair.public_name %>]


-----------------------------------------
Attachment 6: Report from the Apache Travel Assistance Committee  [<%=
ASF::Committee.find('Travel Assistance').chair.public_name %>]


-----------------------------------------
Attachment 7: Report from the VP of Finance  [<%=
ASF::Committee.find('Finance').chair.public_name %>]


-----------------------------------------
Attachment 8: Report from the VP of Diversity and Inclusion  [<%=
ASF::Committee.find('Diversity and Inclusion').chair.public_name %>]


-----------------------------------------
Attachment 9: Report from the VP of Data Privacy  [<%= 
ASF::Committee.find('Data Privacy').chair.public_name %>]


-----------------------------------------
Attachment 10: Report from the VP of W3C Relations  [<%=
ASF::Committee.find('W3C Relations').chair.public_name %>]


-----------------------------------------
Attachment 11: Report from the Apache Legal Affairs Committee  [<%=
ASF::Committee.find('Legal Affairs').chair.public_name %>]


-----------------------------------------
Attachment 12: Report from the Apache Security Team Project  [<%= 
ASF::Committee.find('Security Team').chair.public_name %>]


-----------------------------------------
Attachment 13: Report from the VP of Jakarta EE Relations  [<%=
ASF::Committee.find('Jakarta EE Relations').chair.public_name %>]


<% @pmcs.zip('A'..'ZZ').each do |pmc, index| %>
-----------------------------------------
Attachment <%= index %>: Report from the Apache <%= 
pmc.display_name %> Project  [<%= pmc.chair.public_name %>]


<% end %>
------------------------------------------------------
End of agenda for the <%= @meeting.strftime('%B %d, %Y') %> board meeting.
